From 5a2169b688da8b4cf930327818f532e1d9dbf3b9 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 11 Mar 2022 00:39:34 +0800 Subject: [PATCH] 将 tool 合并到 infra 模块 --- README.md | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------- pom.xml | 1 - sql/ruoyi-vue-pro.sql | 1370 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-infra/pom.xml | 7 ++++--- yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java | 14 ++++++++++++++ yudao-module-infra/yudao-module-infra-impl/pom.xml | 10 ++++++++-- yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java | 21 +++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java | 17 +++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java | 23 +++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableBaseVO.java | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java | 35 +++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java | 26 ++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/SchemaTableRespVO.java | 25 +++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java | 34 ++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoCreateReqVO.java | 12 ++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExcelVO.java | 38 ++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExportReqVO.java | 38 ++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoPageReqVO.java | 40 ++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoRespVO.java | 19 +++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoUpdateReqVO.java | 17 +++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/codegen/CodegenConvert.java | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/test/TestDemoConvert.java | 36 ++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenColumnDO.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaColumnDO.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaTableDO.java | 36 ++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/test/TestDemoDO.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java | 22 ++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java | 25 +++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapper.java | 19 +++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaTableMapper.java | 26 ++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java | 43 +++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java | 29 +++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnListConditionEnum.java | 27 +++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenImportTypeEnum.java | 23 +++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenSceneEnum.java | 41 +++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java | 24 ++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/package-info.java | 4 ++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenConfiguration.java | 9 +++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java | 28 ++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/package-info.java | 4 ++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java | 5 +++-- yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenService.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java | 292 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java | 207 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenSQLParser.java | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/controller.vm | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/_column.vm | 13 +++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm | 31 +++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm | 30 ++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm | 37 +++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm | 42 ++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm | 44 ++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/respVO.vm | 20 ++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm | 30 ++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/convert/convert.vm | 34 ++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/do.vm | 38 ++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/mapper.vm | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/enums/errorcode.vm | 3 +++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/service.vm | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/serviceImpl.vm | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/test/serviceTest.vm | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/h2.vm | 24 ++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/sql.vm | 27 +++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/api/api.js.vm | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm | 399 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java | 23 +++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/package-info.java | 4 ++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/package-info.java | 4 ++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java | 34 ++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenSQLParserTest.java | 29 +++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java | 20 ++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/package-info.java | 4 ++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisIntegrationTest.java | 38 ++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseRedisIntegrationTest.java | 23 +++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql | 1 + yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql | 15 +++++++++++++++ yudao-module-tool/pom.xml | 24 ------------------------ yudao-module-tool/yudao-module-tool-api/pom.xml | 26 -------------------------- yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java | 12 ------------ yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java | 25 ------------------------- yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java | 1 - yudao-module-tool/yudao-module-tool-impl/pom.xml | 78 ------------------------------------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java | 169 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java | 21 --------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java | 17 ----------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java | 49 ------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java | 85 ------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java | 23 ----------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java | 61 ------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java | 35 ----------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java | 26 -------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java | 25 ------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/doc/DbDocController.java | 158 -------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java | 96 ------------------------------------------------------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java | 34 ---------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java | 14 -------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java | 38 -------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java | 38 -------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java | 40 ---------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java | 19 ------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java | 18 ------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java | 6 ------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java | 70 ---------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java | 34 ---------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java | 124 ---------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java | 102 ------------------------------------------------------------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java | 54 ------------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java | 36 ------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java | 48 ------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java | 22 ---------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java | 25 ------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java | 19 ------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java | 26 -------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java | 42 ------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java | 29 ----------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java | 27 --------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java | 23 ----------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java | 42 ------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java | 24 ------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java | 9 --------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java | 28 ---------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java | 6 ------ yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java | 8 -------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java | 124 ---------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java | 292 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java | 207 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java | 225 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java | 117 --------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java | 70 ---------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java | 82 ---------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm | 109 ------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm | 13 ------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm | 31 ------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm | 30 ------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm | 37 ------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm | 42 ------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm | 44 -------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm | 20 -------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm | 30 ------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm | 34 ---------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm | 38 -------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm | 66 ------------------------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm | 3 --- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm | 70 ---------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm | 82 ---------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm | 161 ----------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm | 24 ------------------------ yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm | 27 --------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm | 55 ------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm | 399 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapperTest.java | 23 ----------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenEngineTest.java | 34 ---------------------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenSQLParserTest.java | 29 ----------------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImplTest.java | 20 -------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/package-info.java | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseDbAndRedisIntegrationTest.java | 38 -------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseRedisIntegrationTest.java | 23 ----------------------- yudao-module-tool/yudao-module-tool-impl/src/test-integration/resources/application-integration-test.yaml | 108 ------------------------------------------------------------------------------------------------------------ yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/package-info.java | 1 - yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImplTest.java | 187 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/test/BaseDbUnitTest.java | 41 ----------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/test/resources/application-unit-test.yaml | 49 ------------------------------------------------- yudao-module-tool/yudao-module-tool-impl/src/test/resources/logback.xml | 4 ---- yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql | 1 - yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql | 14 -------------- yudao-server/pom.xml | 5 ----- yudao-server/src/main/resources/application.yaml | 17 ++++++++--------- yudao-ui-admin/src/api/infra/codegen.js | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/api/infra/dbDoc.js | 26 ++++++++++++++++++++++++++ yudao-ui-admin/src/api/infra/testDemo.js | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/api/tool/codegen.js | 105 --------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/api/tool/dbDoc.js | 26 -------------------------- yudao-ui-admin/src/api/tool/testDemo.js | 54 ------------------------------------------------------ yudao-ui-admin/src/router/index.js | 4 ++-- yudao-ui-admin/src/utils/constants.js | 2 +- yudao-ui-admin/src/utils/dict.js | 6 ++---- yudao-ui-admin/src/views/bpm/form/formEditor.vue | 10 +++++----- yudao-ui-admin/src/views/infra/build/App.vue | 22 ++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/CodeTypeDialog.vue | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/DraggableItem.vue | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/FormDrawer.vue | 331 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/IconsDialog.vue | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/JsonDrawer.vue | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/README.md | 0 yudao-ui-admin/src/views/infra/build/ResourceDialog.vue | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/RightPanel.vue | 1050 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/TreeNodeDialog.vue | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/index.vue | 469 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/build/main.js | 19 +++++++++++++++++++ yudao-ui-admin/src/views/infra/codegen/basicInfoForm.vue | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/codegen/editTable.vue | 235 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/codegen/genInfoForm.vue | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/codegen/importTable.vue | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/codegen/index.vue | 376 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/dbDoc/index.vue | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/infra/swagger/index.vue | 15 +++++++++++++++ yudao-ui-admin/src/views/infra/testDemo/index.vue | 262 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ yudao-ui-admin/src/views/tool/build/App.vue | 22 ---------------------- yudao-ui-admin/src/views/tool/build/CodeTypeDialog.vue | 110 -------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/build/DraggableItem.vue | 120 ------------------------------------------------------------------------------------------------------------------------ yudao-ui-admin/src/views/tool/build/FormDrawer.vue | 331 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/build/IconsDialog.vue | 123 --------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/build/JsonDrawer.vue | 144 ------------------------------------------------------------------------------------------------------------------------------------------------ yudao-ui-admin/src/views/tool/build/README.md | 0 yudao-ui-admin/src/views/tool/build/ResourceDialog.vue | 116 -------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/build/RightPanel.vue | 1050 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ yudao-ui-admin/src/views/tool/build/TreeNodeDialog.vue | 158 -------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/build/index.vue | 469 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/build/main.js | 19 ------------------- yudao-ui-admin/src/views/tool/codegen/basicInfoForm.vue | 61 ------------------------------------------------------------- yudao-ui-admin/src/views/tool/codegen/editTable.vue | 235 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/codegen/genInfoForm.vue | 327 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/codegen/importTable.vue | 106 ---------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/codegen/index.vue | 376 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- yudao-ui-admin/src/views/tool/dbDoc/index.vue | 68 -------------------------------------------------------------------- yudao-ui-admin/src/views/tool/swagger/index.vue | 15 --------------- yudao-ui-admin/src/views/tool/testDemo/index.vue | 262 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 233 files changed, 9770 insertions(+), 10054 deletions(-) create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableBaseVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/SchemaTableRespVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoCreateReqVO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExcelVO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExportReqVO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoPageReqVO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoRespVO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoUpdateReqVO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/codegen/CodegenConvert.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/test/TestDemoConvert.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenColumnDO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaColumnDO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaTableDO.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/test/TestDemoDO.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapper.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaTableMapper.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnListConditionEnum.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenImportTypeEnum.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenSceneEnum.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenConfiguration.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenService.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenSQLParser.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/controller.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/_column.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/respVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/convert/convert.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/do.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/mapper.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/enums/errorcode.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/service.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/serviceImpl.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/test/serviceTest.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/h2.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/sql.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/api/api.js.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenSQLParserTest.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/package-info.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisIntegrationTest.java create mode 100644 yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseRedisIntegrationTest.java create mode 100755 yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java delete mode 100644 yudao-module-tool/pom.xml delete mode 100644 yudao-module-tool/yudao-module-tool-api/pom.xml delete mode 100644 yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java delete mode 100644 yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java delete mode 100644 yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/pom.xml delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/doc/DbDocController.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapperTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenEngineTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenSQLParserTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImplTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/package-info.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseDbAndRedisIntegrationTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseRedisIntegrationTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test-integration/resources/application-integration-test.yaml delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/package-info.java delete mode 100755 yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImplTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/test/BaseDbUnitTest.java delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test/resources/application-unit-test.yaml delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test/resources/logback.xml delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql delete mode 100644 yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql create mode 100644 yudao-ui-admin/src/api/infra/codegen.js create mode 100644 yudao-ui-admin/src/api/infra/dbDoc.js create mode 100755 yudao-ui-admin/src/api/infra/testDemo.js delete mode 100644 yudao-ui-admin/src/api/tool/codegen.js delete mode 100644 yudao-ui-admin/src/api/tool/dbDoc.js delete mode 100755 yudao-ui-admin/src/api/tool/testDemo.js create mode 100644 yudao-ui-admin/src/views/infra/build/App.vue create mode 100644 yudao-ui-admin/src/views/infra/build/CodeTypeDialog.vue create mode 100644 yudao-ui-admin/src/views/infra/build/DraggableItem.vue create mode 100644 yudao-ui-admin/src/views/infra/build/FormDrawer.vue create mode 100644 yudao-ui-admin/src/views/infra/build/IconsDialog.vue create mode 100644 yudao-ui-admin/src/views/infra/build/JsonDrawer.vue create mode 100644 yudao-ui-admin/src/views/infra/build/README.md create mode 100644 yudao-ui-admin/src/views/infra/build/ResourceDialog.vue create mode 100644 yudao-ui-admin/src/views/infra/build/RightPanel.vue create mode 100644 yudao-ui-admin/src/views/infra/build/TreeNodeDialog.vue create mode 100644 yudao-ui-admin/src/views/infra/build/index.vue create mode 100644 yudao-ui-admin/src/views/infra/build/main.js create mode 100644 yudao-ui-admin/src/views/infra/codegen/basicInfoForm.vue create mode 100644 yudao-ui-admin/src/views/infra/codegen/editTable.vue create mode 100644 yudao-ui-admin/src/views/infra/codegen/genInfoForm.vue create mode 100644 yudao-ui-admin/src/views/infra/codegen/importTable.vue create mode 100644 yudao-ui-admin/src/views/infra/codegen/index.vue create mode 100644 yudao-ui-admin/src/views/infra/dbDoc/index.vue create mode 100644 yudao-ui-admin/src/views/infra/swagger/index.vue create mode 100755 yudao-ui-admin/src/views/infra/testDemo/index.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/App.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/CodeTypeDialog.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/DraggableItem.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/FormDrawer.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/IconsDialog.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/JsonDrawer.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/README.md delete mode 100644 yudao-ui-admin/src/views/tool/build/ResourceDialog.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/RightPanel.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/TreeNodeDialog.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/index.vue delete mode 100644 yudao-ui-admin/src/views/tool/build/main.js delete mode 100644 yudao-ui-admin/src/views/tool/codegen/basicInfoForm.vue delete mode 100644 yudao-ui-admin/src/views/tool/codegen/editTable.vue delete mode 100644 yudao-ui-admin/src/views/tool/codegen/genInfoForm.vue delete mode 100644 yudao-ui-admin/src/views/tool/codegen/importTable.vue delete mode 100644 yudao-ui-admin/src/views/tool/codegen/index.vue delete mode 100644 yudao-ui-admin/src/views/tool/dbDoc/index.vue delete mode 100644 yudao-ui-admin/src/views/tool/swagger/index.vue delete mode 100755 yudao-ui-admin/src/views/tool/testDemo/index.vue diff --git a/README.md b/README.md index 62d89fe..3ba3860 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,10 @@ * 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款。 * 集成阿里云、腾讯云、云片等短信渠道,集成阿里云、腾讯云、七牛云等云存储服务。 -| 项目名 | 说明 | 传说门 | -| ---- |------------------------| ---- | -| `ruoyi-vue-pro` | Spring Boot 多模块 | **[Gitee](https://gitee.com/zhijiantianya/ruoyi-vue-pro)**     [Github](https://github.com/YunaiV/ruoyi-vue-pro) | -| `ruoyi-vue-cloud` | Spring Cloud 微服务 | **[Gitee](https://gitee.com/zhijiantianya/ruoyi-vue-cloud)**     [Github](https://github.com/YunaiV/onemall) | +| 项目名 | 说明 | 传说门 | +|--------------------|------------------------|-------------------------------------------------------------------------------------------------------------------------------------| +| `ruoyi-vue-pro` | Spring Boot 多模块 | **[Gitee](https://gitee.com/zhijiantianya/ruoyi-vue-pro)**     [Github](https://github.com/YunaiV/ruoyi-vue-pro) | +| `ruoyi-vue-cloud` | Spring Cloud 微服务 | **[Gitee](https://gitee.com/zhijiantianya/ruoyi-vue-cloud)**     [Github](https://github.com/YunaiV/onemall) | | `Spring-Boot-Labs` | Spring Boot & Cloud 入门 | **[Gitee](https://gitee.com/zhijiantianya/SpringBoot-Labs)**     [Github](https://github.com/YunaiV/SpringBoot-Labs) | ## 🐶 在线体验 @@ -45,7 +45,6 @@ * 支付系统 * 商城系统 * 基础设施 -* 研发工具 > 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 > @@ -56,43 +55,43 @@ ### 系统功能 -| | 功能 | 描述 | -| --- | --- | --- | -| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | -| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | -| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | -| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | -| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | -| | 岗位管理 | 配置系统用户所属担任职务 | -| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 | -| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 | -| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | -| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 | -| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | -| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 | -| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | -| | 通知公告 | 系统通知公告信息发布维护 | +| | 功能 | 描述 | +|-----|-------|---------------------------------| +| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | +| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | +| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | +| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | +| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | +| | 岗位管理 | 配置系统用户所属担任职务 | +| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 | +| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 | +| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | +| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 | +| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | +| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 | +| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | +| | 通知公告 | 系统通知公告信息发布维护 | ### 工作流程 -| | 功能 | 描述 | -| --- | --- | --- | -| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 | -| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | -| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | -| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | -| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 | -| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 | -| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | +| | 功能 | 描述 | +|-----|-------|----------------------------------------| +| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 | +| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | +| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | +| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | +| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 | +| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 | +| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | ### 支付系统 -| | 功能 | 描述 | -| --- | --- | --- | -| 🚀 | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能 | -| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 | -| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 | -| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 | +| | 功能 | 描述 | +|-----|------|---------------------------| +| 🚀 | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能 | +| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 | +| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 | +| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 | ps:核心功能已经实现,正在对接微信小程序中... @@ -109,32 +108,27 @@ ps:核心功能已经实现,正在对接微信小程序中... ### 基础设施 -| | 功能 | 描述 | -| --- | --- | --- | -| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | -| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | -| 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 | -| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | -| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | -| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | -| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 | -| 🚀 |Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | -| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 | -| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 | -| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | -| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 | -| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 | -| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | -| 🚀 | 单元测试 |基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | - -### 研发工具 - -| | 功能 | 描述 | -| --- | --- | --- | -| 🚀 | 代码生成 |前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | -| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 | -| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 | -| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 | +| | 功能 | 描述 | +|-----|----------|----------------------------------------------| +| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | +| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 | +| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 | +| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 | +| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | +| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | +| 🚀 | 文件服务 | 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件 | +| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | +| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | +| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | +| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 | +| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | +| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 | +| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 | +| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 | +| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 | +| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 | +| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | +| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | ## 🐨 技术栈 @@ -154,83 +148,79 @@ ps:核心功能已经实现,正在对接微信小程序中... ### 后端 -| 框架 | 说明 | 版本 | 学习指南 | -| --- | --- |----------| --- | -| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.5.10 | [文档](https://github.com/YunaiV/SpringBoot-Labs) | -| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 | | -| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.8 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | -| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) | -| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | -| [Redis](https://redis.io/) | key-value 数据库 | 5.0 | | -| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.16.8 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) | -| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.16 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) | -| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.5.5 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) | -| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.2 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) | -| [Activiti](https://github.com/Activiti/Activiti) | 工作流引擎 | 7.1.0.M6 | [文档](TODO) | -| [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) | -| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 3.0.2 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) | -| [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.0 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao) | -| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) | -| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.4.2 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) | -| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.12.6 | | -| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) | -| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.16.14 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) | -| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.2 | - | -| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 3.9.0 | - | +| 框架 | 说明 | 版本 | 学习指南 | +|---------------------------------------------------------------------------------------------|------------------|----------|----------------------------------------------------------------| +| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.5.10 | [文档](https://github.com/YunaiV/SpringBoot-Labs) | +| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 | | +| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.8 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | +| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) | +| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | +| [Redis](https://redis.io/) | key-value 数据库 | 5.0 | | +| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.16.8 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) | +| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.16 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) | +| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.5.5 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) | +| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.2 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) | +| [Activiti](https://github.com/Activiti/Activiti) | 工作流引擎 | 7.1.0.M6 | [文档](TODO) | +| [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) | +| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 3.0.2 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) | +| [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.0 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?yudao) | +| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) | +| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.4.2 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) | +| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.12.6 | | +| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) | +| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.16.14 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) | +| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.2 | - | +| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 3.9.0 | - | ### 前端 -| 框架 | 说明 | 版本 | -| --- | --- | --- | -| [Vue](https://cn.vuejs.org/index.html) | JavaScript 框架 | 2.6.12 | -| [Vue Element Admin](https://panjiachen.github.io/vue-element-admin-site/zh/) | 后台前端解决方案 | - | +| 框架 | 说明 | 版本 | +|------------------------------------------------------------------------------|---------------|--------| +| [Vue](https://cn.vuejs.org/index.html) | JavaScript 框架 | 2.6.12 | +| [Vue Element Admin](https://panjiachen.github.io/vue-element-admin-site/zh/) | 后台前端解决方案 | - | ## 🐷 演示图 ### 系统功能 -| 模块 | biu | biu | biu | -| --- | --- |------------------------------------------------------------------| --- | -| 登录 & 首页 | ![登录](https://static.iocoder.cn/images/ruoyi-vue-pro/登录.jpg) | ![首页](https://static.iocoder.cn/images/ruoyi-vue-pro/首页.jpg) | ![个人中心](https://static.iocoder.cn/images/ruoyi-vue-pro/个人中心.jpg) | -| 用户 | ![用户管理](https://static.iocoder.cn/images/ruoyi-vue-pro/用户管理.jpg) | ![在线用户](https://static.iocoder.cn/images/ruoyi-vue-pro/在线用户.jpg) | - | -| 租户 & 套餐 | ![租户管理](https://static.iocoder.cn/images/ruoyi-vue-pro/租户管理.jpg) | ![租户套餐](https://static.iocoder.cn/images/ruoyi-vue-pro/租户套餐.png) | - | -| 部门 & 岗位 | ![部门管理](https://static.iocoder.cn/images/ruoyi-vue-pro/部门管理.jpg) | ![岗位管理](https://static.iocoder.cn/images/ruoyi-vue-pro/岗位管理.jpg) | - | -| 菜单 & 角色 | ![菜单管理](https://static.iocoder.cn/images/ruoyi-vue-pro/菜单管理.jpg) | ![角色管理](https://static.iocoder.cn/images/ruoyi-vue-pro/角色管理.jpg) | - | -| 审计日志 | ![操作日志](https://static.iocoder.cn/images/ruoyi-vue-pro/操作日志.jpg) | ![登录日志](https://static.iocoder.cn/images/ruoyi-vue-pro/登录日志.jpg) | - | -| 短信 | ![短信渠道](https://static.iocoder.cn/images/ruoyi-vue-pro/短信渠道.jpg) | ![短信模板](https://static.iocoder.cn/images/ruoyi-vue-pro/短信模板.jpg) | ![短信日志](https://static.iocoder.cn/images/ruoyi-vue-pro/短信日志.jpg) | -| 字典 | ![字典类型](https://static.iocoder.cn/images/ruoyi-vue-pro/字典类型.jpg) | ![字典数据](https://static.iocoder.cn/images/ruoyi-vue-pro/字典数据.jpg) | - | -| 错误码 & 通知 | ![错误码管理](https://static.iocoder.cn/images/ruoyi-vue-pro/错误码管理.jpg) | ![通知公告](https://static.iocoder.cn/images/ruoyi-vue-pro/通知公告.jpg) | - | +| 模块 | biu | biu | biu | +|----------|--------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------| +| 登录 & 首页 | ![登录](https://static.iocoder.cn/images/ruoyi-vue-pro/登录.jpg) | ![首页](https://static.iocoder.cn/images/ruoyi-vue-pro/首页.jpg) | ![个人中心](https://static.iocoder.cn/images/ruoyi-vue-pro/个人中心.jpg) | +| 用户 | ![用户管理](https://static.iocoder.cn/images/ruoyi-vue-pro/用户管理.jpg) | ![在线用户](https://static.iocoder.cn/images/ruoyi-vue-pro/在线用户.jpg) | - | +| 租户 & 套餐 | ![租户管理](https://static.iocoder.cn/images/ruoyi-vue-pro/租户管理.jpg) | ![租户套餐](https://static.iocoder.cn/images/ruoyi-vue-pro/租户套餐.png) | - | +| 部门 & 岗位 | ![部门管理](https://static.iocoder.cn/images/ruoyi-vue-pro/部门管理.jpg) | ![岗位管理](https://static.iocoder.cn/images/ruoyi-vue-pro/岗位管理.jpg) | - | +| 菜单 & 角色 | ![菜单管理](https://static.iocoder.cn/images/ruoyi-vue-pro/菜单管理.jpg) | ![角色管理](https://static.iocoder.cn/images/ruoyi-vue-pro/角色管理.jpg) | - | +| 审计日志 | ![操作日志](https://static.iocoder.cn/images/ruoyi-vue-pro/操作日志.jpg) | ![登录日志](https://static.iocoder.cn/images/ruoyi-vue-pro/登录日志.jpg) | - | +| 短信 | ![短信渠道](https://static.iocoder.cn/images/ruoyi-vue-pro/短信渠道.jpg) | ![短信模板](https://static.iocoder.cn/images/ruoyi-vue-pro/短信模板.jpg) | ![短信日志](https://static.iocoder.cn/images/ruoyi-vue-pro/短信日志.jpg) | +| 字典 | ![字典类型](https://static.iocoder.cn/images/ruoyi-vue-pro/字典类型.jpg) | ![字典数据](https://static.iocoder.cn/images/ruoyi-vue-pro/字典数据.jpg) | - | +| 错误码 & 通知 | ![错误码管理](https://static.iocoder.cn/images/ruoyi-vue-pro/错误码管理.jpg) | ![通知公告](https://static.iocoder.cn/images/ruoyi-vue-pro/通知公告.jpg) | - | ### 工作流程 -| 模块 | biu | biu | biu | -| --- | --- | --- | --- | -| 流程模型 | ![流程模型-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-列表.jpg) | ![流程模型-设计](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-设计.jpg) | ![流程模型-定义](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-定义.jpg) | -| 表单 & 分组 | ![流程表单](https://static.iocoder.cn/images/ruoyi-vue-pro/流程表单.jpg) | ![用户分组](https://static.iocoder.cn/images/ruoyi-vue-pro/用户分组.jpg) | - | -| 我的流程 | ![我的流程-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-列表.jpg) | ![我的流程-发起](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-发起.jpg) | ![我的流程-详情](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-详情.jpg) | +| 模块 | biu | biu | biu | +|---------|------------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------| +| 流程模型 | ![流程模型-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-列表.jpg) | ![流程模型-设计](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-设计.jpg) | ![流程模型-定义](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-定义.jpg) | +| 表单 & 分组 | ![流程表单](https://static.iocoder.cn/images/ruoyi-vue-pro/流程表单.jpg) | ![用户分组](https://static.iocoder.cn/images/ruoyi-vue-pro/用户分组.jpg) | - | +| 我的流程 | ![我的流程-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-列表.jpg) | ![我的流程-发起](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-发起.jpg) | ![我的流程-详情](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-详情.jpg) | | 待办 & 已办 | ![任务列表-审批](https://static.iocoder.cn/images/ruoyi-vue-pro/任务列表-审批.jpg) | ![任务列表-待办](https://static.iocoder.cn/images/ruoyi-vue-pro/任务列表-待办.jpg) | ![任务列表-已办](https://static.iocoder.cn/images/ruoyi-vue-pro/任务列表-已办.jpg) | -| OA 请假 | ![OA请假-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-列表.jpg) | ![OA请假-发起](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-发起.jpg) | ![OA请假-详情](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-详情.jpg) | +| OA 请假 | ![OA请假-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-列表.jpg) | ![OA请假-发起](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-发起.jpg) | ![OA请假-详情](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-详情.jpg) | ### 支付系统 -| 模块 | biu | biu | biu | -| --- | --- | --- | --- | +| 模块 | biu | biu | biu | +|---------|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------| | 商家 & 应用 | ![商户信息](https://static.iocoder.cn/images/ruoyi-vue-pro/商户信息.jpg) | ![应用信息-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/应用信息-列表.jpg) | ![应用信息-编辑](https://static.iocoder.cn/images/ruoyi-vue-pro/应用信息-编辑.jpg) | -| 支付 & 退款 | ![支付订单](https://static.iocoder.cn/images/ruoyi-vue-pro/支付订单.jpg) | ![退款订单](https://static.iocoder.cn/images/ruoyi-vue-pro/退款订单.jpg) | --- | +| 支付 & 退款 | ![支付订单](https://static.iocoder.cn/images/ruoyi-vue-pro/支付订单.jpg) | ![退款订单](https://static.iocoder.cn/images/ruoyi-vue-pro/退款订单.jpg) | --- | ### 基础设施 -| 模块 | biu | biu | biu | -| --- | --- | --- | --- | -| 文件 & 配置 | ![文件管理](https://static.iocoder.cn/images/ruoyi-vue-pro/文件管理.jpg) | ![配置管理](https://static.iocoder.cn/images/ruoyi-vue-pro/配置管理.jpg) | - | -| 定时任务 | ![定时任务](https://static.iocoder.cn/images/ruoyi-vue-pro/定时任务.jpg) | ![任务日志](https://static.iocoder.cn/images/ruoyi-vue-pro/任务日志.jpg) | - | -| API 日志 | ![访问日志](https://static.iocoder.cn/images/ruoyi-vue-pro/访问日志.jpg) | ![错误日志](https://static.iocoder.cn/images/ruoyi-vue-pro/错误日志.jpg) | - | -| MySQL & Redis | ![MySQL](https://static.iocoder.cn/images/ruoyi-vue-pro/MySQL.jpg) | ![Redis](https://static.iocoder.cn/images/ruoyi-vue-pro/Redis.jpg) | - | -| 监控平台 | ![Java监控](https://static.iocoder.cn/images/ruoyi-vue-pro/Java监控.jpg) | ![链路追踪](https://static.iocoder.cn/images/ruoyi-vue-pro/链路追踪.jpg) | ![日志中心](https://static.iocoder.cn/images/ruoyi-vue-pro/日志中心.jpg) | +| 模块 | biu | biu | biu | +|---------------|----------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------| +| 代码生成 | ![代码生成](https://static.iocoder.cn/images/ruoyi-vue-pro/代码生成.jpg) | ![生成效果](https://static.iocoder.cn/images/ruoyi-vue-pro/生成效果.jpg) | - | +| 文档 | ![系统接口](https://static.iocoder.cn/images/ruoyi-vue-pro/系统接口.jpg) | ![数据库文档](https://static.iocoder.cn/images/ruoyi-vue-pro/数据库文档.jpg) | - | +| 文件 & 配置 | ![文件管理](https://static.iocoder.cn/images/ruoyi-vue-pro/文件管理.jpg) | ![配置管理](https://static.iocoder.cn/images/ruoyi-vue-pro/配置管理.jpg) | - | +| 定时任务 | ![定时任务](https://static.iocoder.cn/images/ruoyi-vue-pro/定时任务.jpg) | ![任务日志](https://static.iocoder.cn/images/ruoyi-vue-pro/任务日志.jpg) | - | +| API 日志 | ![访问日志](https://static.iocoder.cn/images/ruoyi-vue-pro/访问日志.jpg) | ![错误日志](https://static.iocoder.cn/images/ruoyi-vue-pro/错误日志.jpg) | - | +| MySQL & Redis | ![MySQL](https://static.iocoder.cn/images/ruoyi-vue-pro/MySQL.jpg) | ![Redis](https://static.iocoder.cn/images/ruoyi-vue-pro/Redis.jpg) | - | +| 监控平台 | ![Java监控](https://static.iocoder.cn/images/ruoyi-vue-pro/Java监控.jpg) | ![链路追踪](https://static.iocoder.cn/images/ruoyi-vue-pro/链路追踪.jpg) | ![日志中心](https://static.iocoder.cn/images/ruoyi-vue-pro/日志中心.jpg) | -### 研发工具 - -| 模块 | biu | biu | biu | -| --- | --- | --- | --- | -| 代码生成 | ![代码生成](https://static.iocoder.cn/images/ruoyi-vue-pro/代码生成.jpg) | ![生成效果](https://static.iocoder.cn/images/ruoyi-vue-pro/生成效果.jpg) | - | -| 文档 | ![系统接口](https://static.iocoder.cn/images/ruoyi-vue-pro/系统接口.jpg) | ![数据库文档](https://static.iocoder.cn/images/ruoyi-vue-pro/数据库文档.jpg) | - | diff --git a/pom.xml b/pom.xml index 2208ad2..46502fe 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,6 @@ yudao-module-bpm yudao-module-system yudao-module-infra - yudao-module-tool yudao-module-pay diff --git a/sql/ruoyi-vue-pro.sql b/sql/ruoyi-vue-pro.sql index e690a89..2a779a8 100644 --- a/sql/ruoyi-vue-pro.sql +++ b/sql/ruoyi-vue-pro.sql @@ -11,7 +11,7 @@ Target Server Version : 80026 File Encoding : 65001 - Date: 27/02/2022 16:31:44 + Date: 11/03/2022 00:39:00 */ SET NAMES utf8mb4; @@ -62,9 +62,9 @@ CREATE TABLE `bpm_oa_leave` ( `day` tinyint NOT NULL COMMENT '请假天数', `result` tinyint NOT NULL COMMENT '请假结果', `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '流程实例的编号', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -122,7 +122,7 @@ CREATE TABLE `bpm_process_definition_ext` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 流程定义的拓展表\n'; +) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 流程定义的拓展表\n'; -- ---------------------------- -- Records of bpm_process_definition_ext @@ -209,6 +209,7 @@ INSERT INTO `bpm_process_definition_ext` VALUES (90, 'eee:17:f3aad03b-7ae5-11ec- INSERT INTO `bpm_process_definition_ext` VALUES (91, 'oa_leave:3:1fad3d93-7b75-11ec-a3c8-acde48001122', 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'OA 请假的示例', 20, NULL, NULL, NULL, '/bpm/oa/flow', '/oa/oa/leave', '1', '2022-01-22 19:19:11', '1', '2022-02-19 17:29:14', b'0', 1); INSERT INTO `bpm_process_definition_ext` VALUES (92, 'oa_leave:4:991f2193-7b7f-11ec-a3c8-acde48001122', 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'OA 请假的示例', 20, NULL, NULL, NULL, '/bpm/oa/flow', '/oa/oa/leave', '1', '2022-01-22 20:34:10', '1', '2022-02-19 17:29:14', b'0', 1); INSERT INTO `bpm_process_definition_ext` VALUES (93, 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'OA 请假的示例', 20, NULL, NULL, NULL, '/bpm/oa/leave/create', '/bpm/oa/leave/detail', '1', '2022-01-22 21:48:38', '1', '2022-02-19 17:29:14', b'0', 1); +INSERT INTO `bpm_process_definition_ext` VALUES (94, 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', '4b4909d8-97e7-11ec-8e20-862bc1a4a054', 'ooxx', 10, 11, '{\"formRef\":\"elForm\",\"formModel\":\"formData\",\"size\":\"medium\",\"labelPosition\":\"right\",\"labelWidth\":100,\"formRules\":\"rules\",\"gutter\":15,\"disabled\":false,\"span\":24,\"formBtns\":true}', '[\"{\\\"__config__\\\":{\\\"label\\\":\\\"单行文本\\\",\\\"labelWidth\\\":null,\\\"showLabel\\\":true,\\\"changeTag\\\":true,\\\"tag\\\":\\\"el-input\\\",\\\"tagIcon\\\":\\\"input\\\",\\\"required\\\":true,\\\"layout\\\":\\\"colFormItem\\\",\\\"span\\\":24,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/input\\\",\\\"regList\\\":[],\\\"formId\\\":121,\\\"renderKey\\\":\\\"1211641657675668\\\"},\\\"__slot__\\\":{\\\"prepend\\\":\\\"\\\",\\\"append\\\":\\\"\\\"},\\\"placeholder\\\":\\\"请输入单行文本\\\",\\\"style\\\":{\\\"width\\\":\\\"100%\\\"},\\\"clearable\\\":true,\\\"prefix-icon\\\":\\\"\\\",\\\"suffix-icon\\\":\\\"\\\",\\\"maxlength\\\":null,\\\"show-word-limit\\\":false,\\\"readonly\\\":false,\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field121\\\"}\",\"{\\\"__config__\\\":{\\\"label\\\":\\\"多选框组\\\",\\\"tag\\\":\\\"el-checkbox-group\\\",\\\"tagIcon\\\":\\\"checkbox\\\",\\\"defaultValue\\\":[],\\\"span\\\":24,\\\"showLabel\\\":true,\\\"labelWidth\\\":null,\\\"layout\\\":\\\"colFormItem\\\",\\\"optionType\\\":\\\"default\\\",\\\"required\\\":true,\\\"regList\\\":[],\\\"changeTag\\\":true,\\\"border\\\":false,\\\"document\\\":\\\"https://element.eleme.cn/#/zh-CN/component/checkbox\\\",\\\"formId\\\":122,\\\"renderKey\\\":\\\"1221641097529857\\\"},\\\"__slot__\\\":{\\\"options\\\":[{\\\"label\\\":\\\"选项一\\\",\\\"value\\\":1},{\\\"label\\\":\\\"选项二\\\",\\\"value\\\":2}]},\\\"style\\\":{},\\\"size\\\":\\\"medium\\\",\\\"disabled\\\":false,\\\"__vModel__\\\":\\\"field122\\\"}\"]', NULL, NULL, '1', '2022-02-28 00:53:14', '1', '2022-02-28 00:53:14', b'0', 1); COMMIT; -- ---------------------------- @@ -225,7 +226,7 @@ CREATE TABLE `bpm_process_instance_ext` ( `status` tinyint NOT NULL COMMENT '流程实例的状态', `result` tinyint NOT NULL COMMENT '流程实例的结果', `end_time` datetime DEFAULT NULL COMMENT '结束时间', - `form_variables` varchar(5000) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '表单值', + `form_variables` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '表单值', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', @@ -233,7 +234,7 @@ CREATE TABLE `bpm_process_instance_ext` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=198 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程实例的拓展'; +) ENGINE=InnoDB AUTO_INCREMENT=199 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程实例的拓展'; -- ---------------------------- -- Records of bpm_process_instance_ext @@ -355,6 +356,7 @@ INSERT INTO `bpm_process_instance_ext` VALUES (193, 1, 'OA 请假', '3ad174fb-7b INSERT INTO `bpm_process_instance_ext` VALUES (194, 1, 'eeee', 'b243fa82-7c06-11ec-9110-acde48001122', 'eee:17:f3aad03b-7ae5-11ec-a69c-a2380e71991a', '1', 1, 1, NULL, '{\"field121\":\"AAA\",\"field122\":[1]}', '1', '2022-01-23 12:41:14', '1', '2022-02-19 17:29:20', b'0', 1); INSERT INTO `bpm_process_instance_ext` VALUES (195, 1, '测试多审批人', 'ecddb286-7c07-11ec-a41d-acde48001122', 'test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a', '1', 2, 4, '2022-01-23 12:59:40', '{\"field121\":\"AAA\",\"field122\":[1]}', '1', '2022-01-23 12:50:02', '1', '2022-02-19 17:29:20', b'0', 1); INSERT INTO `bpm_process_instance_ext` VALUES (197, 1, '滔博', '4f676a08-7c09-11ec-b8a1-acde48001122', 'test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a', '1', 1, 1, NULL, '{\"field121\":\"aaa\",\"field122\":[1]}', '1', '2022-01-23 12:59:57', '1', '2022-02-19 17:29:20', b'0', 1); +INSERT INTO `bpm_process_instance_ext` VALUES (198, 1, 'flowable测试', 'c964c377-97ed-11ec-a2b9-862bc1a4a054', 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', '1', 2, 2, '2022-02-28 00:53:35', '{\"field121\":\"AAA\",\"field122\":[1]}', '1', '2022-02-28 00:53:28', '1', '2022-02-28 00:53:35', b'0', 1); COMMIT; -- ---------------------------- @@ -375,7 +377,7 @@ CREATE TABLE `bpm_task_assign_rule` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=181 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 任务规则表'; +) ENGINE=InnoDB AUTO_INCREMENT=183 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bpm 任务规则表'; -- ---------------------------- -- Records of bpm_task_assign_rule @@ -522,6 +524,8 @@ INSERT INTO `bpm_task_assign_rule` VALUES (177, 'e4a1a1ef-7628-11ec-8477-a2380e7 INSERT INTO `bpm_task_assign_rule` VALUES (178, 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'oa_leave:4:991f2193-7b7f-11ec-a3c8-acde48001122', 'task-21', 30, '[1]', '1', '2022-01-22 20:34:10', '1', '2022-02-19 17:29:26', b'0', 1); INSERT INTO `bpm_task_assign_rule` VALUES (179, 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', 'task-01', 50, '[10]', '1', '2022-01-22 21:48:38', '1', '2022-02-19 17:29:26', b'0', 1); INSERT INTO `bpm_task_assign_rule` VALUES (180, 'e4a1a1ef-7628-11ec-8477-a2380e71991a', 'oa_leave:5:004b710b-7b8a-11ec-8ef0-acde48001122', 'task-21', 30, '[1]', '1', '2022-01-22 21:48:38', '1', '2022-02-19 17:29:26', b'0', 1); +INSERT INTO `bpm_task_assign_rule` VALUES (181, '4b4909d8-97e7-11ec-8e20-862bc1a4a054', '', 'task01', 50, '[10]', '1', '2022-02-28 00:53:09', '1', '2022-02-28 00:53:09', b'0', 1); +INSERT INTO `bpm_task_assign_rule` VALUES (182, '4b4909d8-97e7-11ec-8e20-862bc1a4a054', 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', 'task01', 50, '[10]', '1', '2022-02-28 00:53:14', '1', '2022-02-28 00:53:14', b'0', 1); COMMIT; -- ---------------------------- @@ -534,9 +538,9 @@ CREATE TABLE `bpm_task_ext` ( `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '任务的名字', `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务的编号', `result` tinyint NOT NULL COMMENT '任务的结果', - `comment` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审批建议', + `comment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审批建议', `end_time` datetime DEFAULT NULL COMMENT '任务的结束时间', - `process_instance_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程实例的编号', + `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程实例的编号', `process_definition_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '流程定义的编号', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', @@ -545,7 +549,7 @@ CREATE TABLE `bpm_task_ext` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=210 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程任务的拓展表'; +) ENGINE=InnoDB AUTO_INCREMENT=211 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流的流程任务的拓展表'; -- ---------------------------- -- Records of bpm_task_ext @@ -680,6 +684,7 @@ INSERT INTO `bpm_task_ext` VALUES (205, 1, '申请', 'b25363db-7c06-11ec-9110-ac INSERT INTO `bpm_task_ext` VALUES (206, 1, '1.2', 'ee7cbc97-7c07-11ec-a41d-acde48001122', 4, NULL, '2022-01-23 12:59:40', 'ecddb286-7c07-11ec-a41d-acde48001122', 'test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a', '1', '2022-01-23 12:50:05', '1', '2022-02-19 17:29:32', b'0', 1); INSERT INTO `bpm_task_ext` VALUES (207, 1, '1.1', 'ee67adf1-7c07-11ec-a41d-acde48001122', 4, NULL, '2022-01-23 12:59:40', 'ecddb286-7c07-11ec-a41d-acde48001122', 'test_001:4:3dbe6714-76b1-11ec-9c66-a2380e71991a', '1', '2022-01-23 12:50:05', '1', '2022-02-19 17:29:32', b'0', 1); INSERT INTO `bpm_task_ext` VALUES (209, 1, '任务一', '4f6fce81-7c09-11ec-b8a1-acde48001122', 1, NULL, NULL, '4f676a08-7c09-11ec-b8a1-acde48001122', 'test:21:c2cd44b0-79b0-11ec-b2b8-a2380e71991a', '1', '2022-01-23 12:59:57', '1', '2022-02-19 17:29:32', b'0', 1); +INSERT INTO `bpm_task_ext` VALUES (210, 1, 'task01', 'c97146a4-97ed-11ec-a2b9-862bc1a4a054', 2, '嗯嗯嗯', '2022-02-28 00:53:35', 'c964c377-97ed-11ec-a2b9-862bc1a4a054', 'flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054', '1', '2022-02-28 00:53:28', '1', '2022-02-28 00:53:35', b'0', 1); COMMIT; -- ---------------------------- @@ -714,28 +719,28 @@ COMMIT; DROP TABLE IF EXISTS `infra_api_access_log`; CREATE TABLE `infra_api_access_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志主键', - `trace_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编号', + `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '链路追踪编号', `user_id` bigint NOT NULL DEFAULT '0' COMMENT '用户编号', `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', - `application_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名', - `request_method` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求方法名', - `request_url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求地址', - `request_params` varchar(8000) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求参数', - `user_ip` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', - `user_agent` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', + `application_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名', + `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求方法名', + `request_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求地址', + `request_params` varchar(8000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '请求参数', + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', `begin_time` datetime NOT NULL COMMENT '开始请求时间', `end_time` datetime NOT NULL COMMENT '结束请求时间', `duration` int NOT NULL COMMENT '执行时长', `result_code` int NOT NULL DEFAULT '0' COMMENT '结果码', - `result_msg` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '结果提示', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `result_msg` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '结果提示', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=23219 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API 访问日志表'; +) ENGINE=InnoDB AUTO_INCREMENT=23220 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API 访问日志表'; -- ---------------------------- -- Records of infra_api_access_log @@ -1133,6 +1138,7 @@ INSERT INTO `infra_api_access_log` VALUES (23215, '', 0, 0, 'yudao-admin-server' INSERT INTO `infra_api_access_log` VALUES (23216, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/member/send-sms-code', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691399\\\",\\n \\\"scene\\\": 1\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-02-05 21:19:17', '2022-02-05 21:19:50', 32679, 500, '系统异常', NULL, '2022-02-05 21:19:50', NULL, '2022-02-05 21:19:50', b'0', 1); INSERT INTO `infra_api_access_log` VALUES (23217, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/member/send-sms-code', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691399\\\",\\n \\\"scene\\\": 1\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-02-05 21:19:56', '2022-02-05 21:20:16', 20146, 500, '系统异常', NULL, '2022-02-05 21:20:16', NULL, '2022-02-05 21:20:16', b'0', 1); INSERT INTO `infra_api_access_log` VALUES (23218, '', 0, 0, 'yudao-admin-server', 'POST', '/app-api/member/send-sms-code', '{\"query\":{},\"body\":\"{\\n \\\"mobile\\\": \\\"15601691399\\\",\\n \\\"scene\\\": 1\\n}\"}', '127.0.0.1', 'Apache-HttpClient/4.5.13 (Java/11.0.13)', '2022-02-05 21:20:26', '2022-02-05 21:20:29', 2514, 0, '', NULL, '2022-02-05 21:20:29', NULL, '2022-02-05 21:20:29', b'0', 1); +INSERT INTO `infra_api_access_log` VALUES (23219, '', 0, 0, 'yudao-admin-server', 'GET', '/app-api/demo/test/get', '{\"query\":{},\"body\":null}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-06 01:06:39', '2022-03-06 01:06:39', 7, 0, '', NULL, '2022-03-06 01:06:39', NULL, '2022-03-06 01:06:39', b'0', 1); COMMIT; -- ---------------------------- @@ -1141,35 +1147,35 @@ COMMIT; DROP TABLE IF EXISTS `infra_api_error_log`; CREATE TABLE `infra_api_error_log` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '编号', - `trace_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '链路追踪编号\n *\n * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。', + `trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '链路追踪编号\n *\n * 一般来说,通过链路追踪编号,可以将访问日志,错误日志,链路追踪日志,logger 打印日志等,结合在一起,从而进行排错。', `user_id` int NOT NULL DEFAULT '0' COMMENT '用户编号', `user_type` tinyint NOT NULL DEFAULT '0' COMMENT '用户类型', - `application_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名\n *\n * 目前读取 spring.application.name', - `request_method` varchar(16) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求方法名', - `request_url` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求地址', - `request_params` varchar(8000) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求参数', - `user_ip` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', - `user_agent` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', + `application_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名\n *\n * 目前读取 spring.application.name', + `request_method` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求方法名', + `request_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求地址', + `request_params` varchar(8000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求参数', + `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户 IP', + `user_agent` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '浏览器 UA', `exception_time` datetime NOT NULL COMMENT '异常发生时间', - `exception_name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '异常名\n *\n * {@link Throwable#getClass()} 的类全名', - `exception_message` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的消息\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}', - `exception_root_cause_message` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的根消息\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}', - `exception_stack_trace` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常的栈轨迹\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}', - `exception_class_name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的类全名\n *\n * {@link StackTraceElement#getClassName()}', - `exception_file_name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的类文件\n *\n * {@link StackTraceElement#getFileName()}', - `exception_method_name` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的方法名\n *\n * {@link StackTraceElement#getMethodName()}', + `exception_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '异常名\n *\n * {@link Throwable#getClass()} 的类全名', + `exception_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的消息\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getMessage(Throwable)}', + `exception_root_cause_message` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常导致的根消息\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getRootCauseMessage(Throwable)}', + `exception_stack_trace` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常的栈轨迹\n *\n * {@link cn.iocoder.common.framework.util.ExceptionUtil#getServiceException(Exception)}', + `exception_class_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的类全名\n *\n * {@link StackTraceElement#getClassName()}', + `exception_file_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的类文件\n *\n * {@link StackTraceElement#getFileName()}', + `exception_method_name` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异常发生的方法名\n *\n * {@link StackTraceElement#getMethodName()}', `exception_line_number` int NOT NULL COMMENT '异常发生的方法所在行\n *\n * {@link StackTraceElement#getLineNumber()}', `process_status` tinyint NOT NULL COMMENT '处理状态', `process_time` datetime DEFAULT NULL COMMENT '处理时间', `process_user_id` int DEFAULT '0' COMMENT '处理用户编号', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=291 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统异常日志'; +) ENGINE=InnoDB AUTO_INCREMENT=299 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统异常日志'; -- ---------------------------- -- Records of infra_api_error_log @@ -1236,6 +1242,268 @@ INSERT INTO `infra_api_error_log` VALUES (287, '', 104, 2, 'yudao-admin-server', INSERT INTO `infra_api_error_log` VALUES (288, '', 104, 2, 'yudao-admin-server', 'GET', '/admin-api/system/dept/list-all-simple', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', '2022-02-27 11:47:41', 'org.mybatis.spring.MyBatisSystemException', 'MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: \n### Error querying database. Cause: java.lang.NullPointerException\n### Cause: java.lang.NullPointerException', 'NullPointerException: null', 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: \n### Error querying database. Cause: java.lang.NullPointerException\n### Cause: java.lang.NullPointerException\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy131.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy159.selectList(Unknown Source)\n at cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper.selectList(DeptMapper.java:18)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy159.selectList(Unknown Source)\n at cn.iocoder.yudao.module.system.service.dept.DeptServiceImpl.getSimpleDepts(DeptServiceImpl.java:174)\n at cn.iocoder.yudao.module.system.service.dept.DeptServiceImpl$$FastClassBySpringCGLIB$$c56b7507.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.system.service.dept.DeptServiceImpl$$EnhancerBySpringCGLIB$$ebcdbef1.getSimpleDepts()\n at cn.iocoder.yudao.module.system.controller.admin.dept.DeptController.getSimpleDepts(DeptController.java:72)\n at cn.iocoder.yudao.module.system.controller.admin.dept.DeptController$$FastClassBySpringCGLIB$$1d18500.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.system.controller.admin.dept.DeptController$$EnhancerBySpringCGLIB$$e292a6a6.getSimpleDepts()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: org.apache.ibatis.exceptions.PersistenceException: \n### Error querying database. Cause: java.lang.NullPointerException\n### Cause: java.lang.NullPointerException\n at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 185 more\nCaused by: java.lang.NullPointerException\n at cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRule.getExpression(DeptDataPermissionRule.java:116)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.buildDataPermissionExpression(DataPermissionDatabaseInterceptor.java:379)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.builderExpression(DataPermissionDatabaseInterceptor.java:341)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.processPlainSelect(DataPermissionDatabaseInterceptor.java:154)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.processSelectBody(DataPermissionDatabaseInterceptor.java:115)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.processSelect(DataPermissionDatabaseInterceptor.java:103)\n at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.processParser(JsqlParserSupport.java:91)\n at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:50)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.beforeQuery(DataPermissionDatabaseInterceptor.java:69)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:78)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy154.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n ... 192 more\n', 'org.mybatis.spring.MyBatisExceptionTranslator', 'MyBatisExceptionTranslator.java', 'translateExceptionIfPossible', 96, 0, NULL, 0, NULL, '2022-02-27 11:47:43', NULL, '2022-02-27 11:47:43', b'0', 1); INSERT INTO `infra_api_error_log` VALUES (289, '', 104, 2, 'yudao-admin-server', 'GET', '/admin-api/system/user/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', '2022-02-27 11:47:43', 'org.mybatis.spring.MyBatisSystemException', 'MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: \n### Error querying database. Cause: java.lang.NullPointerException\n### Cause: java.lang.NullPointerException', 'NullPointerException: null', 'org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: \n### Error querying database. Cause: java.lang.NullPointerException\n### Cause: java.lang.NullPointerException\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy131.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy189.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy189.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper.selectPage(AdminUserMapper.java:31)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy189.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl.getUserPage(AdminUserServiceImpl.java:172)\n at cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl$$FastClassBySpringCGLIB$$b9a860de.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl$$EnhancerBySpringCGLIB$$23e8d9cb.getUserPage()\n at cn.iocoder.yudao.module.system.controller.admin.user.UserController.getUserPage(UserController.java:94)\n at cn.iocoder.yudao.module.system.controller.admin.user.UserController$$FastClassBySpringCGLIB$$bc2558c0.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.system.controller.admin.user.UserController$$EnhancerBySpringCGLIB$$83b079e6.getUserPage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: org.apache.ibatis.exceptions.PersistenceException: \n### Error querying database. Cause: java.lang.NullPointerException\n### Cause: java.lang.NullPointerException\n at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor272.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 184 more\nCaused by: java.lang.NullPointerException\n at cn.iocoder.yudao.framework.datapermission.core.dept.rule.DeptDataPermissionRule.getExpression(DeptDataPermissionRule.java:116)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.buildDataPermissionExpression(DataPermissionDatabaseInterceptor.java:379)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.builderExpression(DataPermissionDatabaseInterceptor.java:341)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.processPlainSelect(DataPermissionDatabaseInterceptor.java:154)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.processSelectBody(DataPermissionDatabaseInterceptor.java:115)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.processSelect(DataPermissionDatabaseInterceptor.java:103)\n at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.processParser(JsqlParserSupport.java:91)\n at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:50)\n at cn.iocoder.yudao.framework.datapermission.core.db.DataPermissionDatabaseInterceptor.beforeQuery(DataPermissionDatabaseInterceptor.java:69)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:78)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy154.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n ... 190 more\n', 'org.mybatis.spring.MyBatisExceptionTranslator', 'MyBatisExceptionTranslator.java', 'translateExceptionIfPossible', 96, 0, NULL, 0, NULL, '2022-02-27 11:47:43', NULL, '2022-02-27 11:47:43', b'0', 1); INSERT INTO `infra_api_error_log` VALUES (290, '', 0, 0, 'yudao-admin-server', 'POST', '/admin-api/system/login', '{\"query\":{},\"body\":\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"admin123\\\",\\\"code\\\":\\\"oo6v3\\\",\\\"uuid\\\":\\\"981b710d1bc94ac4bc0cd41c3468d7d3\\\"}\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', '2022-02-27 16:25:59', 'com.baomidou.mybatisplus.core.exceptions.MybatisPlusException', 'MybatisPlusException: One record is expected, but the query result is multiple records', 'MybatisPlusException: One record is expected, but the query result is multiple records', 'com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: One record is expected, but the query result is multiple records\n at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:49)\n at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectOne(BaseMapper.java:177)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy154.selectOne(Unknown Source)\n at cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper.selectByUsername(AdminUserMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy154.selectByUsername(Unknown Source)\n at cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl.getUserByUsername(AdminUserServiceImpl.java:167)\n at cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl$$FastClassBySpringCGLIB$$b9a860de.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.system.service.user.AdminUserServiceImpl$$EnhancerBySpringCGLIB$$3e8ecaaa.getUserByUsername()\n at cn.iocoder.yudao.module.system.service.auth.AdminAuthServiceImpl.loadUserByUsername(AdminAuthServiceImpl.java:80)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.retrieveUser(MultiUserDetailsAuthenticationProvider.java:56)\n at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:133)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:182)\n at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:201)\n at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:518)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy148.authenticate(Unknown Source)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)\n at com.sun.proxy.$Proxy148.authenticate(Unknown Source)\n at cn.iocoder.yudao.module.system.service.auth.AdminAuthServiceImpl.login0(AdminAuthServiceImpl.java:145)\n at cn.iocoder.yudao.module.system.service.auth.AdminAuthServiceImpl.login(AdminAuthServiceImpl.java:107)\n at cn.iocoder.yudao.module.system.controller.admin.auth.AuthController.login(AuthController.java:60)\n at cn.iocoder.yudao.module.system.controller.admin.auth.AuthController$$FastClassBySpringCGLIB$$f866d2e0.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.system.controller.admin.auth.AuthController$$EnhancerBySpringCGLIB$$73274b63.login()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:681)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.activiti.core.web.ActivitiWebFilter.doFilterInternal(ActivitiWebFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.web.core.filter.CacheRequestBodyFilter.doFilterInternal(CacheRequestBodyFilter.java:22)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'com.baomidou.mybatisplus.core.toolkit.ExceptionUtils', 'ExceptionUtils.java', 'mpe', 49, 0, NULL, 0, NULL, '2022-02-27 16:25:59', NULL, '2022-02-27 16:25:59', b'0', 0); +INSERT INTO `infra_api_error_log` VALUES (291, '', 0, 0, 'yudao-admin-server', 'GET', '/system-api/demo/test/get', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2022-03-06 00:51:58', 'java.lang.IllegalArgumentException', 'IllegalArgumentException: URI(/system-api/demo/test/get) 找不到匹配的用户类型', 'IllegalArgumentException: URI(/system-api/demo/test/get) 找不到匹配的用户类型', 'java.lang.IllegalArgumentException: URI(/system-api/demo/test/get) 找不到匹配的用户类型\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.getUserType(MultiUserDetailsAuthenticationProvider.java:146)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.selectService(MultiUserDetailsAuthenticationProvider.java:131)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.verifyTokenAndRefresh(MultiUserDetailsAuthenticationProvider.java:105)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:43)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider', 'MultiUserDetailsAuthenticationProvider.java', 'getUserType', 146, 0, NULL, 0, NULL, '2022-03-06 00:51:58', NULL, '2022-03-06 00:51:58', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (292, '', 0, 0, 'yudao-admin-server', 'GET', '/system-api/demo/test/get', '{\"query\":{},\"body\":\"\"}', '127.0.0.1', 'PostmanRuntime/6.4.1', '2022-03-06 00:52:11', 'java.lang.IllegalArgumentException', 'IllegalArgumentException: URI(/system-api/demo/test/get) 找不到匹配的用户类型', 'IllegalArgumentException: URI(/system-api/demo/test/get) 找不到匹配的用户类型', 'java.lang.IllegalArgumentException: URI(/system-api/demo/test/get) 找不到匹配的用户类型\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.getUserType(MultiUserDetailsAuthenticationProvider.java:146)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.selectService(MultiUserDetailsAuthenticationProvider.java:131)\n at cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider.verifyTokenAndRefresh(MultiUserDetailsAuthenticationProvider.java:105)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:43)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\n', 'cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider', 'MultiUserDetailsAuthenticationProvider.java', 'getUserType', 146, 0, NULL, 0, NULL, '2022-03-06 00:52:11', NULL, '2022-03-06 00:52:11', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (293, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:28:51', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper.selectPage(CodegenTableMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.getCodegenTablePage(CodegenServiceImpl.java:229)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$9a105fba.getCodegenTablePage()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.getCodeGenTablePage(CodegenController.java:72)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$7d976243.getCodeGenTablePage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 183 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:28:51', NULL, '2022-03-11 00:28:51', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (294, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/test-demo/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:31:37', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM infra_test_demo WHERE deleted = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist', 'MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM infra_test_demo WHERE deleted = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper.selectPage(TestDemoMapper.java:22)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl.getTestDemoPage(TestDemoServiceImpl.java:77)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl$$FastClassBySpringCGLIB$$87e06bb3.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl$$EnhancerBySpringCGLIB$$bb38d6a8.getTestDemoPage()\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController.getTestDemoPage(TestDemoController.java:81)\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController$$FastClassBySpringCGLIB$$a44aec12.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController$$EnhancerBySpringCGLIB$$285fe62e.getTestDemoPage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 189 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:31:37', NULL, '2022-03-11 00:31:37', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (295, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:31:38', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper.selectPage(CodegenTableMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.getCodegenTablePage(CodegenServiceImpl.java:229)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$9a105fba.getCodegenTablePage()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.getCodeGenTablePage(CodegenController.java:72)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$7d976243.getCodeGenTablePage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 183 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:31:38', NULL, '2022-03-11 00:31:38', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (296, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/test-demo/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:31:39', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM infra_test_demo WHERE deleted = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist', 'MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM infra_test_demo WHERE deleted = 0\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper.selectPage(TestDemoMapper.java:22)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy257.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl.getTestDemoPage(TestDemoServiceImpl.java:77)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl$$FastClassBySpringCGLIB$$87e06bb3.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.service.test.TestDemoServiceImpl$$EnhancerBySpringCGLIB$$bb38d6a8.getTestDemoPage()\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController.getTestDemoPage(TestDemoController.java:81)\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController$$FastClassBySpringCGLIB$$a44aec12.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.controller.admin.test.TestDemoController$$EnhancerBySpringCGLIB$$285fe62e.getTestDemoPage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.infra_test_demo\' doesn\'t exist\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 189 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:31:39', NULL, '2022-03-11 00:31:39', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (297, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:31:41', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper.selectPage(CodegenTableMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.getCodegenTablePage(CodegenServiceImpl.java:229)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$9a105fba.getCodegenTablePage()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.getCodeGenTablePage(CodegenController.java:72)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.GeneratedMethodAccessor316.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$7d976243.getCodeGenTablePage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column \'tenant_id\' in \'where clause\'\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor198.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 183 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:31:41', NULL, '2022-03-11 00:31:41', b'0', 1); +INSERT INTO `infra_api_error_log` VALUES (298, '', 1, 2, 'yudao-admin-server', 'GET', '/admin-api/infra/codegen/table/page', '{\"query\":{\"pageNo\":\"1\",\"pageSize\":\"10\"},\"body\":\"\"}', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', '2022-03-11 00:35:08', 'org.springframework.jdbc.BadSqlGrammarException', 'BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist', 'MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist', 'org.springframework.jdbc.BadSqlGrammarException: \n### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n### The error may exist in cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java (best guess)\n### The error may involve defaultParameterMap\n### The error occurred while setting parameters\n### SQL: SELECT COUNT(*) AS total FROM tool_codegen_table WHERE deleted = 0 AND tenant_id = 1\n### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n; bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)\n at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)\n at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)\n at com.sun.proxy.$Proxy132.selectList(Unknown Source)\n at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForIPage(MybatisMapperMethod.java:121)\n at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:85)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX.selectPage(BaseMapperX.java:25)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.dal.mysql.codegen.CodegenTableMapper.selectPage(CodegenTableMapper.java:19)\n at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)\n at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)\n at com.sun.proxy.$Proxy248.selectPage(Unknown Source)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl.getCodegenTablePage(CodegenServiceImpl.java:229)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$FastClassBySpringCGLIB$$6152dfac.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\n at cn.iocoder.yudao.module.infra.service.codegen.CodegenServiceImpl$$EnhancerBySpringCGLIB$$8c6c6e0d.getCodegenTablePage()\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.getCodeGenTablePage(CodegenController.java:72)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$FastClassBySpringCGLIB$$8f5d07f9.invoke()\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around0(OperateLogAspect.java:96)\n at cn.iocoder.yudao.framework.operatelog.core.aop.OperateLogAspect.around(OperateLogAspect.java:77)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634)\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624)\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)\n at cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController$$EnhancerBySpringCGLIB$$eff51984.getCodeGenTablePage()\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at de.codecentric.boot.admin.server.ui.web.servlet.HomepageForwardingFilter.doFilter(HomepageForwardingFilter.java:78)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.flowable.core.web.FlowableWebFilter.doFilterInternal(FlowableWebFilter.java:29)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.security.TenantSecurityWebFilter.doFilterInternal(TenantSecurityWebFilter.java:98)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:121)\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:105)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter.doFilterInternal(JWTAuthenticationTokenFilter.java:60)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103)\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110)\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211)\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183)\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tenant.core.web.TenantContextWebFilter.doFilterInternal(TenantContextWebFilter.java:32)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:102)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at cn.iocoder.yudao.framework.tracer.core.filter.TraceFilter.doFilterInternal(TraceFilter.java:30)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359)\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889)\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735)\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n at java.lang.Thread.run(Thread.java:748)\nCaused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table \'ruoyi-vue-pro.tool_codegen_table\' doesn\'t exist\n at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\n at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\n at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\n at java.lang.reflect.Constructor.newInstance(Constructor.java:423)\n at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)\n at com.mysql.jdbc.Util.getInstance(Util.java:408)\n at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)\n at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)\n at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)\n at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)\n at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)\n at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)\n at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3461)\n at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)\n at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:3459)\n at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.execute(PreparedStatementProxyImpl.java:167)\n at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497)\n at sun.reflect.GeneratedMethodAccessor254.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)\n at com.sun.proxy.$Proxy158.execute(Unknown Source)\n at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)\n at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)\n at sun.reflect.GeneratedMethodAccessor253.invoke(Unknown Source)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:64)\n at com.sun.proxy.$Proxy156.query(Unknown Source)\n at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)\n at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)\n at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)\n at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)\n at com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor.willDoQuery(PaginationInnerInterceptor.java:141)\n at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)\n at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)\n at com.sun.proxy.$Proxy155.query(Unknown Source)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)\n at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke(Method.java:498)\n at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)\n ... 184 more\n', 'org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator', 'SQLErrorCodeSQLExceptionTranslator.java', 'doTranslate', 239, 0, NULL, 0, NULL, '2022-03-11 00:35:08', NULL, '2022-03-11 00:35:08', b'0', 1); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_codegen_column +-- ---------------------------- +DROP TABLE IF EXISTS `infra_codegen_column`; +CREATE TABLE `infra_codegen_column` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `table_id` bigint NOT NULL COMMENT '表编号', + `column_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段名', + `column_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段类型', + `column_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段描述', + `nullable` bit(1) NOT NULL COMMENT '是否允许为空', + `primary_key` bit(1) NOT NULL COMMENT '是否主键', + `auto_Increment` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '是否自增', + `ordinal_position` int NOT NULL COMMENT '排序', + `java_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性类型', + `java_field` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性名', + `dict_type` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '字典类型', + `example` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数据示例', + `create_operation` bit(1) NOT NULL COMMENT '是否为 Create 创建操作的字段', + `update_operation` bit(1) NOT NULL COMMENT '是否为 Update 更新操作的字段', + `list_operation` bit(1) NOT NULL COMMENT '是否为 List 查询操作的字段', + `list_operation_condition` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '=' COMMENT 'List 查询操作的条件类型', + `list_operation_result` bit(1) NOT NULL COMMENT '是否为 List 查询操作的返回字段', + `html_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '显示类型', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=684 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表字段定义'; + +-- ---------------------------- +-- Records of infra_codegen_column +-- ---------------------------- +BEGIN; +INSERT INTO `infra_codegen_column` VALUES (513, 43, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (514, 43, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (515, 43, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (516, 43, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (517, 43, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (518, 43, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (519, 43, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (520, 43, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (521, 43, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (522, 43, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (523, 43, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_column` VALUES (524, 44, 'id', 'bigint', '部门id', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (525, 44, 'name', 'varchar(30)', '部门名称', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (526, 44, 'parent_id', 'bigint', '父部门id', b'0', b'0', '0', 3, 'Long', 'parentId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (527, 44, 'sort', 'int', '显示顺序', b'0', b'0', '0', 4, 'Integer', 'sort', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (528, 44, 'leader_user_id', 'bigint', '负责人', b'1', b'0', '0', 5, 'Long', 'leaderUserId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (529, 44, 'phone', 'varchar(11)', '联系电话', b'1', b'0', '0', 6, 'String', 'phone', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (530, 44, 'email', 'varchar(50)', '邮箱', b'1', b'0', '0', 7, 'String', 'email', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (531, 44, 'status', 'tinyint', '部门状态(0正常 1停用)', b'0', b'0', '0', 8, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (532, 44, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (533, 44, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (534, 44, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (535, 44, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (536, 44, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (537, 44, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 14, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_column` VALUES (538, 45, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (539, 45, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (540, 45, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (541, 45, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (542, 45, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (543, 45, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (544, 45, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (545, 45, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (546, 45, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (547, 45, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (548, 45, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_column` VALUES (549, 46, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (550, 46, 'process_definition_id', 'varchar(64)', '流程定义的编号', b'0', b'0', '0', 2, 'String', 'processDefinitionId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (551, 46, 'model_id', 'varchar(64)', '流程模型的编号', b'0', b'0', '0', 3, 'String', 'modelId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (552, 46, 'description', 'varchar(255)', '描述', b'1', b'0', '0', 4, 'String', 'description', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (553, 46, 'form_type', 'tinyint', '表单类型', b'0', b'0', '0', 5, 'Integer', 'formType', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (554, 46, 'form_id', 'bigint', '表单编号', b'1', b'0', '0', 6, 'Long', 'formId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (555, 46, 'form_conf', 'varchar(1000)', '表单的配置', b'1', b'0', '0', 7, 'String', 'formConf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (556, 46, 'form_fields', 'varchar(5000)', '表单项的数组', b'1', b'0', '0', 8, 'String', 'formFields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (557, 46, 'form_custom_create_path', 'varchar(255)', '自定义表单的提交路径', b'1', b'0', '0', 9, 'String', 'formCustomCreatePath', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (558, 46, 'form_custom_view_path', 'varchar(255)', '自定义表单的查看路径', b'1', b'0', '0', 10, 'String', 'formCustomViewPath', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (559, 46, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 11, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (560, 46, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 12, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (561, 46, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 13, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (562, 46, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 14, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (563, 46, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 15, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_column` VALUES (564, 47, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 12:42:12', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (565, 47, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 12:42:12', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (566, 47, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 12:42:12', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (567, 47, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (568, 47, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (569, 47, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (570, 47, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (571, 47, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (572, 47, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (573, 47, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (574, 47, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_column` VALUES (575, 48, 'id', 'bigint', '自增编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (576, 48, 'user_id', 'bigint', '用户ID', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (577, 48, 'role_id', 'bigint', '角色ID', b'0', b'0', '0', 3, 'Long', 'roleId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (578, 48, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 4, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (579, 48, 'create_time', 'datetime', '创建时间', b'1', b'0', '0', 5, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (580, 48, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 6, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (581, 48, 'update_time', 'datetime', '更新时间', b'1', b'0', '0', 7, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (582, 48, 'deleted', 'bit(1)', '是否删除', b'1', b'0', '0', 8, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (583, 48, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 9, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_column` VALUES (584, 49, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (585, 49, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (586, 49, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (587, 49, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (588, 49, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (589, 49, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (590, 49, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (591, 49, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (592, 49, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (593, 49, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (594, 49, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_column` VALUES (595, 50, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (596, 50, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (597, 50, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (598, 50, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (599, 50, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (600, 50, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (601, 50, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (602, 50, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (603, 50, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (604, 50, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (605, 50, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_column` VALUES (606, 51, 'id', 'bigint', '请假表单主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (607, 51, 'user_id', 'bigint', '申请人的用户编号', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (608, 51, 'type', 'tinyint', '请假类型', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (609, 51, 'reason', 'varchar(200)', '请假原因', b'0', b'0', '0', 4, 'String', 'reason', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (610, 51, 'start_time', 'datetime', '开始时间', b'0', b'0', '0', 5, 'Date', 'startTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (611, 51, 'end_time', 'datetime', '结束时间', b'0', b'0', '0', 6, 'Date', 'endTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (612, 51, 'day', 'tinyint', '请假天数', b'0', b'0', '0', 7, 'Integer', 'day', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (613, 51, 'result', 'tinyint', '请假结果', b'0', b'0', '0', 8, 'Integer', 'result', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (614, 51, 'process_instance_id', 'varchar(64)', '流程实例的编号', b'1', b'0', '0', 9, 'String', 'processInstanceId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (615, 51, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 10, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (616, 51, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 11, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (617, 51, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 12, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (618, 51, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 13, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (619, 51, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 14, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_column` VALUES (620, 52, 'id', 'bigint', '支付订单编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (621, 52, 'merchant_id', 'bigint', '商户编号', b'0', b'0', '0', 2, 'Long', 'merchantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (622, 52, 'app_id', 'bigint', '应用编号', b'0', b'0', '0', 3, 'Long', 'appId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (623, 52, 'channel_id', 'bigint', '渠道编号', b'1', b'0', '0', 4, 'Long', 'channelId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (624, 52, 'channel_code', 'varchar(32)', '渠道编码', b'1', b'0', '0', 5, 'String', 'channelCode', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (625, 52, 'merchant_order_id', 'varchar(64)', '商户订单编号', b'0', b'0', '0', 6, 'String', 'merchantOrderId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (626, 52, 'subject', 'varchar(32)', '商品标题', b'0', b'0', '0', 7, 'String', 'subject', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (627, 52, 'body', 'varchar(128)', '商品描述', b'0', b'0', '0', 8, 'String', 'body', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (628, 52, 'notify_url', 'varchar(1024)', '异步通知地址', b'0', b'0', '0', 9, 'String', 'notifyUrl', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (629, 52, 'notify_status', 'tinyint', '通知商户支付结果的回调状态', b'0', b'0', '0', 10, 'Integer', 'notifyStatus', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (630, 52, 'amount', 'bigint', '支付金额,单位:分', b'0', b'0', '0', 11, 'Long', 'amount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (631, 52, 'channel_fee_rate', 'double', '渠道手续费,单位:百分比', b'1', b'0', '0', 12, 'Double', 'channelFeeRate', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (632, 52, 'channel_fee_amount', 'bigint', '渠道手续金额,单位:分', b'1', b'0', '0', 13, 'Long', 'channelFeeAmount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (633, 52, 'status', 'tinyint', '支付状态', b'0', b'0', '0', 14, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (634, 52, 'user_ip', 'varchar(50)', '用户 IP', b'0', b'0', '0', 15, 'String', 'userIp', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (635, 52, 'expire_time', 'datetime', '订单失效时间', b'0', b'0', '0', 16, 'Date', 'expireTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (636, 52, 'success_time', 'datetime', '订单支付成功时间', b'1', b'0', '0', 17, 'Date', 'successTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (637, 52, 'notify_time', 'datetime', '订单支付通知时间', b'1', b'0', '0', 18, 'Date', 'notifyTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (638, 52, 'success_extension_id', 'bigint', '支付成功的订单拓展单编号', b'1', b'0', '0', 19, 'Long', 'successExtensionId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (639, 52, 'refund_status', 'tinyint', '退款状态', b'0', b'0', '0', 20, 'Integer', 'refundStatus', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (640, 52, 'refund_times', 'tinyint', '退款次数', b'0', b'0', '0', 21, 'Integer', 'refundTimes', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (641, 52, 'refund_amount', 'bigint', '退款总金额,单位:分', b'0', b'0', '0', 22, 'Long', 'refundAmount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (642, 52, 'channel_user_id', 'varchar(255)', '渠道用户编号', b'1', b'0', '0', 23, 'String', 'channelUserId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (643, 52, 'channel_order_no', 'varchar(64)', '渠道订单号', b'1', b'0', '0', 24, 'String', 'channelOrderNo', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (644, 52, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 25, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (645, 52, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 26, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (646, 52, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 27, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (647, 52, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 28, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (648, 52, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 29, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_column` VALUES (649, 53, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (650, 53, 'name', 'varchar(100)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (651, 53, 'status', 'tinyint', '状态', b'0', b'0', '0', 3, 'Integer', 'status', 'user_type', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (652, 53, 'type', 'tinyint', '类型', b'0', b'0', '0', 4, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (653, 53, 'category', 'tinyint', '分类', b'0', b'0', '0', 5, 'Integer', 'category', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (654, 53, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (655, 53, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (656, 53, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (657, 53, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (658, 53, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (659, 53, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_column` VALUES (660, 54, 'id', 'bigint', '部门id', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (661, 54, 'name', 'varchar(30)', '部门名称', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (662, 54, 'parent_id', 'bigint', '父部门id', b'0', b'0', '0', 3, 'Long', 'parentId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (663, 54, 'sort', 'int', '显示顺序', b'0', b'0', '0', 4, 'Integer', 'sort', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (664, 54, 'leader_user_id', 'bigint', '负责人', b'1', b'0', '0', 5, 'Long', 'leaderUserId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (665, 54, 'phone', 'varchar(11)', '联系电话', b'1', b'0', '0', 6, 'String', 'phone', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (666, 54, 'email', 'varchar(50)', '邮箱', b'1', b'0', '0', 7, 'String', 'email', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (667, 54, 'status', 'tinyint', '部门状态(0正常 1停用)', b'0', b'0', '0', 8, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (668, 54, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'creator', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (669, 54, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (670, 54, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updater', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (671, 54, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (672, 54, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (673, 54, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 14, 'Long', 'tenantId', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_column` VALUES (674, 55, 'id', 'bigint', '套餐编号', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (675, 55, 'name', 'varchar(30)', '套餐名', b'0', b'0', '0', 2, 'String', 'name', '', 'VIP', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (676, 55, 'status', 'tinyint', '租户状态(0正常 1停用)', b'0', b'0', '0', 3, 'Integer', 'status', 'common_status', '1', b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (677, 55, 'remark', 'varchar(256)', '备注', b'1', b'0', '0', 4, 'String', 'remark', '', '好', b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (678, 55, 'menu_ids', 'varchar(2048)', '关联的菜单编号', b'0', b'0', '0', 5, 'String', 'menuIds', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (679, 55, 'creator', 'varchar(64)', '创建者', b'0', b'0', '0', 6, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (680, 55, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (681, 55, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (682, 55, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +INSERT INTO `infra_codegen_column` VALUES (683, 55, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); +COMMIT; + +-- ---------------------------- +-- Table structure for infra_codegen_table +-- ---------------------------- +DROP TABLE IF EXISTS `infra_codegen_table`; +CREATE TABLE `infra_codegen_table` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `import_type` tinyint NOT NULL DEFAULT '1' COMMENT '导入类型', + `scene` tinyint NOT NULL DEFAULT '1' COMMENT '生成场景', + `table_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表名称', + `table_comment` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表描述', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `module_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模块名', + `business_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务名', + `class_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '类名称', + `class_comment` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '类描述', + `author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作者', + `template_type` tinyint NOT NULL DEFAULT '1' COMMENT '模板类型', + `parent_menu_id` bigint DEFAULT NULL COMMENT '父菜单编号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表定义'; + +-- ---------------------------- +-- Records of infra_codegen_table +-- ---------------------------- +BEGIN; +INSERT INTO `infra_codegen_table` VALUES (43, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 03:46:00', b'1'); +INSERT INTO `infra_codegen_table` VALUES (44, 1, 1, 'system_dept', '部门表', NULL, 'system', 'dept', 'Dept', '部门', '芋艿', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-02 03:45:47', b'1'); +INSERT INTO `infra_codegen_table` VALUES (45, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 04:42:07', b'1'); +INSERT INTO `infra_codegen_table` VALUES (46, 1, 1, 'bpm_process_definition_ext', 'Bpm 流程定义的拓展表\n', NULL, 'bpm', 'processDefinitionExt', 'BpmProcessDefinitionExt', 'Bpm 流程定义的拓展', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 04:42:05', b'1'); +INSERT INTO `infra_codegen_table` VALUES (47, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 04:42:24', b'1'); +INSERT INTO `infra_codegen_table` VALUES (48, 1, 1, 'system_user_role', '用户和角色关联表', NULL, 'system', 'role', 'UserRole', '用户和角色关联', '芋艿', 1, NULL, '1', '2022-01-22 17:41:13', '1', '2022-02-02 05:01:42', b'1'); +INSERT INTO `infra_codegen_table` VALUES (49, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:01:44', b'1'); +INSERT INTO `infra_codegen_table` VALUES (50, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'Form', '工作流的', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:10:46', b'1'); +INSERT INTO `infra_codegen_table` VALUES (51, 1, 1, 'bpm_oa_leave', 'OA 请假申请表', NULL, 'bpm', 'oaLeave', 'BpmOaLeave', 'OA 请假申请', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:11:25', b'1'); +INSERT INTO `infra_codegen_table` VALUES (52, 1, 2, 'pay_order', '支付订单\n', NULL, 'pay', 'order', 'PayOrder', '支付订单\n', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-02 10:17:59', b'1'); +INSERT INTO `infra_codegen_table` VALUES (53, 1, 1, 'tool_test_demo', '字典类型表', NULL, 'tool', 'test', 'TestDemo', '字典类型', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:13', '1', '2022-03-11 00:37:54', b'0'); +INSERT INTO `infra_codegen_table` VALUES (54, 1, 1, 'system_dept', '部门表', NULL, 'system', 'dept', 'SystemDept', '部门', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-03 00:39:57', b'0'); +INSERT INTO `infra_codegen_table` VALUES (55, 1, 1, 'system_tenant_package', '租户套餐表', NULL, 'system', 'tenantPackage', 'TenantPackage', '租户套餐', '芋道源码', 1, 1224, '1', '2022-02-19 17:20:20', '1', '2022-02-20 01:43:36', b'0'); COMMIT; -- ---------------------------- @@ -1244,16 +1512,16 @@ COMMIT; DROP TABLE IF EXISTS `infra_config`; CREATE TABLE `infra_config` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键', - `group` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数分组', + `group` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '参数分组', `type` tinyint NOT NULL COMMENT '参数类型', - `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数名称', - `key` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键名', - `value` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键值', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数名称', + `key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键名', + `value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '参数键值', `sensitive` bit(1) NOT NULL COMMENT '是否敏感', - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE @@ -1276,12 +1544,12 @@ COMMIT; -- ---------------------------- DROP TABLE IF EXISTS `infra_file`; CREATE TABLE `infra_file` ( - `id` varchar(188) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', - `type` varchar(63) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件类型', + `id` varchar(188) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件路径', + `type` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件类型', `content` mediumblob NOT NULL COMMENT '文件内容', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE @@ -1300,17 +1568,17 @@ COMMIT; DROP TABLE IF EXISTS `infra_job`; CREATE TABLE `infra_job` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '任务编号', - `name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称', + `name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名称', `status` tinyint NOT NULL COMMENT '任务状态', - `handler_name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理器的名字', - `handler_param` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理器的参数', - `cron_expression` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'CRON 表达式', + `handler_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '处理器的名字', + `handler_param` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '处理器的参数', + `cron_expression` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'CRON 表达式', `retry_count` int NOT NULL DEFAULT '0' COMMENT '重试次数', `retry_interval` int NOT NULL DEFAULT '0' COMMENT '重试间隔', `monitor_timeout` int NOT NULL DEFAULT '0' COMMENT '监控超时时间', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE @@ -1362,6 +1630,33 @@ INSERT INTO `infra_job_log` VALUES (25277, 13, 'userSessionTimeoutJob', NULL, 1, COMMIT; -- ---------------------------- +-- Table structure for infra_test_demo +-- ---------------------------- +DROP TABLE IF EXISTS `infra_test_demo`; +CREATE TABLE `infra_test_demo` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', + `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态', + `type` tinyint NOT NULL COMMENT '类型', + `category` tinyint NOT NULL COMMENT '分类', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表'; + +-- ---------------------------- +-- Records of infra_test_demo +-- ---------------------------- +BEGIN; +INSERT INTO `infra_test_demo` VALUES (106, '老五1', 0, 1, 1, '牛逼哈2', '', '2021-02-06 13:25:00', '', '2021-02-06 14:00:37', b'1'); +INSERT INTO `infra_test_demo` VALUES (107, '哈哈哈哈', 1, 0, 1, 'biubiubui', '', '2021-02-06 14:00:54', '1', '2022-02-17 12:42:14', b'0'); +COMMIT; + +-- ---------------------------- -- Table structure for member_user -- ---------------------------- DROP TABLE IF EXISTS `member_user`; @@ -1401,13 +1696,13 @@ CREATE TABLE `pay_app` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '应用编号', `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '应用名', `status` tinyint NOT NULL COMMENT '开启状态', - `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `pay_notify_url` varchar(1024) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付结果的回调地址', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `pay_notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付结果的回调地址', `refund_notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退款结果的回调地址', `merchant_id` bigint NOT NULL COMMENT '商户编号', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1429,14 +1724,14 @@ CREATE TABLE `pay_channel` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商户编号', `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道编码', `status` tinyint NOT NULL COMMENT '开启状态', - `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `fee_rate` double NOT NULL DEFAULT '0' COMMENT '渠道费率,单位:百分比', `merchant_id` bigint NOT NULL COMMENT '商户编号', `app_id` bigint NOT NULL COMMENT '应用编号', `config` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付渠道配置', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1468,10 +1763,10 @@ CREATE TABLE `pay_merchant` ( `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户全称', `short_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户简称', `status` tinyint NOT NULL COMMENT '开启状态', - `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1493,11 +1788,11 @@ CREATE TABLE `pay_notify_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '日志编号', `task_id` bigint NOT NULL COMMENT '通知任务编号', `notify_times` tinyint NOT NULL COMMENT '第几次被通知', - `response` varchar(2048) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求参数', + `response` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '请求参数', `status` tinyint NOT NULL COMMENT '通知状态', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1527,9 +1822,9 @@ CREATE TABLE `pay_notify_task` ( `notify_times` tinyint NOT NULL COMMENT '当前通知次数', `max_notify_times` tinyint NOT NULL COMMENT '最大可通知次数', `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异步通知地址', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1568,7 +1863,7 @@ CREATE TABLE `pay_order` ( `app_id` bigint NOT NULL COMMENT '应用编号', `channel_id` bigint DEFAULT NULL COMMENT '渠道编号', `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道编码', - `merchant_order_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户订单编号', + `merchant_order_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户订单编号', `subject` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品标题', `body` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品描述', `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异步通知地址', @@ -1586,10 +1881,10 @@ CREATE TABLE `pay_order` ( `refund_times` tinyint NOT NULL COMMENT '退款次数', `refund_amount` bigint NOT NULL COMMENT '退款总金额,单位:分', `channel_user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道用户编号', - `channel_order_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道订单号', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `channel_order_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道订单号', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1723,7 +2018,7 @@ COMMIT; DROP TABLE IF EXISTS `pay_order_extension`; CREATE TABLE `pay_order_extension` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '支付订单编号', - `no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付订单号', + `no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付订单号', `order_id` bigint NOT NULL COMMENT '支付订单编号', `channel_id` bigint NOT NULL COMMENT '渠道编号', `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道编码', @@ -1731,9 +2026,9 @@ CREATE TABLE `pay_order_extension` ( `status` tinyint NOT NULL COMMENT '支付状态', `channel_extras` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付渠道的额外参数', `channel_notify_data` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付渠道异步通知的内容', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1850,28 +2145,28 @@ CREATE TABLE `pay_refund` ( `channel_id` bigint NOT NULL COMMENT '渠道编号', `channel_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道编码', `order_id` bigint NOT NULL COMMENT '支付订单编号 pay_order 表id', - `trade_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交易订单号 pay_extension 表no 字段', - `merchant_order_id` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户订单编号(商户系统生成)', - `merchant_refund_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户退款订单号(商户系统生成)', + `trade_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '交易订单号 pay_extension 表no 字段', + `merchant_order_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户订单编号(商户系统生成)', + `merchant_refund_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户退款订单号(商户系统生成)', `notify_url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '异步通知商户地址', `notify_status` tinyint NOT NULL COMMENT '通知商户退款结果的回调状态', `status` tinyint NOT NULL COMMENT '退款状态', `type` tinyint NOT NULL COMMENT '退款类型(部分退款,全部退款)', `pay_amount` bigint NOT NULL COMMENT '支付金额,单位分', `refund_amount` bigint NOT NULL COMMENT '退款金额,单位分', - `reason` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退款原因', + `reason` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '退款原因', `user_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户 IP', - `channel_order_no` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道订单号,pay_order 中的channel_order_no 对应', - `channel_refund_no` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道退款单号,渠道返回', - `channel_error_code` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道调用报错时,错误码', - `channel_error_msg` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道调用报错时,错误信息', + `channel_order_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道订单号,pay_order 中的channel_order_no 对应', + `channel_refund_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道退款单号,渠道返回', + `channel_error_code` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道调用报错时,错误码', + `channel_error_msg` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '渠道调用报错时,错误信息', `channel_extras` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付渠道的额外参数', `expire_time` datetime DEFAULT NULL COMMENT '退款失效时间', `success_time` datetime DEFAULT NULL COMMENT '退款成功时间', `notify_time` datetime DEFAULT NULL COMMENT '退款通知时间', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -1904,7 +2199,7 @@ CREATE TABLE `system_dept` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表'; +) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表'; -- ---------------------------- -- Records of system_dept @@ -1921,6 +2216,7 @@ INSERT INTO `system_dept` VALUES (107, '运维部门', 101, 5, NULL, '1588888888 INSERT INTO `system_dept` VALUES (108, '市场部门', 102, 1, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '1', '2022-02-16 08:35:45', b'0', 1); INSERT INTO `system_dept` VALUES (109, '财务部门', 102, 2, NULL, '15888888888', 'ry@qq.com', 0, 'admin', '2021-01-05 17:03:47', '', '2021-12-15 05:01:29', b'0', 1); INSERT INTO `system_dept` VALUES (110, '新部门', 0, 1, NULL, NULL, NULL, 0, '110', '2022-02-23 20:46:30', '110', '2022-02-23 20:46:30', b'0', 121); +INSERT INTO `system_dept` VALUES (111, '顶级部门', 0, 1, NULL, NULL, NULL, 0, '113', '2022-03-07 21:44:50', '113', '2022-03-07 21:44:50', b'0', 122); COMMIT; -- ---------------------------- @@ -1987,9 +2283,9 @@ INSERT INTO `system_dict_data` VALUES (46, 1, '否', 'false', 'infra_boolean_str INSERT INTO `system_dict_data` VALUES (47, 1, '永不超时', '1', 'infra_redis_timeout_type', 0, 'primary', '', 'Redis 未设置超时的情况', '', '2021-01-26 00:53:17', '1', '2022-02-16 19:03:35', b'0'); INSERT INTO `system_dict_data` VALUES (48, 1, '动态超时', '2', 'infra_redis_timeout_type', 0, 'info', '', '程序里动态传入超时时间,无法固定', '', '2021-01-26 00:55:00', '1', '2022-02-16 19:03:41', b'0'); INSERT INTO `system_dict_data` VALUES (49, 3, '固定超时', '3', 'infra_redis_timeout_type', 0, 'success', '', 'Redis 设置了过期时间', '', '2021-01-26 00:55:26', '1', '2022-02-16 19:03:45', b'0'); -INSERT INTO `system_dict_data` VALUES (50, 1, '单表(增删改查)', '1', 'tool_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:09:06', '', '2021-02-05 07:21:52', b'0'); -INSERT INTO `system_dict_data` VALUES (51, 2, '树表(增删改查)', '2', 'tool_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:14:46', '', '2021-02-05 07:21:49', b'0'); -INSERT INTO `system_dict_data` VALUES (52, 3, '主子表(增删改查)', '3', 'tool_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:21:45', '', '2021-02-06 18:54:26', b'1'); +INSERT INTO `system_dict_data` VALUES (50, 1, '单表(增删改查)', '1', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:09:06', '', '2022-03-10 16:33:15', b'0'); +INSERT INTO `system_dict_data` VALUES (51, 2, '树表(增删改查)', '2', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:14:46', '', '2022-03-10 16:33:19', b'0'); +INSERT INTO `system_dict_data` VALUES (52, 3, '主子表(增删改查)', '3', 'infra_codegen_template_type', 0, '', '', NULL, '', '2021-02-05 07:21:45', '', '2022-03-10 16:33:09', b'1'); INSERT INTO `system_dict_data` VALUES (53, 0, '初始化中', '0', 'infra_job_status', 0, 'primary', '', NULL, '', '2021-02-07 07:46:49', '1', '2022-02-16 19:33:29', b'0'); INSERT INTO `system_dict_data` VALUES (57, 0, '运行中', '0', 'infra_job_log_status', 0, 'primary', '', 'RUNNING', '', '2021-02-08 10:04:24', '1', '2022-02-16 19:07:48', b'0'); INSERT INTO `system_dict_data` VALUES (58, 1, '成功', '1', 'infra_job_log_status', 0, 'success', '', NULL, '', '2021-02-08 10:06:57', '1', '2022-02-16 19:07:52', b'0'); @@ -2074,8 +2370,8 @@ INSERT INTO `system_dict_data` VALUES (1141, 22, '岗位', '22', 'bpm_task_assig INSERT INTO `system_dict_data` VALUES (1142, 10, '流程发起人', '10', 'bpm_task_assign_script', 0, '', '', '任务分配自定义脚本 - 流程发起人', '103', '2022-01-15 00:10:57', '103', '2022-01-15 21:24:10', b'0'); INSERT INTO `system_dict_data` VALUES (1143, 20, '流程发起人的一级领导', '20', 'bpm_task_assign_script', 0, '', '', '任务分配自定义脚本 - 流程发起人的一级领导', '103', '2022-01-15 21:24:31', '103', '2022-01-15 21:24:31', b'0'); INSERT INTO `system_dict_data` VALUES (1144, 21, '流程发起人的二级领导', '21', 'bpm_task_assign_script', 0, '', '', '任务分配自定义脚本 - 流程发起人的二级领导', '103', '2022-01-15 21:24:46', '103', '2022-01-15 21:24:57', b'0'); -INSERT INTO `system_dict_data` VALUES (1145, 1, '管理后台', '1', 'tool_codegen_scene', 0, '', '', '代码生成的场景枚举 - 管理后台', '1', '2022-02-02 13:15:06', '1', '2022-02-02 13:23:34', b'0'); -INSERT INTO `system_dict_data` VALUES (1146, 2, '用户 APP', '2', 'tool_codegen_scene', 0, '', '', '代码生成的场景枚举 - 用户 APP', '1', '2022-02-02 13:15:19', '1', '2022-02-02 13:15:19', b'0'); +INSERT INTO `system_dict_data` VALUES (1145, 1, '管理后台', '1', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 管理后台', '1', '2022-02-02 13:15:06', '1', '2022-03-10 16:32:59', b'0'); +INSERT INTO `system_dict_data` VALUES (1146, 2, '用户 APP', '2', 'infra_codegen_scene', 0, '', '', '代码生成的场景枚举 - 用户 APP', '1', '2022-02-02 13:15:19', '1', '2022-03-10 16:33:03', b'0'); INSERT INTO `system_dict_data` VALUES (1147, 0, '未退款', '0', 'pay_refund_order_type', 0, 'info', '', '退款类型 - 未退款', '1', '2022-02-16 14:09:01', '1', '2022-02-16 14:09:01', b'0'); INSERT INTO `system_dict_data` VALUES (1148, 10, '部分退款', '10', 'pay_refund_order_type', 0, 'success', '', '退款类型 - 部分退款', '1', '2022-02-16 14:09:25', '1', '2022-02-16 14:11:38', b'0'); INSERT INTO `system_dict_data` VALUES (1149, 20, '全部退款', '20', 'pay_refund_order_type', 0, 'warning', '', '退款类型 - 全部退款', '1', '2022-02-16 14:11:33', '1', '2022-02-16 14:11:33', b'0'); @@ -2112,7 +2408,7 @@ INSERT INTO `system_dict_type` VALUES (10, '系统状态', 'common_status', 0, N INSERT INTO `system_dict_type` VALUES (11, 'Boolean 是否类型', 'infra_boolean_string', 0, 'boolean 转是否', '', '2021-01-19 03:20:08', '', '2022-02-01 16:37:10', b'0'); INSERT INTO `system_dict_type` VALUES (104, '登陆结果', 'system_login_result', 0, '登陆结果', '', '2021-01-18 06:17:11', '', '2022-02-01 16:36:00', b'0'); INSERT INTO `system_dict_type` VALUES (105, 'Redis 超时类型', 'infra_redis_timeout_type', 0, 'RedisKeyDefine.TimeoutTypeEnum', '', '2021-01-26 00:52:50', '', '2022-02-01 16:50:29', b'0'); -INSERT INTO `system_dict_type` VALUES (106, '代码生成模板类型', 'tool_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '', '2021-02-05 07:08:06', b'0'); +INSERT INTO `system_dict_type` VALUES (106, '代码生成模板类型', 'infra_codegen_template_type', 0, NULL, '', '2021-02-05 07:08:06', '', '2022-03-10 16:33:42', b'0'); INSERT INTO `system_dict_type` VALUES (107, '定时任务状态', 'infra_job_status', 0, NULL, '', '2021-02-07 07:44:16', '', '2022-02-01 16:51:11', b'0'); INSERT INTO `system_dict_type` VALUES (108, '定时任务日志状态', 'infra_job_log_status', 0, NULL, '', '2021-02-08 10:03:51', '', '2022-02-01 16:50:43', b'0'); INSERT INTO `system_dict_type` VALUES (109, '用户类型', 'user_type', 0, NULL, '', '2021-02-26 00:15:51', '', '2021-02-26 00:15:51', b'0'); @@ -2140,7 +2436,7 @@ INSERT INTO `system_dict_type` VALUES (140, '流程实例的结果', 'bpm_proces INSERT INTO `system_dict_type` VALUES (141, '流程的表单类型', 'bpm_model_form_type', 0, '流程的表单类型', '103', '2022-01-11 23:50:45', '103', '2022-01-11 23:50:45', b'0'); INSERT INTO `system_dict_type` VALUES (142, '任务分配规则的类型', 'bpm_task_assign_rule_type', 0, '任务分配规则的类型', '103', '2022-01-12 23:21:04', '103', '2022-01-12 15:46:10', b'0'); INSERT INTO `system_dict_type` VALUES (143, '任务分配自定义脚本', 'bpm_task_assign_script', 0, '任务分配自定义脚本', '103', '2022-01-15 00:10:35', '103', '2022-01-15 00:10:35', b'0'); -INSERT INTO `system_dict_type` VALUES (144, '代码生成的场景枚举', 'tool_codegen_scene', 0, '代码生成的场景枚举', '1', '2022-02-02 13:14:45', '1', '2022-02-02 13:14:45', b'0'); +INSERT INTO `system_dict_type` VALUES (144, '代码生成的场景枚举', 'infra_codegen_scene', 0, '代码生成的场景枚举', '1', '2022-02-02 13:14:45', '1', '2022-03-10 16:33:46', b'0'); INSERT INTO `system_dict_type` VALUES (145, '角色类型', 'system_role_type', 0, '角色类型', '1', '2022-02-16 13:01:46', '1', '2022-02-16 13:01:46', b'0'); COMMIT; @@ -2161,178 +2457,178 @@ CREATE TABLE `system_error_code` ( `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=5278 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='错误码表'; +) ENGINE=InnoDB AUTO_INCREMENT=5444 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='错误码表'; -- ---------------------------- -- Records of system_error_code -- ---------------------------- BEGIN; -INSERT INTO `system_error_code` VALUES (5112, 1, 'yudao-admin-server', 1009000002, '获取高亮流程图异常', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5113, 1, 'yudao-admin-server', 1009001001, '请假申请不存在', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5114, 1, 'yudao-admin-server', 1009001002, '项目经理岗位未设置', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5115, 1, 'yudao-admin-server', 1009001009, '部门的项目经理不存在', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5116, 1, 'yudao-admin-server', 1009001004, '部门经理岗位未设置', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5117, 1, 'yudao-admin-server', 1009001005, '部门的部门经理不存在', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5118, 1, 'yudao-admin-server', 1009001006, 'HR岗位未设置', '', NULL, '2022-02-27 10:50:36', NULL, '2022-02-27 10:50:36', b'0'); -INSERT INTO `system_error_code` VALUES (5119, 1, 'yudao-admin-server', 1009001007, '请假天数必须>=1', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5120, 1, 'yudao-admin-server', 1009002000, '已经存在流程标识为【{}】的流程', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5121, 1, 'yudao-admin-server', 1009002001, '流程模型不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5122, 1, 'yudao-admin-server', 1009002002, '流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5123, 1, 'yudao-admin-server', 1009002003, '部署流程失败,原因:流程表单未配置,请点击【修改流程】按钮进行配置', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5124, 1, 'yudao-admin-server', 1009002004, '部署流程失败,原因:用户任务({})未配置分配规则,请点击【修改流程】按钮进行配置', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5125, 1, 'yudao-admin-server', 1009003005, '流程定义部署失败,原因:信息未发生变化', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5126, 1, 'yudao-admin-server', 1009003000, '流程定义的标识期望是({}),当前是({}),请修改 BPMN 流程图', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5127, 1, 'yudao-admin-server', 1009003001, '流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5128, 1, 'yudao-admin-server', 1009003002, '流程定义不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5129, 1, 'yudao-admin-server', 1009003003, '流程定义处于挂起状态', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5130, 1, 'yudao-admin-server', 1009003004, '流程定义的模型不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5131, 1, 'yudao-admin-server', 1009004000, '流程实例不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5132, 1, 'yudao-admin-server', 1009004001, '流程取消失败,流程不处于运行中', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5133, 1, 'yudao-admin-server', 1009004002, '流程取消失败,该流程不是你发起的', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5134, 1, 'yudao-admin-server', 1009005000, '审批任务失败,原因:该任务不处于未审批', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5135, 1, 'yudao-admin-server', 1009005001, '审批任务失败,原因:该任务的审批人不是你', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5136, 1, 'yudao-admin-server', 1009006000, '流程({}) 的任务({}) 已经存在分配规则', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5137, 1, 'yudao-admin-server', 1009006001, '流程任务分配规则不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5138, 1, 'yudao-admin-server', 1009006002, '只有流程模型的任务分配规则,才允许被修改', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5139, 1, 'yudao-admin-server', 1009006003, '操作失败,原因:找不到任务的审批人!', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5140, 1, 'yudao-admin-server', 1009006004, '操作失败,原因:任务分配脚本({}) 不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5141, 1, 'yudao-admin-server', 1009010000, '动态表单不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5142, 1, 'yudao-admin-server', 1009010001, '表单项({}) 和 ({}) 使用了相同的字段名({})', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5143, 1, 'yudao-admin-server', 1009011000, '用户组不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5144, 1, 'yudao-admin-server', 1009011001, '名字为【{}】的用户组已被禁用', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5145, 1, 'yudao-admin-server', 1001000001, '参数配置不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5146, 1, 'yudao-admin-server', 1001000002, '参数配置 key 重复', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5147, 1, 'yudao-admin-server', 1001000003, '不能删除类型为系统内置的参数配置', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5148, 1, 'yudao-admin-server', 1001000004, '不允许获取敏感配置到前端', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5149, 1, 'yudao-admin-server', 1001001000, '定时任务不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5150, 1, 'yudao-admin-server', 1001001001, '定时任务的处理器已经存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5151, 1, 'yudao-admin-server', 1001001002, '只允许修改为开启或者关闭状态', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5152, 1, 'yudao-admin-server', 1001001003, '定时任务已经处于该状态,无需修改', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5153, 1, 'yudao-admin-server', 1001001004, '只有开启状态的任务,才可以修改', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5154, 1, 'yudao-admin-server', 1001001005, 'CRON 表达式不正确', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5155, 1, 'yudao-admin-server', 1001002000, 'API 错误日志不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5156, 1, 'yudao-admin-server', 1001002001, 'API 错误日志已处理', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5157, 1, 'yudao-admin-server', 1001003000, '文件路径已存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5158, 1, 'yudao-admin-server', 1001003001, '文件不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5159, 1, 'yudao-admin-server', 1001003002, '文件为空', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5160, 1, 'yudao-admin-server', 1004001000, '用户不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5161, 1, 'yudao-admin-server', 1004001001, '密码校验失败', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5162, 1, 'yudao-admin-server', 1004003000, '登录失败,账号密码不正确', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5163, 1, 'yudao-admin-server', 1004003001, '登录失败,账号被禁用', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5164, 1, 'yudao-admin-server', 1004003002, '登录失败', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5165, 1, 'yudao-admin-server', 1004003004, 'Token 已经过期', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5166, 1, 'yudao-admin-server', 1004003005, '未绑定账号,需要进行绑定', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5167, 1, 'yudao-admin-server', 1007000000, 'App 不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5168, 1, 'yudao-admin-server', 1007000002, 'App 已经被禁用', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5169, 1, 'yudao-admin-server', 1007000003, '支付应用存在交易中的订单,无法删除', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5170, 1, 'yudao-admin-server', 1007001000, '支付渠道的配置不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5171, 1, 'yudao-admin-server', 1007001001, '支付渠道已经禁用', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5172, 1, 'yudao-admin-server', 1007001002, '支付渠道的客户端不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5173, 1, 'yudao-admin-server', 1007001003, '支付渠道不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5174, 1, 'yudao-admin-server', 1007001005, '已存在相同的渠道', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5175, 1, 'yudao-admin-server', 1007001006, '微信渠道v2版本中商户密钥不可为空', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5176, 1, 'yudao-admin-server', 1007001007, '微信渠道v3版本apiclient_key.pem不可为空', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5177, 1, 'yudao-admin-server', 1007001008, '微信渠道v3版本中apiclient_cert.pem不可为空', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5178, 1, 'yudao-admin-server', 1007001009, '渠道通知校验失败', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5179, 1, 'yudao-admin-server', 1007002000, '支付订单不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5180, 1, 'yudao-admin-server', 1007002001, '支付订单不处于待支付', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5181, 1, 'yudao-admin-server', 1007002002, '支付订单不处于已支付', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5182, 1, 'yudao-admin-server', 1007002003, '支付订单用户不正确', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5183, 1, 'yudao-admin-server', 1007003000, '支付交易拓展单不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5184, 1, 'yudao-admin-server', 1007003001, '支付交易拓展单不处于待支付', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5185, 1, 'yudao-admin-server', 1007003002, '支付订单不处于已支付', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5186, 1, 'yudao-admin-server', 1007006000, '退款金额超过订单可退款金额', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5187, 1, 'yudao-admin-server', 1007006001, '订单已经全额退款', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5188, 1, 'yudao-admin-server', 1007006002, '该订单的渠道订单为空', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5189, 1, 'yudao-admin-server', 1007006003, '已经退款成功', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5190, 1, 'yudao-admin-server', 1007006004, '支付退款单不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5191, 1, 'yudao-admin-server', 1007004000, '支付商户信息不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5192, 1, 'yudao-admin-server', 1007004001, '支付商户存在支付应用,无法删除', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5193, 1, 'yudao-admin-server', 1002000000, '登录失败,账号密码不正确', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5194, 1, 'yudao-admin-server', 1002000001, '登录失败,账号被禁用', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5195, 1, 'yudao-admin-server', 1002000002, '登录失败', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5196, 1, 'yudao-admin-server', 1002000003, '验证码不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5197, 1, 'yudao-admin-server', 1002000004, '验证码不正确', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5198, 1, 'yudao-admin-server', 1002000005, '未绑定账号,需要进行绑定', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5199, 1, 'yudao-admin-server', 1002000006, 'Token 已经过期', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5200, 1, 'yudao-admin-server', 1002001000, '已经存在该名字的菜单', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5201, 1, 'yudao-admin-server', 1002001001, '父菜单不存在', '', NULL, '2022-02-27 10:50:37', NULL, '2022-02-27 10:50:37', b'0'); -INSERT INTO `system_error_code` VALUES (5202, 1, 'yudao-admin-server', 1002001002, '不能设置自己为父菜单', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5203, 1, 'yudao-admin-server', 1002001003, '菜单不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5204, 1, 'yudao-admin-server', 1002001004, '存在子菜单,无法删除', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5205, 1, 'yudao-admin-server', 1002001005, '父菜单的类型必须是目录或者菜单', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5206, 1, 'yudao-admin-server', 1002002000, '角色不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5207, 1, 'yudao-admin-server', 1002002001, '已经存在名为【{}】的角色', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5208, 1, 'yudao-admin-server', 1002002002, '已经存在编码为【{}】的角色', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5209, 1, 'yudao-admin-server', 1002002003, '不能操作类型为系统内置的角色', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5210, 1, 'yudao-admin-server', 1002002004, '名字为【{}】的角色已被禁用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5211, 1, 'yudao-admin-server', 1002002005, '编码【{}】不能使用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5212, 1, 'yudao-admin-server', 1002003000, '用户账号已经存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5213, 1, 'yudao-admin-server', 1002003001, '手机号已经存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5214, 1, 'yudao-admin-server', 1002003002, '邮箱已经存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5215, 1, 'yudao-admin-server', 1002003003, '用户不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5216, 1, 'yudao-admin-server', 1002003004, '导入用户数据不能为空!', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5217, 1, 'yudao-admin-server', 1002003005, '用户密码校验失败', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5218, 1, 'yudao-admin-server', 1002003006, '名字为【{}】的用户已被禁用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5219, 1, 'yudao-admin-server', 1002003008, '创建用户失败,原因:超过租户最大租户配额({})!', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5220, 1, 'yudao-admin-server', 1002004000, '已经存在该名字的部门', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5221, 1, 'yudao-admin-server', 1002004001, '父级部门不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5222, 1, 'yudao-admin-server', 1002004002, '当前部门不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5223, 1, 'yudao-admin-server', 1002004003, '存在子部门,无法删除', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5224, 1, 'yudao-admin-server', 1002004004, '不能设置自己为父部门', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5225, 1, 'yudao-admin-server', 1002004005, '部门中存在员工,无法删除', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5226, 1, 'yudao-admin-server', 1002004006, '部门不处于开启状态,不允许选择', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5227, 1, 'yudao-admin-server', 1002004007, '不能设置自己的子部门为父部门', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5228, 1, 'yudao-admin-server', 1002005000, '当前岗位不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5229, 1, 'yudao-admin-server', 1002005001, '岗位({}) 不处于开启状态,不允许选择', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5230, 1, 'yudao-admin-server', 1002005002, '已经存在该名字的岗位', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5231, 1, 'yudao-admin-server', 1002005003, '已经存在该标识的岗位', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5232, 1, 'yudao-admin-server', 1002006001, '当前字典类型不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5233, 1, 'yudao-admin-server', 1002006002, '字典类型不处于开启状态,不允许选择', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5234, 1, 'yudao-admin-server', 1002006003, '已经存在该名字的字典类型', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5235, 1, 'yudao-admin-server', 1002006004, '已经存在该类型的字典类型', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5236, 1, 'yudao-admin-server', 1002006005, '无法删除,该字典类型还有字典数据', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5237, 1, 'yudao-admin-server', 1002007001, '当前字典数据不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5238, 1, 'yudao-admin-server', 1002007002, '字典数据({})不处于开启状态,不允许选择', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5239, 1, 'yudao-admin-server', 1002007003, '已经存在该值的字典数据', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5240, 1, 'yudao-admin-server', 1002008001, '当前通知公告不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5241, 1, 'yudao-admin-server', 1002011000, '短信渠道不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5242, 1, 'yudao-admin-server', 1002011001, '短信渠道不处于开启状态,不允许选择', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5243, 1, 'yudao-admin-server', 1002011002, '无法删除,该短信渠道还有短信模板', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5244, 1, 'yudao-admin-server', 1002012000, '短信模板不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5245, 1, 'yudao-admin-server', 1002012001, '已经存在编码为【{}】的短信模板', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5246, 1, 'yudao-admin-server', 1002013000, '手机号不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5247, 1, 'yudao-admin-server', 1002013001, '模板参数({})缺失', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5248, 1, 'yudao-admin-server', 1002013002, '短信模板不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5249, 1, 'yudao-admin-server', 1002014000, '验证码不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5250, 1, 'yudao-admin-server', 1002014001, '验证码已过期', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5251, 1, 'yudao-admin-server', 1002014002, '验证码已使用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5252, 1, 'yudao-admin-server', 1002014003, '验证码不正确', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5253, 1, 'yudao-admin-server', 1002014004, '超过每日短信发送数量', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5254, 1, 'yudao-admin-server', 1002014005, '短信发送过于频率', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5255, 1, 'yudao-admin-server', 1002014006, '手机号已被使用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5256, 1, 'yudao-admin-server', 1002014007, '验证码未被使用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5257, 1, 'yudao-admin-server', 1002015000, '租户不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5258, 1, 'yudao-admin-server', 1002015001, '名字为【{}】的租户已被禁用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5259, 1, 'yudao-admin-server', 1002015002, '名字为【{}】的租户已过期', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5260, 1, 'yudao-admin-server', 1002015003, '系统租户不能进行修改、删除等操作!', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5261, 1, 'yudao-admin-server', 1002016000, '租户套餐不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5262, 1, 'yudao-admin-server', 1002016001, '租户正在使用该套餐,请给租户重新设置套餐后再尝试删除', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5263, 1, 'yudao-admin-server', 1002016002, '名字为【{}】的租户套餐已被禁用', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5264, 1, 'yudao-admin-server', 1002017000, '错误码不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5265, 1, 'yudao-admin-server', 1002017001, '已经存在编码为【{}】的错误码', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5266, 1, 'yudao-admin-server', 1002018000, '社交授权失败,原因是:{}', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5267, 1, 'yudao-admin-server', 1002018001, '社交解绑失败,非当前用户绑定', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5268, 1, 'yudao-admin-server', 1002018002, '社交授权失败,找不到对应的用户', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5269, 1, 'yudao-admin-server', 1003000000, '测试示例不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5270, 1, 'yudao-admin-server', 1003001000, '表定义已经存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5271, 1, 'yudao-admin-server', 1003001001, '导入的表不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5272, 1, 'yudao-admin-server', 1003001002, '导入的字段不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5273, 1, 'yudao-admin-server', 1003001003, '解析 SQL 失败,请检查', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5274, 1, 'yudao-admin-server', 1003001004, '表定义不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5275, 1, 'yudao-admin-server', 1003001005, '字段义不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5276, 1, 'yudao-admin-server', 1003001006, '同步的字段不存在', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); -INSERT INTO `system_error_code` VALUES (5277, 1, 'yudao-admin-server', 1003001007, '同步失败,不存在改变', '', NULL, '2022-02-27 10:50:38', NULL, '2022-02-27 10:50:38', b'0'); +INSERT INTO `system_error_code` VALUES (5278, 1, 'yudao-admin-server', 1009000002, '获取高亮流程图异常', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5279, 1, 'yudao-admin-server', 1009001001, '请假申请不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5280, 1, 'yudao-admin-server', 1009001002, '项目经理岗位未设置', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5281, 1, 'yudao-admin-server', 1009001009, '部门的项目经理不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5282, 1, 'yudao-admin-server', 1009001004, '部门经理岗位未设置', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5283, 1, 'yudao-admin-server', 1009001005, '部门的部门经理不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5284, 1, 'yudao-admin-server', 1009001006, 'HR岗位未设置', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5285, 1, 'yudao-admin-server', 1009001007, '请假天数必须>=1', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5286, 1, 'yudao-admin-server', 1009002000, '已经存在流程标识为【{}】的流程', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5287, 1, 'yudao-admin-server', 1009002001, '流程模型不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5288, 1, 'yudao-admin-server', 1009002002, '流程标识格式不正确,需要以字母或下划线开头,后接任意字母、数字、中划线、下划线、句点!', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5289, 1, 'yudao-admin-server', 1009002003, '部署流程失败,原因:流程表单未配置,请点击【修改流程】按钮进行配置', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5290, 1, 'yudao-admin-server', 1009002004, '部署流程失败,原因:用户任务({})未配置分配规则,请点击【修改流程】按钮进行配置', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5291, 1, 'yudao-admin-server', 1009003005, '流程定义部署失败,原因:信息未发生变化', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5292, 1, 'yudao-admin-server', 1009003000, '流程定义的标识期望是({}),当前是({}),请修改 BPMN 流程图', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5293, 1, 'yudao-admin-server', 1009003001, '流程定义的名字期望是({}),当前是({}),请修改 BPMN 流程图', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5294, 1, 'yudao-admin-server', 1009003002, '流程定义不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5295, 1, 'yudao-admin-server', 1009003003, '流程定义处于挂起状态', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5296, 1, 'yudao-admin-server', 1009003004, '流程定义的模型不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5297, 1, 'yudao-admin-server', 1009004000, '流程实例不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5298, 1, 'yudao-admin-server', 1009004001, '流程取消失败,流程不处于运行中', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5299, 1, 'yudao-admin-server', 1009004002, '流程取消失败,该流程不是你发起的', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5300, 1, 'yudao-admin-server', 1009005000, '审批任务失败,原因:该任务不处于未审批', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5301, 1, 'yudao-admin-server', 1009005001, '审批任务失败,原因:该任务的审批人不是你', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5302, 1, 'yudao-admin-server', 1009006000, '流程({}) 的任务({}) 已经存在分配规则', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5303, 1, 'yudao-admin-server', 1009006001, '流程任务分配规则不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5304, 1, 'yudao-admin-server', 1009006002, '只有流程模型的任务分配规则,才允许被修改', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5305, 1, 'yudao-admin-server', 1009006003, '操作失败,原因:找不到任务的审批人!', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5306, 1, 'yudao-admin-server', 1009006004, '操作失败,原因:任务分配脚本({}) 不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5307, 1, 'yudao-admin-server', 1009010000, '动态表单不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5308, 1, 'yudao-admin-server', 1009010001, '表单项({}) 和 ({}) 使用了相同的字段名({})', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5309, 1, 'yudao-admin-server', 1009011000, '用户组不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5310, 1, 'yudao-admin-server', 1009011001, '名字为【{}】的用户组已被禁用', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5311, 1, 'yudao-admin-server', 1001000001, '参数配置不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5312, 1, 'yudao-admin-server', 1001000002, '参数配置 key 重复', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5313, 1, 'yudao-admin-server', 1001000003, '不能删除类型为系统内置的参数配置', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5314, 1, 'yudao-admin-server', 1001000004, '不允许获取敏感配置到前端', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5315, 1, 'yudao-admin-server', 1001001000, '定时任务不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5316, 1, 'yudao-admin-server', 1001001001, '定时任务的处理器已经存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5317, 1, 'yudao-admin-server', 1001001002, '只允许修改为开启或者关闭状态', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5318, 1, 'yudao-admin-server', 1001001003, '定时任务已经处于该状态,无需修改', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5319, 1, 'yudao-admin-server', 1001001004, '只有开启状态的任务,才可以修改', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5320, 1, 'yudao-admin-server', 1001001005, 'CRON 表达式不正确', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5321, 1, 'yudao-admin-server', 1001002000, 'API 错误日志不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5322, 1, 'yudao-admin-server', 1001002001, 'API 错误日志已处理', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5323, 1, 'yudao-admin-server', 1001003000, '文件路径已存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5324, 1, 'yudao-admin-server', 1001003001, '文件不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5325, 1, 'yudao-admin-server', 1001003002, '文件为空', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5326, 1, 'yudao-admin-server', 1003001000, '表定义已经存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5327, 1, 'yudao-admin-server', 1003001001, '导入的表不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5328, 1, 'yudao-admin-server', 1003001002, '导入的字段不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5329, 1, 'yudao-admin-server', 1003001003, '解析 SQL 失败,请检查', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5330, 1, 'yudao-admin-server', 1003001004, '表定义不存在', '', NULL, '2022-03-10 23:59:13', NULL, '2022-03-10 23:59:13', b'0'); +INSERT INTO `system_error_code` VALUES (5331, 1, 'yudao-admin-server', 1003001005, '字段义不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5332, 1, 'yudao-admin-server', 1003001006, '同步的字段不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5333, 1, 'yudao-admin-server', 1003001007, '同步失败,不存在改变', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5334, 1, 'yudao-admin-server', 1003000000, '测试示例不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5335, 1, 'yudao-admin-server', 1004001000, '用户不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5336, 1, 'yudao-admin-server', 1004001001, '密码校验失败', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5337, 1, 'yudao-admin-server', 1004003000, '登录失败,账号密码不正确', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5338, 1, 'yudao-admin-server', 1004003001, '登录失败,账号被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5339, 1, 'yudao-admin-server', 1004003002, '登录失败', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5340, 1, 'yudao-admin-server', 1004003004, 'Token 已经过期', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5341, 1, 'yudao-admin-server', 1004003005, '未绑定账号,需要进行绑定', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5342, 1, 'yudao-admin-server', 1007000000, 'App 不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5343, 1, 'yudao-admin-server', 1007000002, 'App 已经被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5344, 1, 'yudao-admin-server', 1007000003, '支付应用存在交易中的订单,无法删除', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5345, 1, 'yudao-admin-server', 1007001000, '支付渠道的配置不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5346, 1, 'yudao-admin-server', 1007001001, '支付渠道已经禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5347, 1, 'yudao-admin-server', 1007001002, '支付渠道的客户端不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5348, 1, 'yudao-admin-server', 1007001003, '支付渠道不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5349, 1, 'yudao-admin-server', 1007001005, '已存在相同的渠道', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5350, 1, 'yudao-admin-server', 1007001006, '微信渠道v2版本中商户密钥不可为空', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5351, 1, 'yudao-admin-server', 1007001007, '微信渠道v3版本apiclient_key.pem不可为空', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5352, 1, 'yudao-admin-server', 1007001008, '微信渠道v3版本中apiclient_cert.pem不可为空', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5353, 1, 'yudao-admin-server', 1007001009, '渠道通知校验失败', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5354, 1, 'yudao-admin-server', 1007002000, '支付订单不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5355, 1, 'yudao-admin-server', 1007002001, '支付订单不处于待支付', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5356, 1, 'yudao-admin-server', 1007002002, '支付订单不处于已支付', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5357, 1, 'yudao-admin-server', 1007002003, '支付订单用户不正确', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5358, 1, 'yudao-admin-server', 1007003000, '支付交易拓展单不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5359, 1, 'yudao-admin-server', 1007003001, '支付交易拓展单不处于待支付', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5360, 1, 'yudao-admin-server', 1007003002, '支付订单不处于已支付', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5361, 1, 'yudao-admin-server', 1007006000, '退款金额超过订单可退款金额', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5362, 1, 'yudao-admin-server', 1007006001, '订单已经全额退款', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5363, 1, 'yudao-admin-server', 1007006002, '该订单的渠道订单为空', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5364, 1, 'yudao-admin-server', 1007006003, '已经退款成功', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5365, 1, 'yudao-admin-server', 1007006004, '支付退款单不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5366, 1, 'yudao-admin-server', 1007004000, '支付商户信息不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5367, 1, 'yudao-admin-server', 1007004001, '支付商户存在支付应用,无法删除', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5368, 1, 'yudao-admin-server', 1002000000, '登录失败,账号密码不正确', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5369, 1, 'yudao-admin-server', 1002000001, '登录失败,账号被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5370, 1, 'yudao-admin-server', 1002000002, '登录失败', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5371, 1, 'yudao-admin-server', 1002000003, '验证码不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5372, 1, 'yudao-admin-server', 1002000004, '验证码不正确', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5373, 1, 'yudao-admin-server', 1002000005, '未绑定账号,需要进行绑定', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5374, 1, 'yudao-admin-server', 1002000006, 'Token 已经过期', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5375, 1, 'yudao-admin-server', 1002001000, '已经存在该名字的菜单', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5376, 1, 'yudao-admin-server', 1002001001, '父菜单不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5377, 1, 'yudao-admin-server', 1002001002, '不能设置自己为父菜单', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5378, 1, 'yudao-admin-server', 1002001003, '菜单不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5379, 1, 'yudao-admin-server', 1002001004, '存在子菜单,无法删除', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5380, 1, 'yudao-admin-server', 1002001005, '父菜单的类型必须是目录或者菜单', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5381, 1, 'yudao-admin-server', 1002002000, '角色不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5382, 1, 'yudao-admin-server', 1002002001, '已经存在名为【{}】的角色', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5383, 1, 'yudao-admin-server', 1002002002, '已经存在编码为【{}】的角色', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5384, 1, 'yudao-admin-server', 1002002003, '不能操作类型为系统内置的角色', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5385, 1, 'yudao-admin-server', 1002002004, '名字为【{}】的角色已被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5386, 1, 'yudao-admin-server', 1002002005, '编码【{}】不能使用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5387, 1, 'yudao-admin-server', 1002003000, '用户账号已经存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5388, 1, 'yudao-admin-server', 1002003001, '手机号已经存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5389, 1, 'yudao-admin-server', 1002003002, '邮箱已经存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5390, 1, 'yudao-admin-server', 1002003003, '用户不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5391, 1, 'yudao-admin-server', 1002003004, '导入用户数据不能为空!', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5392, 1, 'yudao-admin-server', 1002003005, '用户密码校验失败', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5393, 1, 'yudao-admin-server', 1002003006, '名字为【{}】的用户已被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5394, 1, 'yudao-admin-server', 1002003008, '创建用户失败,原因:超过租户最大租户配额({})!', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5395, 1, 'yudao-admin-server', 1002004000, '已经存在该名字的部门', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5396, 1, 'yudao-admin-server', 1002004001, '父级部门不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5397, 1, 'yudao-admin-server', 1002004002, '当前部门不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5398, 1, 'yudao-admin-server', 1002004003, '存在子部门,无法删除', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5399, 1, 'yudao-admin-server', 1002004004, '不能设置自己为父部门', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5400, 1, 'yudao-admin-server', 1002004005, '部门中存在员工,无法删除', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5401, 1, 'yudao-admin-server', 1002004006, '部门不处于开启状态,不允许选择', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5402, 1, 'yudao-admin-server', 1002004007, '不能设置自己的子部门为父部门', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5403, 1, 'yudao-admin-server', 1002005000, '当前岗位不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5404, 1, 'yudao-admin-server', 1002005001, '岗位({}) 不处于开启状态,不允许选择', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5405, 1, 'yudao-admin-server', 1002005002, '已经存在该名字的岗位', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5406, 1, 'yudao-admin-server', 1002005003, '已经存在该标识的岗位', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5407, 1, 'yudao-admin-server', 1002006001, '当前字典类型不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5408, 1, 'yudao-admin-server', 1002006002, '字典类型不处于开启状态,不允许选择', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5409, 1, 'yudao-admin-server', 1002006003, '已经存在该名字的字典类型', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5410, 1, 'yudao-admin-server', 1002006004, '已经存在该类型的字典类型', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5411, 1, 'yudao-admin-server', 1002006005, '无法删除,该字典类型还有字典数据', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5412, 1, 'yudao-admin-server', 1002007001, '当前字典数据不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5413, 1, 'yudao-admin-server', 1002007002, '字典数据({})不处于开启状态,不允许选择', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5414, 1, 'yudao-admin-server', 1002007003, '已经存在该值的字典数据', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5415, 1, 'yudao-admin-server', 1002008001, '当前通知公告不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5416, 1, 'yudao-admin-server', 1002011000, '短信渠道不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5417, 1, 'yudao-admin-server', 1002011001, '短信渠道不处于开启状态,不允许选择', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5418, 1, 'yudao-admin-server', 1002011002, '无法删除,该短信渠道还有短信模板', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5419, 1, 'yudao-admin-server', 1002012000, '短信模板不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5420, 1, 'yudao-admin-server', 1002012001, '已经存在编码为【{}】的短信模板', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5421, 1, 'yudao-admin-server', 1002013000, '手机号不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5422, 1, 'yudao-admin-server', 1002013001, '模板参数({})缺失', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5423, 1, 'yudao-admin-server', 1002013002, '短信模板不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5424, 1, 'yudao-admin-server', 1002014000, '验证码不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5425, 1, 'yudao-admin-server', 1002014001, '验证码已过期', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5426, 1, 'yudao-admin-server', 1002014002, '验证码已使用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5427, 1, 'yudao-admin-server', 1002014003, '验证码不正确', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5428, 1, 'yudao-admin-server', 1002014004, '超过每日短信发送数量', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5429, 1, 'yudao-admin-server', 1002014005, '短信发送过于频率', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5430, 1, 'yudao-admin-server', 1002014006, '手机号已被使用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5431, 1, 'yudao-admin-server', 1002014007, '验证码未被使用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5432, 1, 'yudao-admin-server', 1002015000, '租户不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5433, 1, 'yudao-admin-server', 1002015001, '名字为【{}】的租户已被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5434, 1, 'yudao-admin-server', 1002015002, '名字为【{}】的租户已过期', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5435, 1, 'yudao-admin-server', 1002015003, '系统租户不能进行修改、删除等操作!', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5436, 1, 'yudao-admin-server', 1002016000, '租户套餐不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5437, 1, 'yudao-admin-server', 1002016001, '租户正在使用该套餐,请给租户重新设置套餐后再尝试删除', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5438, 1, 'yudao-admin-server', 1002016002, '名字为【{}】的租户套餐已被禁用', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5439, 1, 'yudao-admin-server', 1002017000, '错误码不存在', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5440, 1, 'yudao-admin-server', 1002017001, '已经存在编码为【{}】的错误码', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5441, 1, 'yudao-admin-server', 1002018000, '社交授权失败,原因是:{}', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5442, 1, 'yudao-admin-server', 1002018001, '社交解绑失败,非当前用户绑定', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); +INSERT INTO `system_error_code` VALUES (5443, 1, 'yudao-admin-server', 1002018002, '社交授权失败,找不到对应的用户', '', NULL, '2022-03-10 23:59:14', NULL, '2022-03-10 23:59:14', b'0'); COMMIT; -- ---------------------------- @@ -2356,7 +2652,7 @@ CREATE TABLE `system_login_log` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; +) ENGINE=InnoDB AUTO_INCREMENT=1017 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; -- ---------------------------- -- Records of system_login_log @@ -2472,6 +2768,22 @@ INSERT INTO `system_login_log` VALUES (997, 100, '', 1, 2, 'admin', 0, '127.0.0. INSERT INTO `system_login_log` VALUES (998, 200, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 16:25:28', NULL, '2022-02-27 16:25:28', b'0', 0); INSERT INTO `system_login_log` VALUES (999, 100, '', 1, 2, 'admin', 31, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 16:27:01', NULL, '2022-02-27 16:27:01', b'0', 0); INSERT INTO `system_login_log` VALUES (1000, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 16:27:05', NULL, '2022-02-27 16:27:05', b'0', 0); +INSERT INTO `system_login_log` VALUES (1001, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'PostmanRuntime/6.4.1', NULL, '2022-03-06 00:52:28', NULL, '2022-03-06 00:52:28', b'0', 1); +INSERT INTO `system_login_log` VALUES (1002, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'PostmanRuntime/6.4.1', NULL, '2022-03-06 00:53:17', NULL, '2022-03-06 00:53:17', b'0', 1); +INSERT INTO `system_login_log` VALUES (1003, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-06 00:56:10', NULL, '2022-03-06 00:56:10', b'0', 1); +INSERT INTO `system_login_log` VALUES (1004, 102, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-06 01:01:55', NULL, '2022-03-06 01:01:55', b'0', 1); +INSERT INTO `system_login_log` VALUES (1005, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:08:36', NULL, '2022-03-07 21:08:36', b'0', 1); +INSERT INTO `system_login_log` VALUES (1006, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:36:53', NULL, '2022-03-07 21:36:53', b'0', 1); +INSERT INTO `system_login_log` VALUES (1007, 200, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:42:52', NULL, '2022-03-07 21:42:52', b'0', 1); +INSERT INTO `system_login_log` VALUES (1008, 100, '', 113, 2, 'aoteman', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:43:59', NULL, '2022-03-07 21:43:59', b'0', 122); +INSERT INTO `system_login_log` VALUES (1009, 200, '', 113, 2, 'aoteman', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:45:02', NULL, '2022-03-07 21:45:02', b'0', 122); +INSERT INTO `system_login_log` VALUES (1010, 100, '', 1, 2, 'admin', 10, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:46:46', NULL, '2022-03-07 21:46:46', b'0', 1); +INSERT INTO `system_login_log` VALUES (1011, 100, '', 1, 2, 'admin', 31, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:46:50', NULL, '2022-03-07 21:46:50', b'0', 1); +INSERT INTO `system_login_log` VALUES (1012, 100, '', 1, 2, 'admin', 31, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:46:52', NULL, '2022-03-07 21:46:52', b'0', 1); +INSERT INTO `system_login_log` VALUES (1013, 100, '', 1, 2, 'admin', 31, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:46:56', NULL, '2022-03-07 21:46:56', b'0', 1); +INSERT INTO `system_login_log` VALUES (1014, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:47:01', NULL, '2022-03-07 21:47:01', b'0', 1); +INSERT INTO `system_login_log` VALUES (1015, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:16:29', NULL, '2022-03-11 00:16:29', b'0', 1); +INSERT INTO `system_login_log` VALUES (1016, 100, '', 1, 2, 'admin', 0, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:24:08', NULL, '2022-03-11 00:24:08', b'0', 1); COMMIT; -- ---------------------------- @@ -2503,7 +2815,7 @@ CREATE TABLE `system_menu` ( BEGIN; INSERT INTO `system_menu` VALUES (1, '系统管理', '', 1, 10, 0, '/system', 'system', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:08', b'0'); INSERT INTO `system_menu` VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'monitor', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:18', b'0'); -INSERT INTO `system_menu` VALUES (3, '研发工具', '', 1, 30, 0, '/tool', 'tool', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2021-12-25 16:43:13', b'0'); +INSERT INTO `system_menu` VALUES (3, '研发工具', '', 1, 30, 0, '/tool', 'tool', NULL, 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-10 16:29:01', b'1'); INSERT INTO `system_menu` VALUES (4, '若依官网', '', 1, 4, 0, 'http://ruoyi.vip', 'guide', NULL, 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-20 21:54:28', b'1'); INSERT INTO `system_menu` VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'people', NULL, 0, 'admin', '2021-09-20 16:26:19', '1', '2022-01-22 18:32:50', b'0'); INSERT INTO `system_menu` VALUES (100, '用户管理', 'system:user:list', 2, 1, 1, 'user', 'user', 'system/user/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); @@ -2512,17 +2824,17 @@ INSERT INTO `system_menu` VALUES (102, '菜单管理', '', 2, 3, 1, 'menu', 'tre INSERT INTO `system_menu` VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'tree', 'system/dept/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:25:19', b'0'); INSERT INTO `system_menu` VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'post', 'system/post/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 20:38:23', b'0'); INSERT INTO `system_menu` VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'dict', 'system/dict/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:16:58', b'0'); -INSERT INTO `system_menu` VALUES (106, '配置管理', '', 2, 1, 2, 'config', 'edit', 'infra/config/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:12:10', b'0'); +INSERT INTO `system_menu` VALUES (106, '配置管理', '', 2, 6, 2, 'config', 'edit', 'infra/config/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:30:22', b'0'); INSERT INTO `system_menu` VALUES (107, '通知公告', '', 2, 8, 1, 'notice', 'message', 'system/notice/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:51:39', b'0'); INSERT INTO `system_menu` VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'log', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-04-26 22:34:58', b'0'); INSERT INTO `system_menu` VALUES (109, '在线用户', 'system:user-session:list', 2, 10, 1, 'user-session', 'online', 'system/session/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-26 08:21:20', b'0'); -INSERT INTO `system_menu` VALUES (110, '定时任务', '', 2, 2, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-10 01:25:51', b'0'); -INSERT INTO `system_menu` VALUES (111, 'MySQL 监控', '', 2, 4, 2, 'druid', 'druid', 'infra/druid/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:32', b'0'); -INSERT INTO `system_menu` VALUES (112, 'Java 监控', '', 2, 6, 2, 'admin-server', 'server', 'infra/server', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:41', b'0'); -INSERT INTO `system_menu` VALUES (113, 'Redis 监控', '', 2, 5, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-26 02:18:37', b'0'); -INSERT INTO `system_menu` VALUES (114, '表单构建', 'tool:build:list', 2, 1, 3, 'build', 'build', 'tool/build/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); -INSERT INTO `system_menu` VALUES (115, '代码生成', 'tool:codegen:query', 2, 0, 3, 'codegen', 'code', 'tool/codegen/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-03-06 03:43:14', b'0'); -INSERT INTO `system_menu` VALUES (116, '系统接口', 'tool:swagger:list', 2, 3, 3, 'swagger', 'swagger', 'tool/swagger/index', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:45', b'0'); +INSERT INTO `system_menu` VALUES (110, '定时任务', '', 2, 12, 2, 'job', 'job', 'infra/job/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:31:08', b'0'); +INSERT INTO `system_menu` VALUES (111, 'MySQL 监控', '', 2, 9, 2, 'druid', 'druid', 'infra/druid/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:30:47', b'0'); +INSERT INTO `system_menu` VALUES (112, 'Java 监控', '', 2, 11, 2, 'admin-server', 'server', 'infra/server', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:31:01', b'0'); +INSERT INTO `system_menu` VALUES (113, 'Redis 监控', '', 2, 10, 2, 'redis', 'redis', 'infra/redis/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:30:52', b'0'); +INSERT INTO `system_menu` VALUES (114, '表单构建', 'infra:build:list', 2, 2, 2, 'build', 'build', 'infra/build/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:29:59', b'0'); +INSERT INTO `system_menu` VALUES (115, '代码生成', 'infra:codegen:query', 2, 1, 2, 'codegen', 'code', 'infra/codegen/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:29:33', b'0'); +INSERT INTO `system_menu` VALUES (116, '系统接口', 'infra:swagger:list', 2, 3, 2, 'swagger', 'swagger', 'infra/swagger/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:30:03', b'0'); INSERT INTO `system_menu` VALUES (500, '操作日志', '', 2, 1, 108, 'operate-log', 'form', 'system/operatelog/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:42:56', b'0'); INSERT INTO `system_menu` VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'logininfor', 'system/loginlog/index', 0, 'admin', '2021-01-05 17:03:48', '1', '2021-03-14 21:39:23', b'0'); INSERT INTO `system_menu` VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-01-05 22:36:55', b'0'); @@ -2577,38 +2889,38 @@ INSERT INTO `system_menu` VALUES (1051, '任务修改', 'infra:job:update', 3, 3 INSERT INTO `system_menu` VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:22', b'0'); INSERT INTO `system_menu` VALUES (1053, '状态修改', 'infra:job:update', 3, 5, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:38', b'0'); INSERT INTO `system_menu` VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-07 13:02:51', b'0'); -INSERT INTO `system_menu` VALUES (1055, '生成查询', 'tool:gen:query', 3, 1, 115, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:25', b'1'); -INSERT INTO `system_menu` VALUES (1056, '生成修改', 'tool:codegen:update', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:41', b'0'); -INSERT INTO `system_menu` VALUES (1057, '生成删除', 'tool:codegen:delete', 3, 3, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:02', b'0'); -INSERT INTO `system_menu` VALUES (1058, '导入代码', 'tool:codegen:create', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:23:50', b'0'); -INSERT INTO `system_menu` VALUES (1059, '预览代码', 'tool:codegen:preview', 3, 4, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:10', b'0'); -INSERT INTO `system_menu` VALUES (1060, '生成代码', 'tool:codegen:download', 3, 5, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '', '2021-02-06 21:24:20', b'0'); +INSERT INTO `system_menu` VALUES (1055, '生成查询', 'infra:gen:query', 3, 1, 115, '#', '#', '', 0, 'admin', '2021-01-05 17:03:48', '', '2022-03-10 16:27:32', b'1'); +INSERT INTO `system_menu` VALUES (1056, '生成修改', 'infra:codegen:update', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:26:19', b'0'); +INSERT INTO `system_menu` VALUES (1057, '生成删除', 'infra:codegen:delete', 3, 3, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:26:32', b'0'); +INSERT INTO `system_menu` VALUES (1058, '导入代码', 'infra:codegen:create', 3, 2, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:26:24', b'0'); +INSERT INTO `system_menu` VALUES (1059, '预览代码', 'infra:codegen:preview', 3, 4, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:26:37', b'0'); +INSERT INTO `system_menu` VALUES (1060, '生成代码', 'infra:codegen:download', 3, 5, 115, '', '', '', 0, 'admin', '2021-01-05 17:03:48', '1', '2022-03-11 00:26:44', b'0'); INSERT INTO `system_menu` VALUES (1063, '设置角色菜单权限', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', 0, '', '2021-01-06 17:53:44', '', '2021-01-06 17:55:23', b'0'); INSERT INTO `system_menu` VALUES (1064, '设置角色数据权限', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', 0, '', '2021-01-06 17:56:31', '', '2021-01-06 17:56:31', b'0'); INSERT INTO `system_menu` VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', 0, '', '2021-01-07 10:23:28', '', '2021-01-07 10:23:28', b'0'); INSERT INTO `system_menu` VALUES (1066, '获得 Redis 监控信息', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', 0, '', '2021-01-26 01:02:31', '', '2021-01-26 01:02:31', b'0'); INSERT INTO `system_menu` VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', 0, '', '2021-01-26 01:02:52', '', '2021-01-26 01:02:52', b'0'); -INSERT INTO `system_menu` VALUES (1070, '代码生成示例', 'tool:test-demo:query', 2, 0, 3, 'test-demo', 'validCode', 'tool/testDemo/index', 0, '', '2021-02-06 12:42:49', '', '2021-03-06 03:45:22', b'0'); -INSERT INTO `system_menu` VALUES (1071, '测试示例表创建', 'tool:test-demo:create', 3, 1, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:47', b'0'); -INSERT INTO `system_menu` VALUES (1072, '测试示例表更新', 'tool:test-demo:update', 3, 2, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:51', b'0'); -INSERT INTO `system_menu` VALUES (1073, '测试示例表删除', 'tool:test-demo:delete', 3, 3, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:53:58', b'0'); -INSERT INTO `system_menu` VALUES (1074, '测试示例表导出', 'tool:test-demo:export', 3, 4, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '', '2021-02-06 12:54:01', b'0'); +INSERT INTO `system_menu` VALUES (1070, '代码生成示例', 'infra:test-demo:query', 2, 1, 2, 'test-demo', 'validCode', 'infra/testDemo/index', 0, '', '2021-02-06 12:42:49', '1', '2022-03-11 00:29:37', b'0'); +INSERT INTO `system_menu` VALUES (1071, '测试示例表创建', 'infra:test-demo:create', 3, 1, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '1', '2022-03-11 00:26:51', b'0'); +INSERT INTO `system_menu` VALUES (1072, '测试示例表更新', 'infra:test-demo:update', 3, 2, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '1', '2022-03-11 00:27:00', b'0'); +INSERT INTO `system_menu` VALUES (1073, '测试示例表删除', 'infra:test-demo:delete', 3, 3, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '1', '2022-03-11 00:27:11', b'0'); +INSERT INTO `system_menu` VALUES (1074, '测试示例表导出', 'infra:test-demo:export', 3, 4, 1070, '', '', '', 0, '', '2021-02-06 12:42:49', '1', '2022-03-11 00:27:17', b'0'); INSERT INTO `system_menu` VALUES (1075, '任务触发', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, '', '2021-02-07 13:03:10', '', '2021-02-07 13:03:10', b'0'); -INSERT INTO `system_menu` VALUES (1076, '数据库文档', '', 2, 5, 3, 'db-doc', 'table', 'tool/dbDoc/index', 0, '', '2021-02-08 01:41:47', '', '2021-02-08 01:49:00', b'0'); -INSERT INTO `system_menu` VALUES (1077, '链路追踪', '', 2, 7, 2, 'skywalking', 'eye-open', 'infra/skywalking', 0, '', '2021-02-08 20:41:31', '', '2021-02-26 02:18:45', b'0'); +INSERT INTO `system_menu` VALUES (1076, '数据库文档', '', 2, 4, 2, 'db-doc', 'table', 'infra/dbDoc/index', 0, '', '2021-02-08 01:41:47', '1', '2022-03-11 00:30:06', b'0'); +INSERT INTO `system_menu` VALUES (1077, '链路追踪', '', 2, 13, 2, 'skywalking', 'eye-open', 'infra/skywalking', 0, '', '2021-02-08 20:41:31', '1', '2022-03-11 00:31:12', b'0'); INSERT INTO `system_menu` VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'log', 'infra/apiAccessLog/index', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:09', b'0'); INSERT INTO `system_menu` VALUES (1079, 'API 访问日志表创建', 'system:api-access-log:create', 3, 1, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:00', b'1'); INSERT INTO `system_menu` VALUES (1080, 'API 访问日志表更新', 'system:api-access-log:update', 3, 2, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:08', b'1'); INSERT INTO `system_menu` VALUES (1081, 'API 访问日志表删除', 'system:api-access-log:delete', 3, 3, 1078, '', '', '', 1, '', '2021-02-26 01:32:59', '', '2021-02-26 02:21:27', b'1'); INSERT INTO `system_menu` VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', 0, '', '2021-02-26 01:32:59', '1', '2021-03-10 01:28:13', b'0'); -INSERT INTO `system_menu` VALUES (1083, 'API 日志', '', 2, 3, 2, 'log', 'log', NULL, 0, '', '2021-02-26 02:18:24', '', '2021-02-26 02:20:17', b'0'); +INSERT INTO `system_menu` VALUES (1083, 'API 日志', '', 2, 8, 2, 'log', 'log', NULL, 0, '', '2021-02-26 02:18:24', '1', '2022-03-11 00:30:41', b'0'); INSERT INTO `system_menu` VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'log', 'infra/apiErrorLog/index', 0, '', '2021-02-26 07:53:20', '', '2021-02-26 07:54:40', b'0'); INSERT INTO `system_menu` VALUES (1085, '日志处理', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:18', b'0'); INSERT INTO `system_menu` VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', 0, '', '2021-02-26 07:53:20', '1', '2021-03-10 01:28:21', b'0'); INSERT INTO `system_menu` VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', 0, '1', '2021-03-10 01:26:19', '1', '2021-03-10 01:26:19', b'0'); INSERT INTO `system_menu` VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', 0, '1', '2021-03-10 01:28:04', '1', '2021-03-10 01:29:38', b'0'); INSERT INTO `system_menu` VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', 0, '1', '2021-03-10 01:29:09', '1', '2021-03-10 01:29:09', b'0'); -INSERT INTO `system_menu` VALUES (1090, '文件管理', '', 2, 0, 2, 'file', 'upload', 'infra/file/index', 0, '', '2021-03-12 20:16:20', '1', '2021-03-13 11:07:05', b'0'); +INSERT INTO `system_menu` VALUES (1090, '文件管理', '', 2, 5, 2, 'file', 'upload', 'infra/file/index', 0, '', '2021-03-12 20:16:20', '1', '2022-03-11 00:30:17', b'0'); INSERT INTO `system_menu` VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', 0, '', '2021-03-12 20:16:20', '', '2021-03-12 20:16:20', b'0'); INSERT INTO `system_menu` VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', 0, '', '2021-03-12 20:16:20', '', '2021-03-12 20:16:20', b'0'); INSERT INTO `system_menu` VALUES (1093, '短信管理', '', 1, 11, 1, 'sms', 'validCode', NULL, 0, '1', '2021-04-05 01:10:16', '1', '2021-04-05 01:11:38', b'0'); @@ -2633,7 +2945,7 @@ INSERT INTO `system_menu` VALUES (1112, '错误码创建', 'system:error-code:cr INSERT INTO `system_menu` VALUES (1113, '错误码更新', 'system:error-code:update', 3, 3, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:47', b'0'); INSERT INTO `system_menu` VALUES (1114, '错误码删除', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:51', b'0'); INSERT INTO `system_menu` VALUES (1115, '错误码导出', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, '', '2021-04-13 21:46:42', '', '2021-04-13 22:09:55', b'0'); -INSERT INTO `system_menu` VALUES (1116, '日志中心', '', 2, 8, 2, 'log-center', 'log', 'infra/skywalking/log', 0, '1', '2021-04-26 22:35:45', '1', '2021-04-26 22:37:25', b'0'); +INSERT INTO `system_menu` VALUES (1116, '日志中心', '', 2, 14, 2, 'log-center', 'log', 'infra/skywalking/log', 0, '1', '2021-04-26 22:35:45', '1', '2022-03-11 00:31:27', b'0'); INSERT INTO `system_menu` VALUES (1117, '支付管理', '', 1, 11, 0, '/pay', 'money', NULL, 0, '1', '2021-12-25 16:43:41', '1', '2021-12-25 16:46:40', b'0'); INSERT INTO `system_menu` VALUES (1118, '请假查询', '', 2, 0, 5, 'leave', 'user', 'bpm/oa/leave/index', 0, '', '2021-09-20 08:51:03', '1', '2022-01-22 21:36:06', b'0'); INSERT INTO `system_menu` VALUES (1119, '请假申请查询', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', 0, '', '2021-09-20 08:51:03', '1', '2022-01-23 00:14:20', b'0'); @@ -2800,7 +3112,7 @@ CREATE TABLE `system_operate_log` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1437 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志记录'; +) ENGINE=InnoDB AUTO_INCREMENT=1480 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志记录'; -- ---------------------------- -- Records of system_operate_log @@ -3094,6 +3406,49 @@ INSERT INTO `system_operate_log` VALUES (1433, '', 1, 2, '管理后台 - 权限' INSERT INTO `system_operate_log` VALUES (1434, '', 1, 2, '管理后台 - 权限', '赋予角色菜单', 2, '', '', 'POST', '/admin-api/system/permission/assign-role-menu', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.PermissionController.assignRoleMenu(PermissionAssignRoleMenuReqVO)', '{\"reqVO\":{\"roleId\":101,\"menuIds\":[1,103,1017,1018,1019,1020]}}', '2022-02-27 12:05:15', 46, 0, '', 'true', NULL, '2022-02-27 12:05:15', NULL, '2022-02-27 12:05:15', b'0', 1); INSERT INTO `system_operate_log` VALUES (1435, '', 1, 2, '管理后台 - 权限', '赋予角色菜单', 2, '', '', 'POST', '/admin-api/system/permission/assign-role-menu', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.PermissionController.assignRoleMenu(PermissionAssignRoleMenuReqVO)', '{\"reqVO\":{\"roleId\":101,\"menuIds\":[1,100,1001,1002,1003,1004,1005,1006,1007]}}', '2022-02-27 12:08:21', 72094, 0, '', 'true', NULL, '2022-02-27 12:09:34', NULL, '2022-02-27 12:09:34', b'0', 1); INSERT INTO `system_operate_log` VALUES (1436, '', 1, 2, '管理后台 - 权限', '赋予角色菜单', 2, '', '', 'POST', '/admin-api/system/permission/assign-role-menu', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.PermissionController.assignRoleMenu(PermissionAssignRoleMenuReqVO)', '{\"reqVO\":{\"roleId\":101,\"menuIds\":[1,103,1017,1018,1019,1020]}}', '2022-02-27 12:11:36', 3174, 0, '', 'true', NULL, '2022-02-27 12:11:39', NULL, '2022-02-27 12:11:39', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1437, '', 1, 2, '管理后台 - 流程模型', '新建模型', 2, '', '', 'POST', '/admin-api/bpm/model/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.createModel(BpmModelCreateReqVO)', '{\"createRetVO\":{\"key\":\"flowable_01\",\"name\":\"flowable测试\",\"description\":null}}', '2022-02-28 00:07:00', 32, 0, '', '\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\"', NULL, '2022-02-28 00:07:00', NULL, '2022-02-28 00:07:00', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1438, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\",\"name\":\"flowable测试\",\"description\":null,\"category\":null,\"bpmnXml\":\"\\nFlow_0804gmoFlow_0804gmoFlow_0cx479xFlow_0cx479x\",\"formType\":null,\"formId\":null,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-02-28 00:51:18', 45, 0, '', 'true', NULL, '2022-02-28 00:51:18', NULL, '2022-02-28 00:51:18', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1439, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\",\"name\":\"flowable测试\",\"description\":\"ooxx\",\"category\":\"1\",\"bpmnXml\":null,\"formType\":10,\"formId\":11,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-02-28 00:51:32', 17, 0, '', 'true', NULL, '2022-02-28 00:51:32', NULL, '2022-02-28 00:51:32', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1440, '', 1, 2, '管理后台 - 流程模型', '部署模型', 2, '', '', 'POST', '/admin-api/bpm/model/deploy', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.deployModel(String)', '{\"id\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\"}', '2022-02-28 00:51:35', 233, 500, 'ServiceException: 部署流程失败,原因:用户任务(null)未配置分配规则,请点击【修改流程】按钮进行配置', 'null', NULL, '2022-02-28 00:51:35', NULL, '2022-02-28 00:51:35', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1441, '', 1, 2, '管理后台 - 流程模型', '部署模型', 2, '', '', 'POST', '/admin-api/bpm/model/deploy', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.deployModel(String)', '{\"id\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\"}', '2022-02-28 00:52:25', 13756, 500, 'ServiceException: 部署流程失败,原因:用户任务(null)未配置分配规则,请点击【修改流程】按钮进行配置', 'null', NULL, '2022-02-28 00:52:39', NULL, '2022-02-28 00:52:39', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1442, '', 1, 2, '管理后台 - 流程模型', '修改模型', 3, '', '', 'PUT', '/admin-api/bpm/model/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.updateModel(BpmModelUpdateReqVO)', '{\"modelVO\":{\"id\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\",\"name\":\"flowable测试\",\"description\":\"ooxx\",\"category\":\"1\",\"bpmnXml\":\"\\nFlow_0804gmoFlow_0804gmoFlow_0cx479xFlow_0cx479x\",\"formType\":10,\"formId\":11,\"formCustomCreatePath\":null,\"formCustomViewPath\":null}}', '2022-02-28 00:52:50', 32, 0, '', 'true', NULL, '2022-02-28 00:52:50', NULL, '2022-02-28 00:52:50', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1443, '', 1, 2, '管理后台 - 任务分配规则', '创建任务分配规则', 2, '', '', 'POST', '/admin-api/bpm/task-assign-rule/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmTaskAssignRuleController.createTaskAssignRule(BpmTaskAssignRuleCreateReqVO)', '{\"reqVO\":{\"type\":50,\"options\":[10],\"modelId\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\",\"taskDefinitionKey\":\"task01\"}}', '2022-02-28 00:53:09', 24, 0, '', '181', NULL, '2022-02-28 00:53:09', NULL, '2022-02-28 00:53:09', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1444, '', 1, 2, '管理后台 - 流程模型', '部署模型', 2, '', '', 'POST', '/admin-api/bpm/model/deploy', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.definition.BpmModelController.deployModel(String)', '{\"id\":\"4b4909d8-97e7-11ec-8e20-862bc1a4a054\"}', '2022-02-28 00:53:12', 1922, 0, '', 'true', NULL, '2022-02-28 00:53:14', NULL, '2022-02-28 00:53:14', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1445, '', 1, 2, '管理后台 - 流程实例', '新建流程实例', 2, '', '', 'POST', '/admin-api/bpm/process-instance/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmProcessInstanceController.createProcessInstance(BpmProcessInstanceCreateReqVO)', '{\"createReqVO\":{\"processDefinitionId\":\"flowable_01:1:c0bb5b36-97ed-11ec-a2b9-862bc1a4a054\",\"variables\":{\"field121\":\"AAA\",\"field122\":[1]}}}', '2022-02-28 00:53:28', 398, 0, '', '\"c964c377-97ed-11ec-a2b9-862bc1a4a054\"', NULL, '2022-02-28 00:53:29', NULL, '2022-02-28 00:53:29', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1446, '', 1, 2, '管理后台 - 流程任务实例', '通过任务', 3, '', '', 'PUT', '/admin-api/bpm/task/approve', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.bpm.controller.admin.task.BpmTaskController.approveTask(BpmTaskApproveReqVO)', '{\"reqVO\":{\"id\":\"c97146a4-97ed-11ec-a2b9-862bc1a4a054\",\"comment\":\"嗯嗯嗯\"}}', '2022-02-28 00:53:35', 246, 0, '', 'true', NULL, '2022-02-28 00:53:35', NULL, '2022-02-28 00:53:35', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1447, '', 1, 2, '管理后台 - 租户', '创建租户', 2, '', '', 'POST', '/admin-api/system/tenant/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.tenant.TenantController.createTenant(TenantCreateReqVO)', '{\"createReqVO\":{\"name\":\"测试租户\",\"contactName\":\"芋道\",\"contactMobile\":\"15601691300\",\"status\":0,\"domain\":\"https://www.iocoder.cn\",\"packageId\":111,\"expireTime\":1651248000000,\"accountCount\":50,\"username\":\"aoteman\",\"password\":\"wwb626583\"}}', '2022-03-07 21:37:58', 363, 0, '', '122', NULL, '2022-03-07 21:37:58', NULL, '2022-03-07 21:37:58', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1448, '', 113, 2, '管理后台 - 部门', '创建部门', 2, '', '', 'POST', '/admin-api/system/dept/create', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.dept.DeptController.createDept(DeptCreateReqVO)', '{\"reqVO\":{\"name\":\"顶级部门\",\"parentId\":0,\"sort\":1,\"leaderUserId\":null,\"phone\":null,\"email\":null,\"status\":0}}', '2022-03-07 21:44:50', 24, 0, '', '111', NULL, '2022-03-07 21:44:50', NULL, '2022-03-07 21:44:50', b'0', 122); +INSERT INTO `system_operate_log` VALUES (1449, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"生成修改\",\"permission\":\"infra:codegen:update\",\"type\":3,\"sort\":2,\"parentId\":115,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1056}}', '2022-03-11 00:26:19', 48, 0, '', 'true', NULL, '2022-03-11 00:26:19', NULL, '2022-03-11 00:26:19', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1450, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"导入代码\",\"permission\":\"infra:codegen:create\",\"type\":3,\"sort\":2,\"parentId\":115,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1058}}', '2022-03-11 00:26:24', 38, 0, '', 'true', NULL, '2022-03-11 00:26:24', NULL, '2022-03-11 00:26:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1451, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"生成删除\",\"permission\":\"infra:codegen:delete\",\"type\":3,\"sort\":3,\"parentId\":115,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1057}}', '2022-03-11 00:26:32', 41, 0, '', 'true', NULL, '2022-03-11 00:26:32', NULL, '2022-03-11 00:26:32', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1452, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"预览代码\",\"permission\":\"infra:codegen:preview\",\"type\":3,\"sort\":4,\"parentId\":115,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1059}}', '2022-03-11 00:26:37', 38, 0, '', 'true', NULL, '2022-03-11 00:26:37', NULL, '2022-03-11 00:26:37', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1453, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"生成代码\",\"permission\":\"infra:codegen:download\",\"type\":3,\"sort\":5,\"parentId\":115,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1060}}', '2022-03-11 00:26:44', 38, 0, '', 'true', NULL, '2022-03-11 00:26:44', NULL, '2022-03-11 00:26:44', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1454, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"测试示例表创建\",\"permission\":\"infra:test-demo:create\",\"type\":3,\"sort\":1,\"parentId\":1070,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1071}}', '2022-03-11 00:26:51', 40, 0, '', 'true', NULL, '2022-03-11 00:26:51', NULL, '2022-03-11 00:26:51', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1455, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"测试示例表更新\",\"permission\":\"infra:test-demo:update\",\"type\":3,\"sort\":2,\"parentId\":1070,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1072}}', '2022-03-11 00:27:00', 39, 0, '', 'true', NULL, '2022-03-11 00:27:01', NULL, '2022-03-11 00:27:01', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1456, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"测试示例表删除\",\"permission\":\"infra:test-demo:delete\",\"type\":3,\"sort\":3,\"parentId\":1070,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1073}}', '2022-03-11 00:27:11', 40, 0, '', 'true', NULL, '2022-03-11 00:27:11', NULL, '2022-03-11 00:27:11', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1457, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"测试示例表导出\",\"permission\":\"infra:test-demo:export\",\"type\":3,\"sort\":4,\"parentId\":1070,\"path\":\"\",\"icon\":\"\",\"component\":\"\",\"status\":0,\"id\":1074}}', '2022-03-11 00:27:17', 42, 0, '', 'true', NULL, '2022-03-11 00:27:17', NULL, '2022-03-11 00:27:17', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1458, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"代码生成\",\"permission\":\"infra:codegen:query\",\"type\":2,\"sort\":0,\"parentId\":2,\"path\":\"codegen\",\"icon\":\"code\",\"component\":\"infra/codegen/index\",\"status\":0,\"id\":115}}', '2022-03-11 00:27:57', 36, 0, '', 'true', NULL, '2022-03-11 00:27:57', NULL, '2022-03-11 00:27:57', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1459, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"代码生成示例\",\"permission\":\"infra:test-demo:query\",\"type\":2,\"sort\":0,\"parentId\":2,\"path\":\"test-demo\",\"icon\":\"validCode\",\"component\":\"infra/testDemo/index\",\"status\":0,\"id\":1070}}', '2022-03-11 00:28:16', 39, 0, '', 'true', NULL, '2022-03-11 00:28:16', NULL, '2022-03-11 00:28:16', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1460, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"表单构建\",\"permission\":\"infra:build:list\",\"type\":2,\"sort\":0,\"parentId\":2,\"path\":\"build\",\"icon\":\"build\",\"component\":\"infra/build/index\",\"status\":0,\"id\":114}}', '2022-03-11 00:28:24', 37, 0, '', 'true', NULL, '2022-03-11 00:28:24', NULL, '2022-03-11 00:28:24', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1461, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"系统接口\",\"permission\":\"infra:swagger:list\",\"type\":2,\"sort\":0,\"parentId\":2,\"path\":\"swagger\",\"icon\":\"swagger\",\"component\":\"infra/swagger/index\",\"status\":0,\"id\":116}}', '2022-03-11 00:28:35', 38, 0, '', 'true', NULL, '2022-03-11 00:28:35', NULL, '2022-03-11 00:28:35', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1462, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"数据库文档\",\"permission\":\"\",\"type\":2,\"sort\":0,\"parentId\":2,\"path\":\"db-doc\",\"icon\":\"table\",\"component\":\"infra/dbDoc/index\",\"status\":0,\"id\":1076}}', '2022-03-11 00:28:41', 39, 0, '', 'true', NULL, '2022-03-11 00:28:41', NULL, '2022-03-11 00:28:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1463, '', 1, 2, '管理后台 - 菜单', '删除菜单', 4, '', '', 'DELETE', '/admin-api/system/menu/delete', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.deleteMenu(Long)', '{\"id\":3}', '2022-03-11 00:29:02', 52, 0, '', 'true', NULL, '2022-03-11 00:29:02', NULL, '2022-03-11 00:29:02', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1464, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"代码生成\",\"permission\":\"infra:codegen:query\",\"type\":2,\"sort\":1,\"parentId\":2,\"path\":\"codegen\",\"icon\":\"code\",\"component\":\"infra/codegen/index\",\"status\":0,\"id\":115}}', '2022-03-11 00:29:33', 43, 0, '', 'true', NULL, '2022-03-11 00:29:33', NULL, '2022-03-11 00:29:33', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1465, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"代码生成示例\",\"permission\":\"infra:test-demo:query\",\"type\":2,\"sort\":1,\"parentId\":2,\"path\":\"test-demo\",\"icon\":\"validCode\",\"component\":\"infra/testDemo/index\",\"status\":0,\"id\":1070}}', '2022-03-11 00:29:37', 41, 0, '', 'true', NULL, '2022-03-11 00:29:37', NULL, '2022-03-11 00:29:37', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1466, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"表单构建\",\"permission\":\"infra:build:list\",\"type\":2,\"sort\":2,\"parentId\":2,\"path\":\"build\",\"icon\":\"build\",\"component\":\"infra/build/index\",\"status\":0,\"id\":114}}', '2022-03-11 00:29:59', 39, 0, '', 'true', NULL, '2022-03-11 00:29:59', NULL, '2022-03-11 00:29:59', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1467, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"系统接口\",\"permission\":\"infra:swagger:list\",\"type\":2,\"sort\":3,\"parentId\":2,\"path\":\"swagger\",\"icon\":\"swagger\",\"component\":\"infra/swagger/index\",\"status\":0,\"id\":116}}', '2022-03-11 00:30:03', 38, 0, '', 'true', NULL, '2022-03-11 00:30:03', NULL, '2022-03-11 00:30:03', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1468, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"数据库文档\",\"permission\":\"\",\"type\":2,\"sort\":4,\"parentId\":2,\"path\":\"db-doc\",\"icon\":\"table\",\"component\":\"infra/dbDoc/index\",\"status\":0,\"id\":1076}}', '2022-03-11 00:30:06', 40, 0, '', 'true', NULL, '2022-03-11 00:30:06', NULL, '2022-03-11 00:30:06', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1469, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"文件管理\",\"permission\":\"\",\"type\":2,\"sort\":5,\"parentId\":2,\"path\":\"file\",\"icon\":\"upload\",\"component\":\"infra/file/index\",\"status\":0,\"id\":1090}}', '2022-03-11 00:30:17', 37, 0, '', 'true', NULL, '2022-03-11 00:30:17', NULL, '2022-03-11 00:30:17', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1470, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"配置管理\",\"permission\":\"\",\"type\":2,\"sort\":6,\"parentId\":2,\"path\":\"config\",\"icon\":\"edit\",\"component\":\"infra/config/index\",\"status\":0,\"id\":106}}', '2022-03-11 00:30:22', 55, 0, '', 'true', NULL, '2022-03-11 00:30:22', NULL, '2022-03-11 00:30:22', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1471, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"定时任务\",\"permission\":\"\",\"type\":2,\"sort\":7,\"parentId\":2,\"path\":\"job\",\"icon\":\"job\",\"component\":\"infra/job/index\",\"status\":0,\"id\":110}}', '2022-03-11 00:30:31', 37, 0, '', 'true', NULL, '2022-03-11 00:30:31', NULL, '2022-03-11 00:30:31', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1472, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"API 日志\",\"permission\":\"\",\"type\":2,\"sort\":8,\"parentId\":2,\"path\":\"log\",\"icon\":\"log\",\"component\":null,\"status\":0,\"id\":1083}}', '2022-03-11 00:30:41', 38, 0, '', 'true', NULL, '2022-03-11 00:30:41', NULL, '2022-03-11 00:30:41', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1473, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"MySQL 监控\",\"permission\":\"\",\"type\":2,\"sort\":9,\"parentId\":2,\"path\":\"druid\",\"icon\":\"druid\",\"component\":\"infra/druid/index\",\"status\":0,\"id\":111}}', '2022-03-11 00:30:47', 41, 0, '', 'true', NULL, '2022-03-11 00:30:47', NULL, '2022-03-11 00:30:47', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1474, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"Redis 监控\",\"permission\":\"\",\"type\":2,\"sort\":10,\"parentId\":2,\"path\":\"redis\",\"icon\":\"redis\",\"component\":\"infra/redis/index\",\"status\":0,\"id\":113}}', '2022-03-11 00:30:52', 40, 0, '', 'true', NULL, '2022-03-11 00:30:52', NULL, '2022-03-11 00:30:52', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1475, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"Java 监控\",\"permission\":\"\",\"type\":2,\"sort\":11,\"parentId\":2,\"path\":\"admin-server\",\"icon\":\"server\",\"component\":\"infra/server\",\"status\":0,\"id\":112}}', '2022-03-11 00:31:01', 39, 0, '', 'true', NULL, '2022-03-11 00:31:01', NULL, '2022-03-11 00:31:01', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1476, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"定时任务\",\"permission\":\"\",\"type\":2,\"sort\":12,\"parentId\":2,\"path\":\"job\",\"icon\":\"job\",\"component\":\"infra/job/index\",\"status\":0,\"id\":110}}', '2022-03-11 00:31:08', 39, 0, '', 'true', NULL, '2022-03-11 00:31:08', NULL, '2022-03-11 00:31:08', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1477, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"链路追踪\",\"permission\":\"\",\"type\":2,\"sort\":13,\"parentId\":2,\"path\":\"skywalking\",\"icon\":\"eye-open\",\"component\":\"infra/skywalking\",\"status\":0,\"id\":1077}}', '2022-03-11 00:31:12', 39, 0, '', 'true', NULL, '2022-03-11 00:31:12', NULL, '2022-03-11 00:31:12', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1478, '', 1, 2, '管理后台 - 菜单', '修改菜单', 3, '', '', 'PUT', '/admin-api/system/menu/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.system.controller.admin.permission.MenuController.updateMenu(MenuUpdateReqVO)', '{\"reqVO\":{\"name\":\"日志中心\",\"permission\":\"\",\"type\":2,\"sort\":14,\"parentId\":2,\"path\":\"log-center\",\"icon\":\"log\",\"component\":\"infra/skywalking/log\",\"status\":0,\"id\":1116}}', '2022-03-11 00:31:27', 39, 0, '', 'true', NULL, '2022-03-11 00:31:27', NULL, '2022-03-11 00:31:27', b'0', 1); +INSERT INTO `system_operate_log` VALUES (1479, '', 1, 2, '管理后台 - 代码生成器', '更新数据库的表和字段定义', 3, '', '', 'PUT', '/admin-api/infra/codegen/update', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', 'CommonResult cn.iocoder.yudao.module.infra.controller.admin.codegen.CodegenController.updateCodegen(CodegenUpdateReqVO)', '{\"updateReqVO\":{\"table\":{\"importType\":1,\"scene\":1,\"tableName\":\"tool_test_demo\",\"tableComment\":\"字典类型表\",\"remark\":null,\"moduleName\":\"tool\",\"businessName\":\"test\",\"className\":\"TestDemo\",\"classComment\":\"字典类型\",\"author\":\"芋道源码\",\"templateType\":1,\"parentMenuId\":null,\"id\":53},\"columns\":[{\"tableId\":53,\"columnName\":\"id\",\"columnType\":\"bigint\",\"columnComment\":\"编号\",\"nullable\":false,\"primaryKey\":true,\"autoIncrement\":\"true\",\"ordinalPosition\":1,\"javaType\":\"Long\",\"javaField\":\"id\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":true,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":649},{\"tableId\":53,\"columnName\":\"name\",\"columnType\":\"varchar(100)\",\"columnComment\":\"名字\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":2,\"javaType\":\"String\",\"javaField\":\"name\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"LIKE\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":650},{\"tableId\":53,\"columnName\":\"status\",\"columnType\":\"tinyint\",\"columnComment\":\"状态\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":3,\"javaType\":\"Integer\",\"javaField\":\"status\",\"dictType\":\"user_type\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"radio\",\"id\":651},{\"tableId\":53,\"columnName\":\"type\",\"columnType\":\"tinyint\",\"columnComment\":\"类型\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":4,\"javaType\":\"Integer\",\"javaField\":\"type\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"select\",\"id\":652},{\"tableId\":53,\"columnName\":\"category\",\"columnType\":\"tinyint\",\"columnComment\":\"分类\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":5,\"javaType\":\"Integer\",\"javaField\":\"category\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":653},{\"tableId\":53,\"columnName\":\"remark\",\"columnType\":\"varchar(500)\",\"columnComment\":\"备注\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":6,\"javaType\":\"String\",\"javaField\":\"remark\",\"dictType\":\"\",\"example\":null,\"createOperation\":true,\"updateOperation\":true,\"listOperation\":true,\"listOperationCondition\":\"=\",\"listOperationResult\":true,\"htmlType\":\"input\",\"id\":654},{\"tableId\":53,\"columnName\":\"creator\",\"columnType\":\"varchar(64)\",\"columnComment\":\"创建者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":7,\"javaType\":\"String\",\"javaField\":\"creator\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":655},{\"tableId\":53,\"columnName\":\"create_time\",\"columnType\":\"datetime\",\"columnComment\":\"创建时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":8,\"javaType\":\"Date\",\"javaField\":\"createTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":true,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":true,\"htmlType\":\"datetime\",\"id\":656},{\"tableId\":53,\"columnName\":\"updater\",\"columnType\":\"varchar(64)\",\"columnComment\":\"更新者\",\"nullable\":true,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":9,\"javaType\":\"String\",\"javaField\":\"updater\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"input\",\"id\":657},{\"tableId\":53,\"columnName\":\"update_time\",\"columnType\":\"datetime\",\"columnComment\":\"更新时间\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":10,\"javaType\":\"Date\",\"javaField\":\"updateTime\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"BETWEEN\",\"listOperationResult\":false,\"htmlType\":\"datetime\",\"id\":658},{\"tableId\":53,\"columnName\":\"deleted\",\"columnType\":\"bit(1)\",\"columnComment\":\"是否删除\",\"nullable\":false,\"primaryKey\":false,\"autoIncrement\":\"false\",\"ordinalPosition\":11,\"javaType\":\"Boolean\",\"javaField\":\"deleted\",\"dictType\":\"\",\"example\":null,\"createOperation\":false,\"updateOperation\":false,\"listOperation\":false,\"listOperationCondition\":\"=\",\"listOperationResult\":false,\"htmlType\":\"radio\",\"id\":659}]}}', '2022-03-11 00:37:54', 110, 0, '', 'true', NULL, '2022-03-11 00:37:54', NULL, '2022-03-11 00:37:54', b'0', 1); COMMIT; -- ---------------------------- @@ -3102,14 +3457,14 @@ COMMIT; DROP TABLE IF EXISTS `system_post`; CREATE TABLE `system_post` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID', - `code` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位编码', - `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位名称', + `code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位编码', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位名称', `sort` int NOT NULL COMMENT '显示顺序', `status` tinyint NOT NULL COMMENT '状态(0正常 1停用)', - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -3133,22 +3488,22 @@ COMMIT; DROP TABLE IF EXISTS `system_role`; CREATE TABLE `system_role` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID', - `name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称', - `code` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色权限字符串', + `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称', + `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色权限字符串', `sort` int NOT NULL COMMENT '显示顺序', `data_scope` tinyint NOT NULL DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', - `data_scope_dept_ids` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '数据范围(指定部门数组)', + `data_scope_dept_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '数据范围(指定部门数组)', `status` tinyint NOT NULL COMMENT '角色状态(0正常 1停用)', `type` tinyint NOT NULL COMMENT '角色类型', - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色信息表'; +) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色信息表'; -- ---------------------------- -- Records of system_role @@ -3159,6 +3514,7 @@ INSERT INTO `system_role` VALUES (2, '普通角色', 'common', 2, 2, '', 0, 1, ' INSERT INTO `system_role` VALUES (101, '测试账号', 'test', 0, 5, '[]', 0, 2, '132', '', '2021-01-06 13:49:35', '1', '2022-02-27 10:53:20', b'0', 1); INSERT INTO `system_role` VALUES (109, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); INSERT INTO `system_role` VALUES (110, '测试角色', 'test', 0, 1, '[]', 0, 2, '嘿嘿', '110', '2022-02-23 00:14:34', '110', '2022-02-23 13:14:58', b'0', 121); +INSERT INTO `system_role` VALUES (111, '租户管理员', 'tenant_admin', 0, 1, '', 0, 1, '系统自动生成', '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); COMMIT; -- ---------------------------- @@ -3169,14 +3525,14 @@ CREATE TABLE `system_role_menu` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增编号', `role_id` bigint NOT NULL COMMENT '角色ID', `menu_id` bigint NOT NULL COMMENT '菜单ID', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1576 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色和菜单关联表'; +) ENGINE=InnoDB AUTO_INCREMENT=1594 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色和菜单关联表'; -- ---------------------------- -- Records of system_role_menu @@ -4497,6 +4853,24 @@ INSERT INTO `system_role_menu` VALUES (1572, 101, 1017, '1', '2022-02-27 12:11:3 INSERT INTO `system_role_menu` VALUES (1573, 101, 1018, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); INSERT INTO `system_role_menu` VALUES (1574, 101, 1019, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); INSERT INTO `system_role_menu` VALUES (1575, 101, 1020, '1', '2022-02-27 12:11:39', '1', '2022-02-27 12:11:39', b'0', 1); +INSERT INTO `system_role_menu` VALUES (1576, 111, 1024, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1577, 111, 1025, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1578, 111, 1, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1579, 111, 1026, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1580, 111, 1027, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1581, 111, 1028, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1582, 111, 1029, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1583, 111, 1030, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1584, 111, 103, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1585, 111, 104, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1586, 111, 105, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1587, 111, 1017, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1588, 111, 1018, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1589, 111, 1019, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1590, 111, 1020, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1591, 111, 1021, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1592, 111, 1022, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); +INSERT INTO `system_role_menu` VALUES (1593, 111, 1023, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); COMMIT; -- ---------------------------- @@ -4505,16 +4879,16 @@ COMMIT; DROP TABLE IF EXISTS `system_sms_channel`; CREATE TABLE `system_sms_channel` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `signature` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信签名', - `code` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道编码', + `signature` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信签名', + `code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '渠道编码', `status` tinyint NOT NULL COMMENT '开启状态', - `remark` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `api_key` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的账号', - `api_secret` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 的秘钥', - `callback_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信发送回调 URL', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `api_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的账号', + `api_secret` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 的秘钥', + `callback_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信发送回调 URL', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE @@ -4536,17 +4910,17 @@ COMMIT; DROP TABLE IF EXISTS `system_sms_code`; CREATE TABLE `system_sms_code` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号', - `code` varchar(6) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '验证码', - `create_ip` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建 IP', + `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号', + `code` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '验证码', + `create_ip` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '创建 IP', `scene` tinyint NOT NULL COMMENT '发送场景', `today_index` tinyint NOT NULL COMMENT '今日发送的第几条', `used` tinyint NOT NULL COMMENT '是否使用', `used_time` datetime DEFAULT NULL COMMENT '使用时间', - `used_ip` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '使用 IP', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `used_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '使用 IP', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', @@ -4567,41 +4941,43 @@ DROP TABLE IF EXISTS `system_sms_log`; CREATE TABLE `system_sms_log` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', `channel_id` bigint NOT NULL COMMENT '短信渠道编号', - `channel_code` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信渠道编码', + `channel_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信渠道编码', `template_id` bigint NOT NULL COMMENT '模板编号', - `template_code` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', + `template_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模板编码', `template_type` tinyint NOT NULL COMMENT '短信类型', - `template_content` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信内容', - `template_params` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信参数', - `api_template_id` varchar(63) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的模板编号', - `mobile` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号', + `template_content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信内容', + `template_params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信参数', + `api_template_id` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '短信 API 的模板编号', + `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号', `user_id` bigint DEFAULT NULL COMMENT '用户编号', `user_type` tinyint DEFAULT NULL COMMENT '用户类型', `send_status` tinyint NOT NULL DEFAULT '0' COMMENT '发送状态', `send_time` datetime DEFAULT NULL COMMENT '发送时间', `send_code` int DEFAULT NULL COMMENT '发送结果的编码', - `send_msg` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '发送结果的提示', - `api_send_code` varchar(63) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送结果的编码', - `api_send_msg` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送失败的提示', - `api_request_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送返回的唯一请求 ID', - `api_serial_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送返回的序号', + `send_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '发送结果的提示', + `api_send_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送结果的编码', + `api_send_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送失败的提示', + `api_request_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送返回的唯一请求 ID', + `api_serial_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '短信 API 发送返回的序号', `receive_status` tinyint NOT NULL DEFAULT '0' COMMENT '接收状态', `receive_time` datetime DEFAULT NULL COMMENT '接收时间', - `api_receive_code` varchar(63) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API 接收结果的编码', - `api_receive_msg` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API 接收结果的说明', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `api_receive_code` varchar(63) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API 接收结果的编码', + `api_receive_msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'API 接收结果的说明', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信日志'; +) ENGINE=InnoDB AUTO_INCREMENT=130 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='短信日志'; -- ---------------------------- -- Records of system_sms_log -- ---------------------------- BEGIN; INSERT INTO `system_sms_log` VALUES (127, 1, 'YUN_PIAN', 2, 'test_01', 1, '正在进行登录操作x,您的验证码是1024', '{\"operation\":\"x\",\"code\":\"1024\"}', '4383920', '15601691399', NULL, 2, 10, '2022-02-24 00:51:19', 0, '成功', '0', '发送成功', NULL, '70937649332', 10, '2022-02-24 00:51:23', 'DELIVRD', 'DELIVRD', '1', '2022-02-24 00:51:19', NULL, '2022-02-24 00:51:25', b'0'); +INSERT INTO `system_sms_log` VALUES (128, 4, 'DEBUG_DING_TALK', 9, 'bpm_task_assigned', 2, '您收到了一条新的待办任务:flowable测试-task01,申请人:芋道源码,处理链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054', '{\"startUserNickname\":\"芋道源码\",\"taskName\":\"task01\",\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054\",\"processInstanceName\":\"flowable测试\"}', 'suibian', '15612345678', 1, 2, 10, '2022-02-28 00:53:30', 0, '成功', '0', NULL, NULL, 'd7923606-fe81-4196-8ce9-148c0b355496', 0, NULL, NULL, NULL, '1', '2022-02-28 00:53:29', NULL, '2022-02-28 00:53:30', b'0'); +INSERT INTO `system_sms_log` VALUES (129, 4, 'DEBUG_DING_TALK', 11, 'bpm_process_instance_approve', 2, '您的流程被审批通过:flowable测试,查看链接:http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054', '{\"detailUrl\":\"http://dashboard.yudao.iocoder.cn/bpm/process-instance/detail?id=c964c377-97ed-11ec-a2b9-862bc1a4a054\",\"processInstanceName\":\"flowable测试\"}', 'suibian', '15612345678', 1, 2, 10, '2022-02-28 00:53:35', 0, '成功', '0', NULL, NULL, '6519bf56-b6c2-45ad-b81b-d89e84f95359', 0, NULL, NULL, NULL, '1', '2022-02-28 00:53:35', NULL, '2022-02-28 00:53:35', b'0'); COMMIT; -- ---------------------------- @@ -4692,11 +5068,11 @@ CREATE TABLE `system_tenant` ( `account_count` int NOT NULL COMMENT '账号数量', `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表'; +) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表'; -- ---------------------------- -- Records of system_tenant @@ -4704,6 +5080,7 @@ CREATE TABLE `system_tenant` ( BEGIN; INSERT INTO `system_tenant` VALUES (1, '芋道源码', NULL, '芋艿', '17321315478', 0, 'https://www.iocoder.cn', 0, '2099-02-19 17:14:16', 9999, '1', '2021-01-05 17:03:47', '1', '2022-02-23 12:15:11', b'0'); INSERT INTO `system_tenant` VALUES (121, '小租户', 110, '小王2', '15601691300', 0, 'http://www.iocoder.cn', 111, '2022-02-28 00:00:00', 20, '1', '2022-02-22 00:56:14', '1', '2022-02-23 00:08:45', b'0'); +INSERT INTO `system_tenant` VALUES (122, '测试租户', 113, '芋道', '15601691300', 0, 'https://www.iocoder.cn', 111, '2022-04-30 00:00:00', 50, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0'); COMMIT; -- ---------------------------- @@ -4737,33 +5114,33 @@ COMMIT; DROP TABLE IF EXISTS `system_user`; CREATE TABLE `system_user` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', - `username` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号', - `password` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码', - `nickname` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称', - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', + `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码', + `nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称', + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `dept_id` bigint DEFAULT NULL COMMENT '部门ID', - `post_ids` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '岗位编号数组', - `email` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用户邮箱', - `mobile` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号码', + `post_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '岗位编号数组', + `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用户邮箱', + `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号码', `sex` tinyint DEFAULT '0' COMMENT '用户性别', - `avatar` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '头像地址', + `avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '头像地址', `status` tinyint NOT NULL DEFAULT '0' COMMENT '帐号状态(0正常 1停用)', - `login_ip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '最后登录IP', + `login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '最后登录IP', `login_date` datetime DEFAULT NULL COMMENT '最后登录时间', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=113 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表'; +) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表'; -- ---------------------------- -- Records of system_user -- ---------------------------- BEGIN; -INSERT INTO `system_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/admin-api/infra/file/get/b7de3474-3805-4e09-80e3-185f20c31a74', 0, '127.0.0.1', '2022-02-27 16:27:05', 'admin', '2021-01-05 17:03:47', NULL, '2022-02-27 16:27:05', b'0', 1); +INSERT INTO `system_user` VALUES (1, 'admin', '$2a$10$0acJOIk2D25/oC87nyclE..0lzeu9DtQ/n3geP4fkun/zIVRhHJIO', '芋道源码', '管理员', 103, '[1]', 'aoteman@126.com', '15612345678', 1, 'http://127.0.0.1:48080/admin-api/infra/file/get/b7de3474-3805-4e09-80e3-185f20c31a74', 0, '127.0.0.1', '2022-03-11 00:24:08', 'admin', '2021-01-05 17:03:47', NULL, '2022-03-11 00:24:08', b'0', 1); INSERT INTO `system_user` VALUES (100, 'yudao', '$2a$10$11U48RhyJ5pSBYWSn12AD./ld671.ycSzJHbyrtpeoMeYiw31eo8a', '芋道', '不要吓我', 104, '[1]', 'yudao@iocoder.cn', '15601691300', 1, '', 1, '', NULL, '', '2021-01-07 09:07:17', '104', '2021-12-16 09:26:10', b'0', 1); INSERT INTO `system_user` VALUES (103, 'yuanma', '$2a$10$wWoPT7sqriM2O1YXRL.je.GiL538OR6ZTN8aQZr9JAGdnpCH2tpYe', '源码', NULL, 106, NULL, 'yuanma@iocoder.cn', '15601701300', 0, '', 0, '127.0.0.1', '2022-01-18 00:33:40', '', '2021-01-13 23:50:35', NULL, '2022-01-18 00:33:40', b'0', 1); INSERT INTO `system_user` VALUES (104, 'test', '$2a$10$scdhm8AdaYkG6XvV/R21xu7SEBhgyU7QmdmDLv7aR8iWV5IUiwVEC', '测试号', NULL, 107, '[]', '', '15601691200', 1, '', 0, '127.0.0.1', '2022-02-27 11:10:07', '', '2021-01-21 02:13:53', NULL, '2022-02-27 11:10:07', b'0', 1); @@ -4773,6 +5150,7 @@ INSERT INTO `system_user` VALUES (109, 'admin109', '$2a$10$JAqvH0tEc0I7dfDVBI7zy INSERT INTO `system_user` VALUES (110, 'admin110', '$2a$10$qYxoXs0ogPHgYllyEneYde9xcCW5hZgukrxeXZ9lmLhKse8TK6IwW', '小王', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-02-23 19:36:28', '1', '2022-02-22 00:56:14', NULL, '2022-02-27 08:26:59', b'0', 121); INSERT INTO `system_user` VALUES (111, 'test', '$2a$10$mExveopHUx9Q4QiLtAzhDeH3n4/QlNLzEsM4AqgxKrU.ciUZDXZCy', '测试用户', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '110', '2022-02-23 13:14:33', '110', '2022-02-23 13:14:33', b'0', 121); INSERT INTO `system_user` VALUES (112, 'newobject', '$2a$10$jh5MsR.ud/gKe3mVeUp5t.nEXGDSmHyv5OYjWQwHO8wlGmMSI9Twy', '新对象', NULL, NULL, '[]', '', '', 0, '', 0, '', NULL, '1', '2022-02-23 19:08:03', '1', '2022-02-23 19:08:03', b'0', 1); +INSERT INTO `system_user` VALUES (113, 'aoteman', '$2a$10$lAEsjpPIIsC3DFzsoX9.L.yKydbPGkVyeaOcH.J2SqSGoQvB6GZmy', '芋道', NULL, NULL, NULL, '', '15601691300', 0, '', 0, '127.0.0.1', '2022-03-07 21:43:59', '1', '2022-03-07 21:37:58', NULL, '2022-03-07 21:43:59', b'0', 122); COMMIT; -- ---------------------------- @@ -4783,14 +5161,14 @@ CREATE TABLE `system_user_role` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增编号', `user_id` bigint NOT NULL COMMENT '用户ID', `role_id` bigint NOT NULL COMMENT '角色ID', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `deleted` bit(1) DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户和角色关联表'; +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户和角色关联表'; -- ---------------------------- -- Records of system_user_role @@ -4810,6 +5188,7 @@ INSERT INTO `system_user_role` VALUES (12, 108, 107, '1', '2022-02-20 23:00:50', INSERT INTO `system_user_role` VALUES (13, 109, 108, '1', '2022-02-20 23:11:50', '1', '2022-02-20 23:11:50', b'0', 120); INSERT INTO `system_user_role` VALUES (14, 110, 109, '1', '2022-02-22 00:56:14', '1', '2022-02-22 00:56:14', b'0', 121); INSERT INTO `system_user_role` VALUES (15, 111, 110, '110', '2022-02-23 13:14:38', '110', '2022-02-23 13:14:38', b'0', 121); +INSERT INTO `system_user_role` VALUES (16, 113, 111, '1', '2022-03-07 21:37:58', '1', '2022-03-07 21:37:58', b'0', 122); COMMIT; -- ---------------------------- @@ -4838,293 +5217,18 @@ CREATE TABLE `system_user_session` ( -- ---------------------------- BEGIN; INSERT INTO `system_user_session` VALUES ('0d7a900b4a5e4089a48a54a71bca83e6', 1, 2, '2022-02-28 11:56:22', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 11:56:22', NULL, '2022-02-27 08:25:28', b'1', 1); +INSERT INTO `system_user_session` VALUES ('101dc01ff37b4ceaa60a63e1c1005bbf', 1, 2, '2022-03-08 21:47:01', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:47:01', NULL, '2022-03-07 21:47:01', b'0', 1); INSERT INTO `system_user_session` VALUES ('2935322c671b43fbbe7eb5532800bbcf', 110, 2, '2022-02-24 19:36:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-23 19:36:28', NULL, '2022-02-23 19:36:28', b'0', 121); INSERT INTO `system_user_session` VALUES ('3bb5bae78cc24cb5a1c1df9c479b50ad', 1, 2, '2022-02-21 23:57:11', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-20 23:57:11', NULL, '2022-02-20 23:57:11', b'0', 1); +INSERT INTO `system_user_session` VALUES ('4a97fd8f3721416ebe6c682ca9d70743', 1, 2, '2022-03-12 00:24:08', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:24:08', NULL, '2022-03-11 00:24:08', b'0', 1); +INSERT INTO `system_user_session` VALUES ('8951e01e18774a92b0382a76dfa5aab9', 1, 2, '2022-03-12 00:16:29', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-11 00:16:29', NULL, '2022-03-11 00:16:29', b'0', 1); +INSERT INTO `system_user_session` VALUES ('95e6336e75794bffbd5b6b7617d24c52', 1, 2, '2022-03-08 21:36:53', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:36:53', NULL, '2022-03-07 13:42:52', b'1', 1); INSERT INTO `system_user_session` VALUES ('9c93fd1cd23a43e3854451b781420aed', 1, 2, '2022-02-28 16:27:05', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 16:27:05', NULL, '2022-02-27 16:27:05', b'0', 0); +INSERT INTO `system_user_session` VALUES ('a0cd3f0adcaa4bb3951b24969990f235', 1, 2, '2022-03-08 21:08:36', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:08:36', NULL, '2022-03-07 21:08:36', b'0', 1); INSERT INTO `system_user_session` VALUES ('b1bd95d813024acab14dd171ca887a94', 1, 2, '2022-02-28 10:52:17', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 10:52:17', NULL, '2022-02-27 10:52:17', b'0', 1); +INSERT INTO `system_user_session` VALUES ('db777da72b0b4a528915d80c7b272141', 113, 2, '2022-03-08 21:43:59', 'aoteman', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36', NULL, '2022-03-07 21:43:59', NULL, '2022-03-07 13:45:02', b'1', 122); INSERT INTO `system_user_session` VALUES ('e769a8511c4043a886f68d1d6c39bddd', 104, 2, '2022-02-28 11:10:07', 'test', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-27 11:10:07', NULL, '2022-02-27 11:10:07', b'0', 1); INSERT INTO `system_user_session` VALUES ('ec60e16dfd2546e1a118eef7a42c07ef', 1, 2, '2022-02-24 22:33:28', 'admin', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36', NULL, '2022-02-22 00:44:08', NULL, '2022-02-23 22:33:28', b'0', 1); COMMIT; --- ---------------------------- --- Table structure for tool_codegen_column --- ---------------------------- -DROP TABLE IF EXISTS `tool_codegen_column`; -CREATE TABLE `tool_codegen_column` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `table_id` bigint NOT NULL COMMENT '表编号', - `column_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段名', - `column_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段类型', - `column_comment` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '字段描述', - `nullable` bit(1) NOT NULL COMMENT '是否允许为空', - `primary_key` bit(1) NOT NULL COMMENT '是否主键', - `auto_Increment` char(1) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '是否自增', - `ordinal_position` int NOT NULL COMMENT '排序', - `java_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性类型', - `java_field` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Java 属性名', - `dict_type` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '字典类型', - `example` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '数据示例', - `create_operation` bit(1) NOT NULL COMMENT '是否为 Create 创建操作的字段', - `update_operation` bit(1) NOT NULL COMMENT '是否为 Update 更新操作的字段', - `list_operation` bit(1) NOT NULL COMMENT '是否为 List 查询操作的字段', - `list_operation_condition` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '=' COMMENT 'List 查询操作的条件类型', - `list_operation_result` bit(1) NOT NULL COMMENT '是否为 List 查询操作的返回字段', - `html_type` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '显示类型', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=684 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表字段定义'; - --- ---------------------------- --- Records of tool_codegen_column --- ---------------------------- -BEGIN; -INSERT INTO `tool_codegen_column` VALUES (513, 43, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (514, 43, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (515, 43, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (516, 43, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (517, 43, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (518, 43, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (519, 43, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (520, 43, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (521, 43, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (522, 43, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (523, 43, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 11:11:44', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_column` VALUES (524, 44, 'id', 'bigint', '部门id', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (525, 44, 'name', 'varchar(30)', '部门名称', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (526, 44, 'parent_id', 'bigint', '父部门id', b'0', b'0', '0', 3, 'Long', 'parentId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (527, 44, 'sort', 'int', '显示顺序', b'0', b'0', '0', 4, 'Integer', 'sort', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (528, 44, 'leader_user_id', 'bigint', '负责人', b'1', b'0', '0', 5, 'Long', 'leaderUserId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (529, 44, 'phone', 'varchar(11)', '联系电话', b'1', b'0', '0', 6, 'String', 'phone', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (530, 44, 'email', 'varchar(50)', '邮箱', b'1', b'0', '0', 7, 'String', 'email', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (531, 44, 'status', 'tinyint', '部门状态(0正常 1停用)', b'0', b'0', '0', 8, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (532, 44, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (533, 44, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (534, 44, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (535, 44, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (536, 44, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (537, 44, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 14, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:14:17', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_column` VALUES (538, 45, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (539, 45, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (540, 45, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (541, 45, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (542, 45, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (543, 45, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (544, 45, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (545, 45, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (546, 45, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (547, 45, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (548, 45, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 11:46:05', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_column` VALUES (549, 46, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (550, 46, 'process_definition_id', 'varchar(64)', '流程定义的编号', b'0', b'0', '0', 2, 'String', 'processDefinitionId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (551, 46, 'model_id', 'varchar(64)', '流程模型的编号', b'0', b'0', '0', 3, 'String', 'modelId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (552, 46, 'description', 'varchar(255)', '描述', b'1', b'0', '0', 4, 'String', 'description', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (553, 46, 'form_type', 'tinyint', '表单类型', b'0', b'0', '0', 5, 'Integer', 'formType', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (554, 46, 'form_id', 'bigint', '表单编号', b'1', b'0', '0', 6, 'Long', 'formId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (555, 46, 'form_conf', 'varchar(1000)', '表单的配置', b'1', b'0', '0', 7, 'String', 'formConf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (556, 46, 'form_fields', 'varchar(5000)', '表单项的数组', b'1', b'0', '0', 8, 'String', 'formFields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (557, 46, 'form_custom_create_path', 'varchar(255)', '自定义表单的提交路径', b'1', b'0', '0', 9, 'String', 'formCustomCreatePath', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (558, 46, 'form_custom_view_path', 'varchar(255)', '自定义表单的查看路径', b'1', b'0', '0', 10, 'String', 'formCustomViewPath', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (559, 46, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 11, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (560, 46, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 12, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (561, 46, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 13, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (562, 46, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 14, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (563, 46, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 15, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 12:42:01', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_column` VALUES (564, 47, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 12:42:12', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (565, 47, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 12:42:12', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (566, 47, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 12:42:12', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (567, 47, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (568, 47, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (569, 47, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (570, 47, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (571, 47, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (572, 47, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (573, 47, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (574, 47, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 12:42:13', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_column` VALUES (575, 48, 'id', 'bigint', '自增编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (576, 48, 'user_id', 'bigint', '用户ID', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (577, 48, 'role_id', 'bigint', '角色ID', b'0', b'0', '0', 3, 'Long', 'roleId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (578, 48, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 4, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (579, 48, 'create_time', 'datetime', '创建时间', b'1', b'0', '0', 5, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (580, 48, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 6, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (581, 48, 'update_time', 'datetime', '更新时间', b'1', b'0', '0', 7, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (582, 48, 'deleted', 'bit(1)', '是否删除', b'1', b'0', '0', 8, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (583, 48, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 9, 'Long', 'tenantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 12:43:04', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_column` VALUES (584, 49, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (585, 49, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (586, 49, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (587, 49, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (588, 49, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (589, 49, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (590, 49, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (591, 49, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (592, 49, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (593, 49, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (594, 49, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:01:14', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_column` VALUES (595, 50, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (596, 50, 'name', 'varchar(64)', '表单名', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (597, 50, 'status', 'tinyint', '开启状态', b'0', b'0', '0', 3, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (598, 50, 'conf', 'varchar(1000)', '表单的配置', b'0', b'0', '0', 4, 'String', 'conf', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (599, 50, 'fields', 'varchar(5000)', '表单项的数组', b'0', b'0', '0', 5, 'String', 'fields', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (600, 50, 'remark', 'varchar(255)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (601, 50, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (602, 50, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (603, 50, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (604, 50, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (605, 50, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:01:53', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_column` VALUES (606, 51, 'id', 'bigint', '请假表单主键', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (607, 51, 'user_id', 'bigint', '申请人的用户编号', b'0', b'0', '0', 2, 'Long', 'userId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (608, 51, 'type', 'tinyint', '请假类型', b'0', b'0', '0', 3, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (609, 51, 'reason', 'varchar(200)', '请假原因', b'0', b'0', '0', 4, 'String', 'reason', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (610, 51, 'start_time', 'datetime', '开始时间', b'0', b'0', '0', 5, 'Date', 'startTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (611, 51, 'end_time', 'datetime', '结束时间', b'0', b'0', '0', 6, 'Date', 'endTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (612, 51, 'day', 'tinyint', '请假天数', b'0', b'0', '0', 7, 'Integer', 'day', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (613, 51, 'result', 'tinyint', '请假结果', b'0', b'0', '0', 8, 'Integer', 'result', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (614, 51, 'process_instance_id', 'varchar(64)', '流程实例的编号', b'1', b'0', '0', 9, 'String', 'processInstanceId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (615, 51, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 10, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (616, 51, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 11, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (617, 51, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 12, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (618, 51, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 13, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (619, 51, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 14, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:10:52', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_column` VALUES (620, 52, 'id', 'bigint', '支付订单编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (621, 52, 'merchant_id', 'bigint', '商户编号', b'0', b'0', '0', 2, 'Long', 'merchantId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (622, 52, 'app_id', 'bigint', '应用编号', b'0', b'0', '0', 3, 'Long', 'appId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (623, 52, 'channel_id', 'bigint', '渠道编号', b'1', b'0', '0', 4, 'Long', 'channelId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (624, 52, 'channel_code', 'varchar(32)', '渠道编码', b'1', b'0', '0', 5, 'String', 'channelCode', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (625, 52, 'merchant_order_id', 'varchar(64)', '商户订单编号', b'0', b'0', '0', 6, 'String', 'merchantOrderId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (626, 52, 'subject', 'varchar(32)', '商品标题', b'0', b'0', '0', 7, 'String', 'subject', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (627, 52, 'body', 'varchar(128)', '商品描述', b'0', b'0', '0', 8, 'String', 'body', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (628, 52, 'notify_url', 'varchar(1024)', '异步通知地址', b'0', b'0', '0', 9, 'String', 'notifyUrl', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (629, 52, 'notify_status', 'tinyint', '通知商户支付结果的回调状态', b'0', b'0', '0', 10, 'Integer', 'notifyStatus', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (630, 52, 'amount', 'bigint', '支付金额,单位:分', b'0', b'0', '0', 11, 'Long', 'amount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (631, 52, 'channel_fee_rate', 'double', '渠道手续费,单位:百分比', b'1', b'0', '0', 12, 'Double', 'channelFeeRate', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (632, 52, 'channel_fee_amount', 'bigint', '渠道手续金额,单位:分', b'1', b'0', '0', 13, 'Long', 'channelFeeAmount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (633, 52, 'status', 'tinyint', '支付状态', b'0', b'0', '0', 14, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (634, 52, 'user_ip', 'varchar(50)', '用户 IP', b'0', b'0', '0', 15, 'String', 'userIp', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (635, 52, 'expire_time', 'datetime', '订单失效时间', b'0', b'0', '0', 16, 'Date', 'expireTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (636, 52, 'success_time', 'datetime', '订单支付成功时间', b'1', b'0', '0', 17, 'Date', 'successTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (637, 52, 'notify_time', 'datetime', '订单支付通知时间', b'1', b'0', '0', 18, 'Date', 'notifyTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (638, 52, 'success_extension_id', 'bigint', '支付成功的订单拓展单编号', b'1', b'0', '0', 19, 'Long', 'successExtensionId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (639, 52, 'refund_status', 'tinyint', '退款状态', b'0', b'0', '0', 20, 'Integer', 'refundStatus', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (640, 52, 'refund_times', 'tinyint', '退款次数', b'0', b'0', '0', 21, 'Integer', 'refundTimes', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (641, 52, 'refund_amount', 'bigint', '退款总金额,单位:分', b'0', b'0', '0', 22, 'Long', 'refundAmount', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (642, 52, 'channel_user_id', 'varchar(255)', '渠道用户编号', b'1', b'0', '0', 23, 'String', 'channelUserId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (643, 52, 'channel_order_no', 'varchar(64)', '渠道订单号', b'1', b'0', '0', 24, 'String', 'channelOrderNo', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 13:11:31', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (644, 52, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 25, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (645, 52, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 26, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (646, 52, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 27, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (647, 52, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 28, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (648, 52, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 29, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 13:11:32', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_column` VALUES (649, 53, 'id', 'bigint', '编号', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (650, 53, 'name', 'varchar(100)', '名字', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (651, 53, 'status', 'tinyint', '状态', b'0', b'0', '0', 3, 'Integer', 'status', 'user_type', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (652, 53, 'type', 'tinyint', '类型', b'0', b'0', '0', 4, 'Integer', 'type', '', NULL, b'1', b'1', b'1', '=', b'1', 'select', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (653, 53, 'category', 'tinyint', '分类', b'0', b'0', '0', 5, 'Integer', 'category', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (654, 53, 'remark', 'varchar(500)', '备注', b'1', b'0', '0', 6, 'String', 'remark', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (655, 53, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 7, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (656, 53, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 8, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (657, 53, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 9, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (658, 53, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 10, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (659, 53, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 11, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-02 18:18:17', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_column` VALUES (660, 54, 'id', 'bigint', '部门id', b'0', b'1', '1', 1, 'Long', 'id', '', NULL, b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (661, 54, 'name', 'varchar(30)', '部门名称', b'0', b'0', '0', 2, 'String', 'name', '', NULL, b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (662, 54, 'parent_id', 'bigint', '父部门id', b'0', b'0', '0', 3, 'Long', 'parentId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (663, 54, 'sort', 'int', '显示顺序', b'0', b'0', '0', 4, 'Integer', 'sort', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (664, 54, 'leader_user_id', 'bigint', '负责人', b'1', b'0', '0', 5, 'Long', 'leaderUserId', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (665, 54, 'phone', 'varchar(11)', '联系电话', b'1', b'0', '0', 6, 'String', 'phone', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (666, 54, 'email', 'varchar(50)', '邮箱', b'1', b'0', '0', 7, 'String', 'email', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (667, 54, 'status', 'tinyint', '部门状态(0正常 1停用)', b'0', b'0', '0', 8, 'Integer', 'status', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (668, 54, 'creator', 'varchar(64)', '创建者', b'1', b'0', '0', 9, 'String', 'creator', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (669, 54, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 10, 'Date', 'createTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (670, 54, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 11, 'String', 'updater', '', NULL, b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (671, 54, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 12, 'Date', 'updateTime', '', NULL, b'1', b'1', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (672, 54, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 13, 'Boolean', 'deleted', '', NULL, b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (673, 54, 'tenant_id', 'bigint', '租户编号', b'0', b'0', '0', 14, 'Long', 'tenantId', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-03 00:39:57', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_column` VALUES (674, 55, 'id', 'bigint', '套餐编号', b'0', b'1', '1', 1, 'Long', 'id', '', '1024', b'0', b'1', b'0', '=', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (675, 55, 'name', 'varchar(30)', '套餐名', b'0', b'0', '0', 2, 'String', 'name', '', 'VIP', b'1', b'1', b'1', 'LIKE', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (676, 55, 'status', 'tinyint', '租户状态(0正常 1停用)', b'0', b'0', '0', 3, 'Integer', 'status', 'common_status', '1', b'1', b'1', b'1', '=', b'1', 'radio', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (677, 55, 'remark', 'varchar(256)', '备注', b'1', b'0', '0', 4, 'String', 'remark', '', '好', b'1', b'1', b'1', '=', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (678, 55, 'menu_ids', 'varchar(2048)', '关联的菜单编号', b'0', b'0', '0', 5, 'String', 'menuIds', '', NULL, b'1', b'1', b'0', '=', b'1', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (679, 55, 'creator', 'varchar(64)', '创建者', b'0', b'0', '0', 6, 'String', 'creator', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (680, 55, 'create_time', 'datetime', '创建时间', b'0', b'0', '0', 7, 'Date', 'createTime', '', NULL, b'0', b'0', b'1', 'BETWEEN', b'1', 'datetime', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (681, 55, 'updater', 'varchar(64)', '更新者', b'1', b'0', '0', 8, 'String', 'updater', '', NULL, b'0', b'0', b'0', '=', b'0', 'input', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (682, 55, 'update_time', 'datetime', '更新时间', b'0', b'0', '0', 9, 'Date', 'updateTime', '', NULL, b'0', b'0', b'0', 'BETWEEN', b'0', 'datetime', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -INSERT INTO `tool_codegen_column` VALUES (683, 55, 'deleted', 'bit(1)', '是否删除', b'0', b'0', '0', 10, 'Boolean', 'deleted', '', NULL, b'0', b'0', b'0', '=', b'0', 'radio', '1', '2022-02-20 01:35:26', '1', '2022-02-20 01:43:36', b'0'); -COMMIT; - --- ---------------------------- --- Table structure for tool_codegen_table --- ---------------------------- -DROP TABLE IF EXISTS `tool_codegen_table`; -CREATE TABLE `tool_codegen_table` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `import_type` tinyint NOT NULL DEFAULT '1' COMMENT '导入类型', - `scene` tinyint NOT NULL DEFAULT '1' COMMENT '生成场景', - `table_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表名称', - `table_comment` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '表描述', - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `module_name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '模块名', - `business_name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '业务名', - `class_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '类名称', - `class_comment` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '类描述', - `author` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作者', - `template_type` tinyint NOT NULL DEFAULT '1' COMMENT '模板类型', - `parent_menu_id` bigint DEFAULT NULL COMMENT '父菜单编号', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码生成表定义'; - --- ---------------------------- --- Records of tool_codegen_table --- ---------------------------- -BEGIN; -INSERT INTO `tool_codegen_table` VALUES (43, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 03:46:00', b'1'); -INSERT INTO `tool_codegen_table` VALUES (44, 1, 1, 'system_dept', '部门表', NULL, 'system', 'dept', 'Dept', '部门', '芋艿', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-02 03:45:47', b'1'); -INSERT INTO `tool_codegen_table` VALUES (45, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 04:42:07', b'1'); -INSERT INTO `tool_codegen_table` VALUES (46, 1, 1, 'bpm_process_definition_ext', 'Bpm 流程定义的拓展表\n', NULL, 'bpm', 'processDefinitionExt', 'BpmProcessDefinitionExt', 'Bpm 流程定义的拓展', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 04:42:05', b'1'); -INSERT INTO `tool_codegen_table` VALUES (47, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋艿', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 04:42:24', b'1'); -INSERT INTO `tool_codegen_table` VALUES (48, 1, 1, 'system_user_role', '用户和角色关联表', NULL, 'system', 'role', 'UserRole', '用户和角色关联', '芋艿', 1, NULL, '1', '2022-01-22 17:41:13', '1', '2022-02-02 05:01:42', b'1'); -INSERT INTO `tool_codegen_table` VALUES (49, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'BpmForm', '工作流的', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:01:44', b'1'); -INSERT INTO `tool_codegen_table` VALUES (50, 1, 1, 'bpm_form', '工作流的表单定义', NULL, 'bpm', 'form', 'Form', '工作流的', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:10:46', b'1'); -INSERT INTO `tool_codegen_table` VALUES (51, 1, 1, 'bpm_oa_leave', 'OA 请假申请表', NULL, 'bpm', 'oaLeave', 'BpmOaLeave', 'OA 请假申请', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:09', '1', '2022-02-02 05:11:25', b'1'); -INSERT INTO `tool_codegen_table` VALUES (52, 1, 2, 'pay_order', '支付订单\n', NULL, 'pay', 'order', 'PayOrder', '支付订单\n', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-02 10:17:59', b'1'); -INSERT INTO `tool_codegen_table` VALUES (53, 1, 1, 'tool_test_demo', '字典类型表', NULL, 'tool', 'test', 'TestDemo', '字典类型', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:13', '1', '2022-02-16 20:22:41', b'0'); -INSERT INTO `tool_codegen_table` VALUES (54, 1, 1, 'system_dept', '部门表', NULL, 'system', 'dept', 'SystemDept', '部门', '芋道源码', 1, NULL, '1', '2022-01-22 17:41:11', '1', '2022-02-03 00:39:57', b'0'); -INSERT INTO `tool_codegen_table` VALUES (55, 1, 1, 'system_tenant_package', '租户套餐表', NULL, 'system', 'tenantPackage', 'TenantPackage', '租户套餐', '芋道源码', 1, 1224, '1', '2022-02-19 17:20:20', '1', '2022-02-20 01:43:36', b'0'); -COMMIT; - --- ---------------------------- --- Table structure for tool_test_demo --- ---------------------------- -DROP TABLE IF EXISTS `tool_test_demo`; -CREATE TABLE `tool_test_demo` ( - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', - `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名字', - `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态', - `type` tinyint NOT NULL COMMENT '类型', - `category` tinyint NOT NULL COMMENT '分类', - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', - `creator` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者', - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - `updater` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者', - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='字典类型表'; - --- ---------------------------- --- Records of tool_test_demo --- ---------------------------- -BEGIN; -INSERT INTO `tool_test_demo` VALUES (106, '老五1', 0, 1, 1, '牛逼哈2', '', '2021-02-06 13:25:00', '', '2021-02-06 14:00:37', b'1'); -INSERT INTO `tool_test_demo` VALUES (107, '哈哈哈哈', 1, 0, 1, 'biubiubui', '', '2021-02-06 14:00:54', '1', '2022-02-17 12:42:14', b'0'); -COMMIT; - SET FOREIGN_KEY_CHECKS = 1; diff --git a/yudao-module-infra/pom.xml b/yudao-module-infra/pom.xml index 3072faf..a59032d 100644 --- a/yudao-module-infra/pom.xml +++ b/yudao-module-infra/pom.xml @@ -17,8 +17,9 @@ ${project.artifactId} - infra 包下,我们放基础设施的运维与管理,支撑上层的通用与核心业务。 - 例如说:定时任务的管理、服务器的信息等等 + infra 模块,主要提供两块能力: + 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 + 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 - + diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java index 1b87125..5283cda 100644 --- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/ErrorCodeConstants.java @@ -32,4 +32,18 @@ public interface ErrorCodeConstants { ErrorCode FILE_NOT_EXISTS = new ErrorCode(1001003001, "文件不存在"); ErrorCode FILE_IS_EMPTY = new ErrorCode(1001003002, "文件为空"); + // ========== 代码生成器 1001004000 ========== + ErrorCode CODEGEN_TABLE_EXISTS = new ErrorCode(1003001000, "表定义已经存在"); + ErrorCode CODEGEN_IMPORT_TABLE_NULL = new ErrorCode(1003001001, "导入的表不存在"); + ErrorCode CODEGEN_IMPORT_COLUMNS_NULL = new ErrorCode(1003001002, "导入的字段不存在"); + ErrorCode CODEGEN_PARSE_SQL_ERROR = new ErrorCode(1003001003, "解析 SQL 失败,请检查"); + ErrorCode CODEGEN_TABLE_NOT_EXISTS = new ErrorCode(1003001004, "表定义不存在"); + ErrorCode CODEGEN_COLUMN_NOT_EXISTS = new ErrorCode(1003001005, "字段义不存在"); + ErrorCode CODEGEN_SYNC_COLUMNS_NULL = new ErrorCode(1003001006, "同步的字段不存在"); + ErrorCode CODEGEN_SYNC_NONE_CHANGE = new ErrorCode(1003001007, "同步失败,不存在改变"); + + // ========== 字典类型(测试) 1003000000 ========== + ErrorCode TEST_DEMO_NOT_EXISTS = new ErrorCode(1003000000, "测试示例不存在"); + + } diff --git a/yudao-module-infra/yudao-module-infra-impl/pom.xml b/yudao-module-infra/yudao-module-infra-impl/pom.xml index 97bb1a8..439c70e 100644 --- a/yudao-module-infra/yudao-module-infra-impl/pom.xml +++ b/yudao-module-infra/yudao-module-infra-impl/pom.xml @@ -13,8 +13,9 @@ ${project.artifactId} - infra 模块,我们放基础设施的运维与管理,支撑上层的通用与核心业务。 - 例如说:定时任务的管理、服务器的信息等等 + infra 模块,主要提供两块能力: + 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 + 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 @@ -89,6 +90,11 @@ + org.apache.velocity + velocity-engine-core + + + cn.smallbun.screw screw-core diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java new file mode 100644 index 0000000..9b6b870 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/CodegenController.java @@ -0,0 +1,168 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ZipUtil; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenDetailRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenPreviewRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.SchemaTableRespVO; +import cn.iocoder.yudao.module.infra.convert.codegen.CodegenConvert; +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.dataobject.codegen.SchemaTableDO; +import cn.iocoder.yudao.module.infra.service.codegen.CodegenService; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; + +@Api(tags = "管理后台 - 代码生成器") +@RestController +@RequestMapping("/infra/codegen") +@Validated +public class CodegenController { + + @Resource + private CodegenService codegenService; + + @GetMapping("/db/table/list") + @ApiOperation(value = "获得数据库自带的表定义列表", notes = "会过滤掉已经导入 Codegen 的表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "tableName", value = "表名,模糊匹配", required = true, example = "yudao", dataTypeClass = String.class), + @ApiImplicitParam(name = "tableComment", value = "描述,模糊匹配", required = true, example = "芋道", dataTypeClass = String.class) + }) + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult> getSchemaTableList( + @RequestParam(value = "tableName", required = false) String tableName, + @RequestParam(value = "tableComment", required = false) String tableComment) { + // 获得数据库自带的表定义列表 + List schemaTables = codegenService.getSchemaTableList(tableName, tableComment); + // 移除在 Codegen 中,已经存在的 + Set existsTables = CollectionUtils.convertSet(codegenService.getCodeGenTableList(), CodegenTableDO::getTableName); + schemaTables.removeIf(table -> existsTables.contains(table.getTableName())); + return success(CodegenConvert.INSTANCE.convertList04(schemaTables)); + } + + @GetMapping("/table/page") + @ApiOperation("获得表定义分页") + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult> getCodeGenTablePage(@Valid CodegenTablePageReqVO pageReqVO) { + PageResult pageResult = codegenService.getCodegenTablePage(pageReqVO); + return success(CodegenConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/detail") + @ApiOperation("获得表和字段的明细") + @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:codegen:query')") + public CommonResult getCodegenDetail(@RequestParam("tableId") Long tableId) { + CodegenTableDO table = codegenService.getCodegenTablePage(tableId); + List columns = codegenService.getCodegenColumnListByTableId(tableId); + // 拼装返回 + return success(CodegenConvert.INSTANCE.convert(table, columns)); + } + + @ApiOperation("基于数据库的表结构,创建代码生成器的表和字段定义") + @ApiImplicitParam(name = "tableNames", value = "表名数组", required = true, example = "sys_user", dataTypeClass = List.class) + @PostMapping("/create-list-from-db") + @PreAuthorize("@ss.hasPermission('infra:codegen:create')") + public CommonResult> createCodegenListFromDB(@RequestParam("tableNames") List tableNames) { + return success(codegenService.createCodegenListFromDB(getLoginUserId(), tableNames)); + } + + @ApiOperation("基于 SQL 建表语句,创建代码生成器的表和字段定义") + @ApiImplicitParam(name = "sql", value = "SQL 建表语句", required = true, example = "sql", dataTypeClass = String.class) + @PostMapping("/create-list-from-sql") + @PreAuthorize("@ss.hasPermission('infra:codegen:create')") + public CommonResult createCodegenListFromSQL(@RequestParam("sql") String sql) { + return success(codegenService.createCodegenListFromSQL(getLoginUserId(), sql)); + } + + @ApiOperation("更新数据库的表和字段定义") + @PutMapping("/update") + @PreAuthorize("@ss.hasPermission('infra:codegen:update')") + public CommonResult updateCodegen(@Valid @RequestBody CodegenUpdateReqVO updateReqVO) { + codegenService.updateCodegen(updateReqVO); + return success(true); + } + + @ApiOperation("基于数据库的表结构,同步数据库的表和字段定义") + @PutMapping("/sync-from-db") + @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:codegen:update')") + public CommonResult syncCodegenFromDB(@RequestParam("tableId") Long tableId) { + codegenService.syncCodegenFromDB(tableId); + return success(true); + } + + @ApiOperation("基于 SQL 建表语句,同步数据库的表和字段定义") + @PutMapping("/sync-from-sql") + @ApiImplicitParams({ + @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class), + @ApiImplicitParam(name = "sql", value = "SQL 建表语句", required = true, example = "sql", dataTypeClass = String.class) + }) + @PreAuthorize("@ss.hasPermission('infra:codegen:update')") + public CommonResult syncCodegenFromSQL(@RequestParam("tableId") Long tableId, + @RequestParam("sql") String sql) { + codegenService.syncCodegenFromSQL(tableId, sql); + return success(true); + } + + @ApiOperation("删除数据库的表和字段定义") + @DeleteMapping("/delete") + @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:codegen:delete')") + public CommonResult deleteCodegen(@RequestParam("tableId") Long tableId) { + codegenService.deleteCodegen(tableId); + return success(true); + } + + @ApiOperation("预览生成代码") + @GetMapping("/preview") + @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:codegen:preview')") + public CommonResult> previewCodegen(@RequestParam("tableId") Long tableId) { + Map codes = codegenService.generationCodes(tableId); + return success(CodegenConvert.INSTANCE.convert(codes)); + } + + @ApiOperation("下载生成代码") + @GetMapping("/download") + @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:codegen:download')") + public void downloadCodegen(@RequestParam("tableId") Long tableId, + HttpServletResponse response) throws IOException { + // 生成代码 + Map codes = codegenService.generationCodes(tableId); + // 构建 zip 包 + String[] paths = codes.keySet().toArray(new String[0]); + ByteArrayInputStream[] ins = codes.values().stream().map(IoUtil::toUtf8Stream).toArray(ByteArrayInputStream[]::new); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipUtil.zip(outputStream, paths, ins); + // 输出 + ServletUtils.writeAttachment(response, "codegen.zip", outputStream.toByteArray()); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java new file mode 100644 index 0000000..ad9c868 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo; + +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column.CodegenColumnRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@ApiModel("管理后台 - 代码生成表和字段的明细 Response VO") +@Data +public class CodegenDetailRespVO { + + @ApiModelProperty("表定义") + private CodegenTableRespVO table; + + @ApiModelProperty("字段定义") + private List columns; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java new file mode 100644 index 0000000..662a235 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel(value = "管理后台 - 代码生成预览 Response VO", description ="注意,每个文件都是一个该对象") +@Data +public class CodegenPreviewRespVO { + + @ApiModelProperty(value = "文件路径", required = true, example = "java/cn/iocoder/yudao/adminserver/modules/system/controller/test/SysTestDemoController.java") + private String filePath; + + @ApiModelProperty(value = "代码", required = true, example = "Hello World") + private String code; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java new file mode 100644 index 0000000..617182e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo; + +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column.CodegenColumnBaseVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableBaseVO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.List; + +@ApiModel("管理后台 - 代码生成表和字段的修改 Request VO") +@Data +public class CodegenUpdateReqVO { + + @Valid // 校验内嵌的字段 + @NotNull(message = "表定义不能为空") + private Table table; + + @Valid // 校验内嵌的字段 + @NotNull(message = "字段定义不能为空") + private List columns; + + @ApiModel("更新表定义") + @Data + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + public static class Table extends CodegenTableBaseVO { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + } + + @ApiModel("更新表定义") + @Data + @EqualsAndHashCode(callSuper = true) + @ToString(callSuper = true) + public static class Column extends CodegenColumnBaseVO { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java new file mode 100644 index 0000000..5d440b6 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java @@ -0,0 +1,85 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** +* 代码生成字段定义 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class CodegenColumnBaseVO { + + @ApiModelProperty(value = "表编号", required = true, example = "1") + @NotNull(message = "表编号不能为空") + private Long tableId; + + @ApiModelProperty(value = "字段名", required = true, example = "user_age") + @NotNull(message = "字段名不能为空") + private String columnName; + + @ApiModelProperty(value = "字段类型", required = true, example = "int(11)") + @NotNull(message = "字段类型不能为空") + private String columnType; + + @ApiModelProperty(value = "字段描述", required = true, example = "年龄") + @NotNull(message = "字段描述不能为空") + private String columnComment; + + @ApiModelProperty(value = "是否允许为空", required = true, example = "true") + @NotNull(message = "是否允许为空不能为空") + private Boolean nullable; + + @ApiModelProperty(value = "是否主键", required = true, example = "false") + @NotNull(message = "是否主键不能为空") + private Boolean primaryKey; + + @ApiModelProperty(value = "是否自增", required = true, example = "true") + @NotNull(message = "是否自增不能为空") + private String autoIncrement; + + @ApiModelProperty(value = "排序", required = true, example = "10") + @NotNull(message = "排序不能为空") + private Integer ordinalPosition; + + @ApiModelProperty(value = "Java 属性类型", required = true, example = "userAge") + @NotNull(message = "Java 属性类型不能为空") + private String javaType; + + @ApiModelProperty(value = "Java 属性名", required = true, example = "Integer") + @NotNull(message = "Java 属性名不能为空") + private String javaField; + + @ApiModelProperty(value = "字典类型", example = "sys_gender") + private String dictType; + + @ApiModelProperty(value = "数据示例", example = "1024") + private String example; + + @ApiModelProperty(value = "是否为 Create 创建操作的字段", required = true, example = "true") + @NotNull(message = "是否为 Create 创建操作的字段不能为空") + private Boolean createOperation; + + @ApiModelProperty(value = "是否为 Update 更新操作的字段", required = true, example = "false") + @NotNull(message = "是否为 Update 更新操作的字段不能为空") + private Boolean updateOperation; + + @ApiModelProperty(value = "是否为 List 查询操作的字段", required = true, example = "true") + @NotNull(message = "是否为 List 查询操作的字段不能为空") + private Boolean listOperation; + + @ApiModelProperty(value = "List 查询操作的条件类型", required = true, example = "LIKE", notes = "参见 CodegenColumnListConditionEnum 枚举") + @NotNull(message = "List 查询操作的条件类型不能为空") + private String listOperationCondition; + + @ApiModelProperty(value = "是否为 List 查询操作的返回字段", required = true, example = "true") + @NotNull(message = "是否为 List 查询操作的返回字段不能为空") + private Boolean listOperationResult; + + @ApiModelProperty(value = "显示类型", required = true, example = "input") + @NotNull(message = "显示类型不能为空") + private String htmlType; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java new file mode 100644 index 0000000..36dd3a0 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@ApiModel("管理后台 - 代码生成字段定义 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CodegenColumnRespVO extends CodegenColumnBaseVO { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableBaseVO.java new file mode 100644 index 0000000..c7bb81d --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableBaseVO.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** +* 代码生成 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class CodegenTableBaseVO { + + @ApiModelProperty(value = "导入类型", required = true, example = "1", notes = "参见 CodegenImportTypeEnum 枚举") + @NotNull(message = "导入类型不能为空") + private Integer importType; + + @ApiModelProperty(value = "生成场景", required = true, example = "1", notes = "参见 CodegenSceneEnum 枚举") + @NotNull(message = "导入类型不能为空") + private Integer scene; + + @ApiModelProperty(value = "表名称", required = true, example = "yudao") + @NotNull(message = "表名称不能为空") + private String tableName; + + @ApiModelProperty(value = "表描述", required = true, example = "芋道") + @NotNull(message = "表描述不能为空") + private String tableComment; + + @ApiModelProperty(value = "备注", example = "我是备注") + private String remark; + + @ApiModelProperty(value = "模块名", required = true, example = "system") + @NotNull(message = "模块名不能为空") + private String moduleName; + + @ApiModelProperty(value = "业务名", required = true, example = "codegen") + @NotNull(message = "业务名不能为空") + private String businessName; + + @ApiModelProperty(value = "类名称", required = true, example = "CodegenTable") + @NotNull(message = "类名称不能为空") + private String className; + + @ApiModelProperty(value = "类描述", required = true, example = "代码生成器的表定义") + @NotNull(message = "类描述不能为空") + private String classComment; + + @ApiModelProperty(value = "作者", required = true, example = "芋道源码") + @NotNull(message = "作者不能为空") + private String author; + + @ApiModelProperty(value = "模板类型", required = true, example = "1", notes = "参见 CodegenTemplateTypeEnum 枚举") + @NotNull(message = "模板类型不能为空") + private Integer templateType; + + @ApiModelProperty(value = "父菜单编号", example = "1024") + private Long parentMenuId; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java new file mode 100644 index 0000000..491a7d8 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("管理后台 - 表定义分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CodegenTablePageReqVO extends PageParam { + + @ApiModelProperty(value = "表名称", example = "yudao", notes = "模糊匹配") + private String tableName; + + @ApiModelProperty(value = "表描述", example = "芋道", notes = "模糊匹配") + private String tableComment; + + @ApiModelProperty(value = "开始创建时间", example = "2020-10-24 00:00:00") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date beginCreateTime; + + @ApiModelProperty(value = "结束创建时间", example = "2020-10-24 23:59:59") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private Date endCreateTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java new file mode 100644 index 0000000..ca44370 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.util.Date; + +@ApiModel("管理后台 - 代码生成表定义 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CodegenTableRespVO extends CodegenTableBaseVO { + + @ApiModelProperty(value = "编号", required = true, example = "1") + private Long id; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + + @ApiModelProperty(value = "更新时间", required = true) + private Date updateTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/SchemaTableRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/SchemaTableRespVO.java new file mode 100644 index 0000000..7c4852b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/codegen/vo/table/SchemaTableRespVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@ApiModel("管理后台 - 数据字典的表定义 Response VO") +@Data +public class SchemaTableRespVO { + + @ApiModelProperty(value = "数据库", required = true, example = "yudao") + private String tableSchema; + + @ApiModelProperty(value = "表名称", required = true, example = "yuanma") + private String tableName; + + @ApiModelProperty(value = "表描述", required = true, example = "芋道源码") + private String tableComment; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java new file mode 100644 index 0000000..83d9db7 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/doc/DbDocController.java @@ -0,0 +1,157 @@ +package cn.iocoder.yudao.module.infra.controller.admin.doc; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.IdUtil; +import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; +import cn.smallbun.screw.core.Configuration; +import cn.smallbun.screw.core.engine.EngineConfig; +import cn.smallbun.screw.core.engine.EngineFileType; +import cn.smallbun.screw.core.engine.EngineTemplateType; +import cn.smallbun.screw.core.execute.DocumentationExecute; +import cn.smallbun.screw.core.process.ProcessConfig; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +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 javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.Arrays; + +@Api(tags = "管理后台 - 数据库文档") +@RestController +@RequestMapping("/infra/db-doc") +public class DbDocController { + + @Resource + private DynamicDataSourceProperties dynamicDataSourceProperties; + + private static final String FILE_OUTPUT_DIR = System.getProperty("java.io.tmpdir") + File.separator + + "db-doc"; + private static final String DOC_FILE_NAME = "数据库文档"; + private static final String DOC_VERSION = "1.0.0"; + private static final String DOC_DESCRIPTION = "文档描述"; + + @GetMapping("/export-html") + @ApiOperation("导出 html 格式的数据文档") + @ApiImplicitParam(name = "deleteFile", value = "是否删除在服务器本地生成的数据库文档", example = "true", + dataTypeClass = Boolean.class) + public void exportHtml(@RequestParam(defaultValue = "true") Boolean deleteFile, + HttpServletResponse response) throws IOException { + doExportFile(EngineFileType.HTML, deleteFile, response); + } + + @GetMapping("/export-word") + @ApiOperation("导出 word 格式的数据文档") + @ApiImplicitParam(name = "deleteFile", value = "是否删除在服务器本地生成的数据库文档", example = "true", + dataTypeClass = Boolean.class) + public void exportWord(@RequestParam(defaultValue = "true") Boolean deleteFile, + HttpServletResponse response) throws IOException { + doExportFile(EngineFileType.WORD, deleteFile, response); + } + + @GetMapping("/export-markdown") + @ApiOperation("导出 markdown 格式的数据文档") + @ApiImplicitParam(name = "deleteFile", value = "是否删除在服务器本地生成的数据库文档", example = "true", + dataTypeClass = Boolean.class) + public void exportMarkdown(@RequestParam(defaultValue = "true") Boolean deleteFile, + HttpServletResponse response) throws IOException { + doExportFile(EngineFileType.MD, deleteFile, response); + } + + private void doExportFile(EngineFileType fileOutputType, Boolean deleteFile, + HttpServletResponse response) throws IOException { + String docFileName = DOC_FILE_NAME + "_" + IdUtil.fastSimpleUUID(); + String filePath = doExportFile(fileOutputType, docFileName); + String downloadFileName = DOC_FILE_NAME + fileOutputType.getFileSuffix(); //下载后的文件名 + try { + // 读取,返回 + ServletUtils.writeAttachment(response, downloadFileName, FileUtil.readBytes(filePath)); + } finally { + handleDeleteFile(deleteFile, filePath); + } + } + + /** + * 输出文件,返回文件路径 + * + * @param fileOutputType 文件类型 + * @param fileName 文件名, 无需 ".docx" 等文件后缀 + * @return 生成的文件所在路径 + */ + private String doExportFile(EngineFileType fileOutputType, String fileName) { + try (HikariDataSource dataSource = buildDataSource()) { + // 创建 screw 的配置 + Configuration config = Configuration.builder() + .version(DOC_VERSION) // 版本 + .description(DOC_DESCRIPTION) // 描述 + .dataSource(dataSource) // 数据源 + .engineConfig(buildEngineConfig(fileOutputType, fileName)) // 引擎配置 + .produceConfig(buildProcessConfig()) // 处理配置 + .build(); + + // 执行 screw,生成数据库文档 + new DocumentationExecute(config).execute(); + + return FILE_OUTPUT_DIR + File.separator + fileName + fileOutputType.getFileSuffix(); + } + } + + private void handleDeleteFile(Boolean deleteFile, String filePath) { + if (!deleteFile) { + return; + } + FileUtil.del(filePath); + } + + /** + * 创建数据源 + */ + // TODO 芋艿:screw 暂时不支持 druid,尴尬 + private HikariDataSource buildDataSource() { + // 获得 DataSource 数据源,目前只支持首个 + String primary = dynamicDataSourceProperties.getPrimary(); + DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource().get(primary); + // 创建 HikariConfig 配置类 + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setJdbcUrl(dataSourceProperty.getUrl()); + hikariConfig.setUsername(dataSourceProperty.getUsername()); + hikariConfig.setPassword(dataSourceProperty.getPassword()); + hikariConfig.addDataSourceProperty("useInformationSchema", "true"); // 设置可以获取 tables remarks 信息 + // 创建数据源 + return new HikariDataSource(hikariConfig); + } + + /** + * 创建 screw 的引擎配置 + */ + private static EngineConfig buildEngineConfig(EngineFileType fileOutputType, String docFileName) { + return EngineConfig.builder() + .fileOutputDir(FILE_OUTPUT_DIR) // 生成文件路径 + .openOutputDir(false) // 打开目录 + .fileType(fileOutputType) // 文件类型 + .produceType(EngineTemplateType.velocity) // 文件类型 + .fileName(docFileName) // 自定义文件名称 + .build(); + } + + /** + * 创建 screw 的处理配置,一般可忽略 + * 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置 + */ + private static ProcessConfig buildProcessConfig() { + return ProcessConfig.builder() + .ignoreTablePrefix(Arrays.asList("QRTZ_", "ACT_")) // 忽略表前缀 + .build(); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java new file mode 100755 index 0000000..352cb35 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/TestDemoController.java @@ -0,0 +1,96 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test; + +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.*; +import cn.iocoder.yudao.module.infra.convert.test.TestDemoConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.annotations.*; + +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +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.test.vo.*; +import cn.iocoder.yudao.module.infra.service.test.TestDemoService; + +@Api(tags = "管理后台 - 字典类型") +@RestController +@RequestMapping("/infra/test-demo") +@Validated +public class TestDemoController { + + @Resource + private TestDemoService testDemoService; + + @PostMapping("/create") + @ApiOperation("创建字典类型") + @PreAuthorize("@ss.hasPermission('infra:test-demo:create')") public CommonResult createTestDemo(@Valid @RequestBody TestDemoCreateReqVO createReqVO) { + return success(testDemoService.createTestDemo(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新字典类型") + @PreAuthorize("@ss.hasPermission('infra:test-demo:update')") public CommonResult updateTestDemo(@Valid @RequestBody TestDemoUpdateReqVO updateReqVO) { + testDemoService.updateTestDemo(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除字典类型") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:test-demo:delete')") + public CommonResult deleteTestDemo(@RequestParam("id") Long id) { + testDemoService.deleteTestDemo(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得字典类型") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) + @PreAuthorize("@ss.hasPermission('infra:test-demo:query')") + public CommonResult getTestDemo(@RequestParam("id") Long id) { + TestDemoDO testDemo = testDemoService.getTestDemo(id); + return success(TestDemoConvert.INSTANCE.convert(testDemo)); + } + + @GetMapping("/list") + @ApiOperation("获得字典类型列表") + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) + @PreAuthorize("@ss.hasPermission('infra:test-demo:query')") + public CommonResult> getTestDemoList(@RequestParam("ids") Collection ids) { + List list = testDemoService.getTestDemoList(ids); + return success(TestDemoConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @ApiOperation("获得字典类型分页") + @PreAuthorize("@ss.hasPermission('infra:test-demo:query')") public CommonResult> getTestDemoPage(@Valid TestDemoPageReqVO pageVO) { + PageResult pageResult = testDemoService.getTestDemoPage(pageVO); + return success(TestDemoConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出字典类型 Excel") + @PreAuthorize("@ss.hasPermission('infra:test-demo:export')") @OperateLog(type = EXPORT) + public void exportTestDemoExcel(@Valid TestDemoExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = testDemoService.getTestDemoList(exportReqVO); + // 导出 Excel + List datas = TestDemoConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "字典类型.xls", "数据", TestDemoExcelVO.class, datas); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java new file mode 100755 index 0000000..1f65793 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoBaseVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; + +/** +* 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class TestDemoBaseVO { + + @ApiModelProperty(value = "名字", required = true) + @NotNull(message = "名字不能为空") + private String name; + + @ApiModelProperty(value = "状态", required = true) + @NotNull(message = "状态不能为空") + private Integer status; + + @ApiModelProperty(value = "类型", required = true) + @NotNull(message = "类型不能为空") + private Integer type; + + @ApiModelProperty(value = "分类", required = true) + @NotNull(message = "分类不能为空") + private Integer category; + + @ApiModelProperty(value = "备注") + private String remark; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoCreateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoCreateReqVO.java new file mode 100755 index 0000000..d932daa --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoCreateReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import io.swagger.annotations.*; + +@ApiModel("管理后台 - 字典类型创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TestDemoCreateReqVO extends TestDemoBaseVO { + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExcelVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExcelVO.java new file mode 100755 index 0000000..e87d895 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExcelVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 字典类型 Excel VO + * + * @author 芋道源码 + */ +@Data +public class TestDemoExcelVO { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("名字") + private String name; + + @ExcelProperty("状态") + private Integer status; + + @ExcelProperty("类型") + private Integer type; + + @ExcelProperty("分类") + private Integer category; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("创建时间") + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExportReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExportReqVO.java new file mode 100755 index 0000000..0901168 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoExportReqVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel(value = "管理后台 - 字典类型 Excel 导出 Request VO", description = "参数和 TestDemoPageReqVO 是一致的") +@Data +public class TestDemoExportReqVO { + + @ApiModelProperty(value = "名字") + private String name; + + @ApiModelProperty(value = "状态") + private Integer status; + + @ApiModelProperty(value = "类型") + private Integer type; + + @ApiModelProperty(value = "分类") + private Integer category; + + @ApiModelProperty(value = "备注") + private String remark; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoPageReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoPageReqVO.java new file mode 100755 index 0000000..75cf791 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoPageReqVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@ApiModel("管理后台 - 字典类型分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TestDemoPageReqVO extends PageParam { + + @ApiModelProperty(value = "名字") + private String name; + + @ApiModelProperty(value = "状态") + private Integer status; + + @ApiModelProperty(value = "类型") + private Integer type; + + @ApiModelProperty(value = "分类") + private Integer category; + + @ApiModelProperty(value = "备注") + private String remark; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "开始创建时间") + private Date beginCreateTime; + + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + @ApiModelProperty(value = "结束创建时间") + private Date endCreateTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoRespVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoRespVO.java new file mode 100755 index 0000000..56d6b0a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoRespVO.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +@ApiModel("管理后台 - 字典类型 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TestDemoRespVO extends TestDemoBaseVO { + + @ApiModelProperty(value = "编号", required = true) + private Long id; + + @ApiModelProperty(value = "创建时间", required = true) + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoUpdateReqVO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoUpdateReqVO.java new file mode 100755 index 0000000..59d56b4 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/test/vo/TestDemoUpdateReqVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.infra.controller.admin.test.vo; + +import lombok.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; + +@ApiModel("管理后台 - 字典类型更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TestDemoUpdateReqVO extends TestDemoBaseVO { + + @ApiModelProperty(value = "编号", required = true) + @NotNull(message = "编号不能为空") + private Long id; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/codegen/CodegenConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/codegen/CodegenConvert.java new file mode 100644 index 0000000..9f5d858 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/codegen/CodegenConvert.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.infra.convert.codegen; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenDetailRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenPreviewRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.column.CodegenColumnRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTableRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.SchemaTableRespVO; +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.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaTableDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Mapper +public interface CodegenConvert { + + CodegenConvert INSTANCE = Mappers.getMapper(CodegenConvert.class); + + // ========== InformationSchemaTableDO 和 InformationSchemaColumnDO 相关 ========== + + CodegenTableDO convert(SchemaTableDO bean); + + List convertList(List list); + + CodegenTableRespVO convert(SchemaColumnDO bean); + + // ========== CodegenTableDO 相关 ========== + +// List convertList02(List list); + + CodegenTableRespVO convert(CodegenTableDO bean); + + PageResult convertPage(PageResult page); + + // ========== CodegenTableDO 相关 ========== + + List convertList02(List list); + + CodegenTableDO convert(CodegenUpdateReqVO.Table bean); + + List convertList03(List columns); + + List convertList04(List list); + + // ========== 其它 ========== + + default CodegenDetailRespVO convert(CodegenTableDO table, List columns) { + CodegenDetailRespVO respVO = new CodegenDetailRespVO(); + respVO.setTable(convert(table)); + respVO.setColumns(convertList02(columns)); + return respVO; + } + + default List convert(Map codes) { + return codes.entrySet().stream().map(entry -> { + CodegenPreviewRespVO respVO = new CodegenPreviewRespVO(); + respVO.setFilePath(entry.getKey()); + respVO.setCode(entry.getValue()); + return respVO; + }).collect(Collectors.toList()); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/test/TestDemoConvert.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/test/TestDemoConvert.java new file mode 100755 index 0000000..07a29f5 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/convert/test/TestDemoConvert.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.infra.convert.test; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExcelVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoRespVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 字典类型 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface TestDemoConvert { + + TestDemoConvert INSTANCE = Mappers.getMapper(TestDemoConvert.class); + + TestDemoDO convert(TestDemoCreateReqVO bean); + + TestDemoDO convert(TestDemoUpdateReqVO bean); + + TestDemoRespVO convert(TestDemoDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenColumnDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenColumnDO.java new file mode 100644 index 0000000..355b0f9 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenColumnDO.java @@ -0,0 +1,124 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenColumnHtmlTypeEnum; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenColumnListConditionEnum; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 代码生成 column 字段定义 + * + * @author 芋道源码 + */ +@TableName(value = "infra_codegen_column", autoResultMap = true) +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class CodegenColumnDO extends BaseDO { + + /** + * ID 编号 + */ + @TableId + private Long id; + /** + * 表编号 + * + * 关联 {@link CodegenTableDO#getId()} + */ + private Long tableId; + + // ========== 表相关字段 ========== + + /** + * 字段名 + */ + private String columnName; + /** + * 字段类型 + */ + private String columnType; + /** + * 字段描述 + */ + private String columnComment; + /** + * 是否允许为空 + */ + private Boolean nullable; + /** + * 是否主键 + */ + private Boolean primaryKey; + /** + * 是否自增 + */ + private Boolean autoIncrement; + /** + * 排序 + */ + private Integer ordinalPosition; + + // ========== Java 相关字段 ========== + + /** + * Java 属性类型 + * + * 例如说 String、Boolean 等等 + */ + private String javaType; + /** + * Java 属性名 + */ +// @NotBlank(message = "Java属性不能为空") + private String javaField; + /** + * 字典类型 + * + * 关联 DictTypeDO 的 type 属性 + */ + private String dictType; + /** + * 数据示例,主要用于生成 Swagger 注解的 example 字段 + */ + private String example; + + // ========== CRUD 相关字段 ========== + + /** + * 是否为 Create 创建操作的字段 + */ + private Boolean createOperation; + /** + * 是否为 Update 更新操作的字段 + */ + private Boolean updateOperation; + /** + * 是否为 List 查询操作的字段 + */ + private Boolean listOperation; + /** + * List 查询操作的条件类型 + * + * 枚举 {@link CodegenColumnListConditionEnum} + */ + private String listOperationCondition; + /** + * 是否为 List 查询操作的返回字段 + */ + private Boolean listOperationResult; + + // ========== UI 相关字段 ========== + + /** + * 显示类型 + * + * 枚举 {@link CodegenColumnHtmlTypeEnum} + */ + private String htmlType; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java new file mode 100644 index 0000000..636f9c4 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java @@ -0,0 +1,102 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenSceneEnum; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * 代码生成 table 表定义 + * + * @author 芋道源码 + */ +@TableName(value = "infra_codegen_table", autoResultMap = true) +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = true) +public class CodegenTableDO extends BaseDO { + + /** + * ID 编号 + */ + private Long id; + + /** + * 导入类型 + * + * 枚举 {@link CodegenTemplateTypeEnum} + */ + private Integer importType; + /** + * 生成场景 + * + * 枚举 {@link CodegenSceneEnum} + */ + private Integer scene; + + // ========== 表相关字段 ========== + + /** + * 表名称 + */ + private String tableName; + /** + * 表描述 + */ + private String tableComment; + /** + * 备注 + */ + private String remark; + + // ========== 类相关字段 ========== + + /** + * 模块名,即一级目录 + * + * 例如说,system、infra、tool 等等 + */ + private String moduleName; + /** + * 业务名,即二级目录 + * + * 例如说,user、permission、dict 等等 + */ + private String businessName; + /** + * 类名称(首字母大写) + * + * 例如说,SysUser、SysMenu、SysDictData 等等 + */ + private String className; + /** + * 类描述 + */ + private String classComment; + /** + * 作者 + */ + private String author; + + // ========== 生成相关字段 ========== + + /** + * 模板类型 + * + * 枚举 {@link CodegenTemplateTypeEnum} + */ + private Integer templateType; + + // ========== 菜单相关字段 ========== + + /** + * 父菜单编号 + * + * 关联 MenuDO 的 id 属性 + */ + private Long parentMenuId; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaColumnDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaColumnDO.java new file mode 100644 index 0000000..0d7cd6c --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaColumnDO.java @@ -0,0 +1,54 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.codegen; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; + +/** + * MySQL 数据库中的 column 字段定义 + * + * @author 芋道源码 + */ +@TableName(value = "information_schema.columns", autoResultMap = true) +@Data +@Builder +public class SchemaColumnDO { + + /** + * 表名称 + */ + private String tableName; + /** + * 字段名 + */ + private String columnName; + /** + * 字段类型 + */ + private String columnType; + /** + * 字段描述 + */ + private String columnComment; + /** + * 是否允许为空 + */ + @TableField("case when is_nullable = 'yes' then '1' else '0' end") + private Boolean nullable; + /** + * 是否主键 + */ + @TableField("case when column_key = 'PRI' then '1' else '0' end") + private Boolean primaryKey; + /** + * 是否自增 + */ + @TableField("case when extra = 'auto_increment' then '1' else '0' end") + private Boolean autoIncrement; + /** + * 排序字段 + */ + private Integer ordinalPosition; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaTableDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaTableDO.java new file mode 100644 index 0000000..a70753e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/SchemaTableDO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.codegen; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; + +/** + * MySQL 数据库中的 table 表定义 + * + * @author 芋道源码 + */ +@TableName(value = "information_schema.tables", autoResultMap = true) +@Data +@Builder +public class SchemaTableDO { + + /** + * 数据库 + */ + private String tableSchema; + /** + * 表名称 + */ + private String tableName; + /** + * 表描述 + */ + private String tableComment; + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/test/TestDemoDO.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/test/TestDemoDO.java new file mode 100755 index 0000000..0ea537d --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/test/TestDemoDO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.infra.dal.dataobject.test; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 字典类型 DO + * + * @author 芋道源码 + */ +@TableName("infra_test_demo") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TestDemoDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 名字 + */ + private String name; + /** + * 状态 + */ + private Integer status; + /** + * 类型 + */ + private Integer type; + /** + * 分类 + */ + private Integer category; + /** + * 备注 + */ + private String remark; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java new file mode 100644 index 0000000..95f78db --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenColumnMapper.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenColumnDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface CodegenColumnMapper extends BaseMapperX { + + default List selectListByTableId(Long tableId) { + return selectList(new QueryWrapper().eq("table_id", tableId) + .orderByAsc("ordinal_position")); + } + + default void deleteListByTableId(Long tableId) { + delete(new QueryWrapper().eq("table_id", tableId)); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java new file mode 100644 index 0000000..33846ba --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/CodegenTableMapper.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.codegen; + +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.QueryWrapperX; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.CodegenTableDO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CodegenTableMapper extends BaseMapperX { + + default CodegenTableDO selectByTableName(String tableName) { + return selectOne(new QueryWrapper().eq("table_name", tableName)); + } + + default PageResult selectPage(CodegenTablePageReqVO pageReqVO) { + return selectPage(pageReqVO, new QueryWrapperX() + .likeIfPresent("table_name", pageReqVO.getTableName()) + .likeIfPresent("table_comment", pageReqVO.getTableComment()) + .betweenIfPresent("create_time", pageReqVO.getBeginCreateTime(), pageReqVO.getEndCreateTime())); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapper.java new file mode 100644 index 0000000..b31d4ae --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapper.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaColumnDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SchemaColumnMapper extends BaseMapperX { + + default List selectListByTableName(String tableSchema, String tableName) { + return selectList(new QueryWrapper().eq("table_name", tableName) + .eq("table_schema", tableSchema) + .orderByAsc("ordinal_position")); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaTableMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaTableMapper.java new file mode 100644 index 0000000..050e48f --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaTableMapper.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.codegen; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaTableDO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +@Mapper +public interface SchemaTableMapper extends BaseMapperX { + + default List selectList(Collection tableSchemas, String tableName, String tableComment) { + return selectList(new QueryWrapperX().in("table_schema", tableSchemas) + .likeIfPresent("table_name", tableName) + .likeIfPresent("table_comment", tableComment)); + } + + default SchemaTableDO selectByTableSchemaAndTableName(String tableSchema, String tableName) { + return selectOne(new QueryWrapper().eq("table_schema",tableSchema) + .eq("table_name", tableName)); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java new file mode 100755 index 0000000..1300904 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/test/TestDemoMapper.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.test; + +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.infra.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 字典类型 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface TestDemoMapper extends BaseMapperX { + + default PageResult selectPage(TestDemoPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(TestDemoDO::getName, reqVO.getName()) + .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus()) + .eqIfPresent(TestDemoDO::getType, reqVO.getType()) + .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory()) + .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(TestDemoDO::getId)); + } + + default List selectList(TestDemoExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(TestDemoDO::getName, reqVO.getName()) + .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus()) + .eqIfPresent(TestDemoDO::getType, reqVO.getType()) + .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory()) + .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) + .orderByDesc(TestDemoDO::getId)); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java new file mode 100644 index 0000000..5474ba1 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成器的字段 HTML 展示枚举 + */ +@AllArgsConstructor +@Getter +public enum CodegenColumnHtmlTypeEnum { + + INPUT("input"), // 文本框 + TEXTAREA("textarea"), // 文本域 + SELECT("select"), // 下拉框 + RADIO("radio"), // 单选框 + CHECKBOX("checkbox"), // 复选框 + DATETIME("datetime"), // 日期控件 + UPLOAD_IMAGE("upload_image"), // 上传图片 + UPLOAD_FILE("upload_file"), // 上传文件 + EDITOR("editor"), // 富文本控件 + ; + + /** + * 条件 + */ + private final String type; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnListConditionEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnListConditionEnum.java new file mode 100644 index 0000000..7098700 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnListConditionEnum.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成器的字段过滤条件枚举 + */ +@AllArgsConstructor +@Getter +public enum CodegenColumnListConditionEnum { + + EQ("="), + NE("!="), + GT(">"), + GTE(">="), + LT("<"), + LTE("<="), + LIKE("LIKE"), + BETWEEN("BETWEEN"); + + /** + * 条件 + */ + private final String condition; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenImportTypeEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenImportTypeEnum.java new file mode 100644 index 0000000..9512a87 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenImportTypeEnum.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成的导入类型 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenImportTypeEnum { + + DB(1), // 从 information_schema 的 table 和 columns 表导入 + SQL(2); // 基于建表 SQL 语句导入 + + /** + * 类型 + */ + private final Integer type; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenSceneEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenSceneEnum.java new file mode 100644 index 0000000..f1fdea0 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenSceneEnum.java @@ -0,0 +1,41 @@ +package cn.iocoder.yudao.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import static cn.hutool.core.util.ArrayUtil.*; + +/** + * 代码生成的场景枚举 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenSceneEnum { + + ADMIN(1, "管理后台", "admin", ""), + APP(2, "用户 APP", "app", "App"); + + /** + * 场景 + */ + private final Integer scene; + /** + * 场景名 + */ + private final String name; + /** + * 基础包名 + */ + private final String basePackage; + /** + * Controller 和 VO 类的前缀 + */ + private final String prefixClass; + + public static CodegenSceneEnum valueOf(Integer scene) { + return firstMatch(sceneEnum -> sceneEnum.getScene().equals(scene), values()); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java new file mode 100644 index 0000000..ce2799e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.infra.enums.codegen; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 代码生成模板类型 + * + * @author 芋道源码 + */ +@AllArgsConstructor +@Getter +public enum CodegenTemplateTypeEnum { + + CRUD(1), // 单表(增删改查) + TREE(2), // 树表(增删改查) + ; + + /** + * 类型 + */ + private final Integer type; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/package-info.java new file mode 100644 index 0000000..0749e8e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/enums/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package cn.iocoder.yudao.module.infra.enums; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenConfiguration.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenConfiguration.java new file mode 100644 index 0000000..de49529 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenConfiguration.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.infra.framework.codegen.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties(CodegenProperties.class) +public class CodegenConfiguration { +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java new file mode 100644 index 0000000..a8649dc --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenProperties.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.infra.framework.codegen.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.validation.annotation.Validated; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.Collection; + +@ConfigurationProperties(prefix = "yudao.codegen") +@Validated +@Data +public class CodegenProperties { + + /** + * 生成的 Java 代码的基础包 + */ + @NotNull(message = "Java 代码的基础包不能为空") + private String basePackage; + + /** + * 数据库名数组 + */ + @NotEmpty(message = "数据库不能为空") + private Collection dbSchemas; + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/package-info.java new file mode 100644 index 0000000..cf1d22c --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/package-info.java @@ -0,0 +1,4 @@ +/** + * 代码生成器 + */ +package cn.iocoder.yudao.module.infra.framework.codegen; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java index da6d4aa..b45e7a2 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/package-info.java @@ -1,6 +1,7 @@ /** - * infra 包下,我们放基础设施的运维与管理,支撑上层的通用与核心业务。 - * 例如说:定时任务的管理、服务器的信息等等 + * infra 模块,主要提供两块能力: + * 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 + * 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 * * 1. Controller URL:以 /infra/ 开头,避免和其它 Module 冲突 * 2. DataObject 表名:以 infra_ 开头,方便在数据库中区分 diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenService.java new file mode 100644 index 0000000..c774c88 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenService.java @@ -0,0 +1,124 @@ +package cn.iocoder.yudao.module.infra.service.codegen; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +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.dataobject.codegen.SchemaTableDO; + +import java.util.List; +import java.util.Map; + +/** + * 代码生成 Service 接口 + * + * @author 芋道源码 + */ +public interface CodegenService { + + /** + * 基于 SQL 建表语句,创建代码生成器的表定义 + * + * @param userId 用户编号 + * @param sql SQL 建表语句 + * @return 创建的表定义的编号 + */ + Long createCodegenListFromSQL(Long userId, String sql); + + /** + * 基于数据库的表结构,创建代码生成器的表定义 + * + * @param userId 用户编号 + * @param tableName 表名称 + * @return 创建的表定义的编号 + */ + Long createCodegen(Long userId, String tableName); + + /** + * 基于 {@link #createCodegen(Long, String)} 的批量创建 + * + * @param userId 用户编号 + * @param tableNames 表名称数组 + * @return 创建的表定义的编号数组 + */ + List createCodegenListFromDB(Long userId, List tableNames); + + /** + * 更新数据库的表和字段定义 + * + * @param updateReqVO 更新信息 + */ + void updateCodegen(CodegenUpdateReqVO updateReqVO); + + /** + * 基于数据库的表结构,同步数据库的表和字段定义 + * + * @param tableId 表编号 + */ + void syncCodegenFromDB(Long tableId); + + /** + * 基于 SQL 建表语句,同步数据库的表和字段定义 + * + * @param tableId 表编号 + * @param sql SQL 建表语句 + */ + void syncCodegenFromSQL(Long tableId, String sql); + + /** + * 删除数据库的表和字段定义 + * + * @param tableId 数据编号 + */ + void deleteCodegen(Long tableId); + + /** + * 获得表定义分页 + * + * @param pageReqVO 分页条件 + * @return 表定义分页 + */ + PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO); + + /** + * 获得表定义 + * + * @param id 表编号 + * @return 表定义 + */ + CodegenTableDO getCodegenTablePage(Long id); + + /** + * 获得全部表定义 + * + * @return 表定义数组 + */ + List getCodeGenTableList(); + + /** + * 获得指定表的字段定义数组 + * + * @param tableId 表编号 + * @return 字段定义数组 + */ + List getCodegenColumnListByTableId(Long tableId); + + /** + * 执行指定表的代码生成 + * + * @param tableId 表编号 + * @return 生成结果。key 为文件路径,value 为对应的代码内容 + */ + Map generationCodes(Long tableId); + + /** + * 获得数据库自带的表定义列表 + * + * @param tableName 表名称 + * @param tableComment 表描述 + * @return 表定义列表 + */ + List getSchemaTableList(String tableName, String tableComment); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java new file mode 100644 index 0000000..ec7388b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java @@ -0,0 +1,292 @@ +package cn.iocoder.yudao.module.infra.service.codegen; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.CodegenUpdateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.codegen.vo.table.CodegenTablePageReqVO; +import cn.iocoder.yudao.module.infra.convert.codegen.CodegenConvert; +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.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaTableDO; +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.dal.mysql.codegen.SchemaColumnMapper; +import cn.iocoder.yudao.module.infra.dal.mysql.codegen.SchemaTableMapper; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenImportTypeEnum; +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.codegen.inner.CodegenSQLParser; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import org.apache.commons.collections4.KeyValue; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.*; + +/** + * 代码生成 Service 实现类 + * + * @author 芋道源码 + */ +@Service +public class CodegenServiceImpl implements CodegenService { + + @Resource + private SchemaTableMapper schemaTableMapper; + @Resource + private SchemaColumnMapper schemaColumnMapper; + @Resource + private CodegenTableMapper codegenTableMapper; + @Resource + private CodegenColumnMapper codegenColumnMapper; + + @Resource + private AdminUserApi userApi; + + @Resource + private CodegenBuilder codegenBuilder; + @Resource + private CodegenEngine codegenEngine; + + @Resource + private CodegenProperties codegenProperties; + + private Long createCodegen0(Long userId, CodegenImportTypeEnum importType, + SchemaTableDO schemaTable, List schemaColumns) { + // 校验导入的表和字段非空 + if (schemaTable == null) { + throw exception(CODEGEN_IMPORT_TABLE_NULL); + } + if (CollUtil.isEmpty(schemaColumns)) { + throw exception(CODEGEN_IMPORT_COLUMNS_NULL); + } + // 校验是否已经存在 + if (codegenTableMapper.selectByTableName(schemaTable.getTableName()) != null) { + throw exception(CODEGEN_TABLE_EXISTS); + } + + // 构建 CodegenTableDO 对象,插入到 DB 中 + CodegenTableDO table = codegenBuilder.buildTable(schemaTable); + table.setImportType(importType.getType()); + table.setAuthor(userApi.getUser(userId).getNickname()); + codegenTableMapper.insert(table); + // 构建 CodegenColumnDO 数组,插入到 DB 中 + List columns = codegenBuilder.buildColumns(schemaColumns); + columns.forEach(column -> { + column.setTableId(table.getId()); + codegenColumnMapper.insert(column); // TODO 批量插入 + }); + return table.getId(); + } + + @Override + public Long createCodegenListFromSQL(Long userId, String sql) { + // 从 SQL 中,获得数据库表结构 + SchemaTableDO schemaTable; + List schemaColumns; + try { + KeyValue> result = CodegenSQLParser.parse(sql); + schemaTable = result.getKey(); + schemaColumns = result.getValue(); + } catch (Exception ex) { + throw exception(CODEGEN_PARSE_SQL_ERROR); + } + // 导入 + return this.createCodegen0(userId, CodegenImportTypeEnum.SQL, schemaTable, schemaColumns); + } + + @Override + public Long createCodegen(Long userId, String tableName) { + // 获取当前schema + String tableSchema = codegenProperties.getDbSchemas().iterator().next(); + // 从数据库中,获得数据库表结构 + SchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName); + List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName); + // 导入 + return this.createCodegen0(userId, CodegenImportTypeEnum.DB, schemaTable, schemaColumns); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public List createCodegenListFromDB(Long userId, List tableNames) { + List ids = new ArrayList<>(tableNames.size()); + // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量 + tableNames.forEach(tableName -> ids.add(createCodegen(userId, tableName))); + return ids; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateCodegen(CodegenUpdateReqVO updateReqVO) { + // 校验是否已经存在 + if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + + // 更新 table 表定义 + CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable()); + codegenTableMapper.updateById(updateTableObj); + // 更新 column 字段定义 + List updateColumnObjs = CodegenConvert.INSTANCE.convertList03(updateReqVO.getColumns()); + updateColumnObjs.forEach(updateColumnObj -> codegenColumnMapper.updateById(updateColumnObj)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void syncCodegenFromDB(Long tableId) { + // 校验是否已经存在 + CodegenTableDO table = codegenTableMapper.selectById(tableId); + if (table == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + String tableSchema = codegenProperties.getDbSchemas().iterator().next(); + // 从数据库中,获得数据库表结构 + List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, table.getTableName()); + + // 执行同步 + this.syncCodegen0(tableId, schemaColumns); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void syncCodegenFromSQL(Long tableId, String sql) { + // 校验是否已经存在 + CodegenTableDO table = codegenTableMapper.selectById(tableId); + if (table == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + // 从 SQL 中,获得数据库表结构 + List schemaColumns; + try { + KeyValue> result = CodegenSQLParser.parse(sql); + schemaColumns = result.getValue(); + } catch (Exception ex) { + throw exception(CODEGEN_PARSE_SQL_ERROR); + } + + // 执行同步 + this.syncCodegen0(tableId, schemaColumns); + } + + private void syncCodegen0(Long tableId, List schemaColumns) { + // 校验导入的字段不为空 + if (CollUtil.isEmpty(schemaColumns)) { + throw exception(CODEGEN_SYNC_COLUMNS_NULL); + } + Set schemaColumnNames = CollectionUtils.convertSet(schemaColumns, SchemaColumnDO::getColumnName); + + // 构建 CodegenColumnDO 数组,只同步新增的字段 + List codegenColumns = codegenColumnMapper.selectListByTableId(tableId); + Set codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName); + // 移除已经存在的字段 + schemaColumns.removeIf(column -> codegenColumnNames.contains(column.getColumnName())); + // 计算需要删除的字段 + Set deleteColumnIds = codegenColumns.stream().filter(column -> !schemaColumnNames.contains(column.getColumnName())) + .map(CodegenColumnDO::getId).collect(Collectors.toSet()); + if (CollUtil.isEmpty(schemaColumns) && CollUtil.isEmpty(deleteColumnIds)) { + throw exception(CODEGEN_SYNC_NONE_CHANGE); + } + + // 插入新增的字段 + List columns = codegenBuilder.buildColumns(schemaColumns); + columns.forEach(column -> { + column.setTableId(tableId); + codegenColumnMapper.insert(column); // TODO 批量插入 + }); + // 删除不存在的字段 + if (CollUtil.isNotEmpty(deleteColumnIds)) { + codegenColumnMapper.deleteBatchIds(deleteColumnIds); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteCodegen(Long tableId) { + // 校验是否已经存在 + if (codegenTableMapper.selectById(tableId) == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + + // 删除 table 表定义 + codegenTableMapper.deleteById(tableId); + // 删除 column 字段定义 + codegenColumnMapper.deleteListByTableId(tableId); + } + + @Override + public PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO) { + return codegenTableMapper.selectPage(pageReqVO); + } + + @Override + public CodegenTableDO getCodegenTablePage(Long id) { + return codegenTableMapper.selectById(id); + } + + @Override + public List getCodeGenTableList() { + return codegenTableMapper.selectList(); + } + + @Override + public List getCodegenColumnListByTableId(Long tableId) { + return codegenColumnMapper.selectListByTableId(tableId); + } + + @Override + public Map generationCodes(Long tableId) { + // 校验是否已经存在 + CodegenTableDO table = codegenTableMapper.selectById(tableId); + if (codegenTableMapper.selectById(tableId) == null) { + throw exception(CODEGEN_TABLE_NOT_EXISTS); + } + List columns = codegenColumnMapper.selectListByTableId(tableId); + if (CollUtil.isEmpty(columns)) { + throw exception(CODEGEN_COLUMN_NOT_EXISTS); + } + + // 执行生成 + return codegenEngine.execute(table, columns); + } + + @Override + public List getSchemaTableList(String tableName, String tableComment) { + List tables = schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment); + // TODO 强制移除 Quartz 的表,未来做成可配置 + tables.removeIf(table -> table.getTableName().startsWith("QRTZ_")); + tables.removeIf(table -> table.getTableName().startsWith("ACT_")); + return tables; + } + +// /** +// * 修改保存参数校验 +// * +// * @param genTable 业务信息 +// */ +// @Override +// public void validateEdit(GenTable genTable) { +// if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { +// String options = JSON.toJSONString(genTable.getParams()); +// JSONObject paramsObj = JSONObject.parseObject(options); +// if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) { +// throw new CustomException("树编码字段不能为空"); +// } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) { +// throw new CustomException("树父编码字段不能为空"); +// } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) { +// throw new CustomException("树名称字段不能为空"); +// } +// } +// } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java new file mode 100644 index 0000000..f3dfbcd --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenBuilder.java @@ -0,0 +1,207 @@ +package cn.iocoder.yudao.module.infra.service.codegen.inner; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.infra.convert.codegen.CodegenConvert; +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.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaTableDO; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenColumnHtmlTypeEnum; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenColumnListConditionEnum; +import cn.iocoder.yudao.module.infra.enums.codegen.CodegenTemplateTypeEnum; +import com.google.common.collect.Sets; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.*; + +import static cn.hutool.core.text.CharSequenceUtil.*; + +/** + * 代码生成器的 Builder,负责: + * 1. 将数据库的表 {@link SchemaTableDO} 定义,构建成 {@link CodegenTableDO} + * 2. 将数据库的列 {@link SchemaColumnDO} 构定义,建成 {@link CodegenColumnDO} + */ +@Component +public class CodegenBuilder { + + /** + * 字段名与 {@link CodegenColumnListConditionEnum} 的默认映射 + * 注意,字段的匹配以后缀的方式 + */ + private static final Map columnListOperationConditionMappings = + MapUtil.builder() + .put("name", CodegenColumnListConditionEnum.LIKE) + .put("time", CodegenColumnListConditionEnum.BETWEEN) + .put("date", CodegenColumnListConditionEnum.BETWEEN) + .build(); + + /** + * 字段名与 {@link CodegenColumnHtmlTypeEnum} 的默认映射 + * 注意,字段的匹配以后缀的方式 + */ + private static final Map columnHtmlTypeMappings = + MapUtil.builder() + .put("status", CodegenColumnHtmlTypeEnum.RADIO) + .put("sex", CodegenColumnHtmlTypeEnum.RADIO) + .put("type", CodegenColumnHtmlTypeEnum.SELECT) + .put("image", CodegenColumnHtmlTypeEnum.UPLOAD_IMAGE) + .put("file", CodegenColumnHtmlTypeEnum.UPLOAD_FILE) + .put("content", CodegenColumnHtmlTypeEnum.EDITOR) + .put("time", CodegenColumnHtmlTypeEnum.DATETIME) + .put("date", CodegenColumnHtmlTypeEnum.DATETIME) + .build(); + + /** + * 多租户编号的字段名 + */ + public static final String TENANT_ID_FIELD = "tenant_id"; + /** + * {@link cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO} 的字段 + */ + public static final Set BASE_DO_FIELDS = new HashSet<>(); + /** + * 新增操作,不需要传递的字段 + */ + private static final Set CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); + /** + * 修改操作,不需要传递的字段 + */ + private static final Set UPDATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet(); + /** + * 列表操作的条件,不需要传递的字段 + */ + private static final Set LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); + /** + * 列表操作的结果,不需要返回的字段 + */ + private static final Set LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet(); + + /** + * Java 类型与 MySQL 类型的映射关系 + */ + private static final Map> javaTypeMappings = MapUtil.>builder() + .put(Boolean.class.getSimpleName(), Sets.newHashSet("bit")) + .put(Integer.class.getSimpleName(), Sets.newHashSet("tinyint", "smallint", "mediumint", "int")) + .put(Long.class.getSimpleName(), Collections.singleton("bigint")) + .put(Double.class.getSimpleName(), Sets.newHashSet("float", "double")) + .put(BigDecimal.class.getSimpleName(), Sets.newHashSet("decimal", "numeric")) + .put(String.class.getSimpleName(), Sets.newHashSet("tinytext", "text", "mediumtext", "longtext", // 长文本 + "char", "varchar", "nvarchar", "varchar2")) // 短文本 + .put(Date.class.getSimpleName(), Sets.newHashSet("datetime", "time", "date", "timestamp")) + .put("byte[]", Sets.newHashSet("blob")) + .build(); + + static { + Arrays.stream(ReflectUtil.getFields(BaseDO.class)).forEach(field -> BASE_DO_FIELDS.add(field.getName())); + BASE_DO_FIELDS.add(TENANT_ID_FIELD); + // 处理 OPERATION 相关的字段 + CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + LIST_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + LIST_OPERATION_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是可能需要传递的 + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); + LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的 + } + + public CodegenTableDO buildTable(SchemaTableDO schemaTable) { + CodegenTableDO table = CodegenConvert.INSTANCE.convert(schemaTable); + initTableDefault(table); + return table; + } + + /** + * 初始化 Table 表的默认字段 + * + * @param table 表定义 + */ + private void initTableDefault(CodegenTableDO table) { + // 以 system_dept 举例子。moduleName 为 system、businessName 为 dept、className 为 SystemDept + // 如果不希望 System 前缀,则可以手动在【代码生成 - 修改生成配置 - 基本信息】,将实体类名称改为 Dept 即可 + table.setModuleName(StrUtil.subBefore(table.getTableName(), + '_', false)); // 第一个 _ 前缀的前面,作为 module 名字 + table.setBusinessName(toCamelCase(subAfter(table.getTableName(), + '_', false))); // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰 + table.setClassName(upperFirst(toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写 + table.setClassComment(subBefore(table.getTableComment(), // 去除结尾的表,作为类描述 + '表', true)); + table.setAuthor("芋艿"); // TODO 稍后改成创建人 + table.setTemplateType(CodegenTemplateTypeEnum.CRUD.getType()); + } + + public List buildColumns(List schemaColumns) { + List columns = CodegenConvert.INSTANCE.convertList(schemaColumns); + columns.forEach(this::initColumnDefault); + return columns; + } + + /** + * 初始化 Column 列的默认字段 + * + * @param column 列定义 + */ + private void initColumnDefault(CodegenColumnDO column) { + // 处理 Java 相关的字段的默认值 + processColumnJava(column); + // 处理 CRUD 相关的字段的默认值 + processColumnOperation(column); + // 处理 UI 相关的字段的默认值 + processColumnUI(column); + } + + private void processColumnJava(CodegenColumnDO column) { + // 处理 javaField 字段 + column.setJavaField(toCamelCase(column.getColumnName())); + // 处理 dictType 字段,暂无 + // 处理 javaType 字段 + String dbType = StrUtil.subBefore(column.getColumnType(), '(', false); + javaTypeMappings.entrySet().stream() + .filter(entry -> entry.getValue().contains(dbType)) + .findFirst().ifPresent(entry -> column.setJavaType(entry.getKey())); + if (column.getJavaType() == null) { + throw new IllegalStateException(String.format("column(%s) 的数据库类型(%s) 找不到匹配的 Java 类型", + column.getColumnName(), column.getColumnType())); + } + } + + private void processColumnOperation(CodegenColumnDO column) { + // 处理 createOperation 字段 + column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) + && !column.getPrimaryKey()); // 对于主键,创建时无需传递 + // 处理 updateOperation 字段 + column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) + || column.getPrimaryKey()); // 对于主键,更新时需要传递 + // 处理 listOperation 字段 + column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) + && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递 + // 处理 listOperationCondition 字段 + columnListOperationConditionMappings.entrySet().stream() + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) + .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition())); + if (column.getListOperationCondition() == null) { + column.setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition()); + } + // 处理 listOperationResult 字段 + column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField())); + } + + private void processColumnUI(CodegenColumnDO column) { + // 基于后缀进行匹配 + columnHtmlTypeMappings.entrySet().stream() + .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) + .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType())); + // 如果是 Boolean 类型时,设置为 radio 类型. + // 其它类型,因为字段名可以相对保障,所以不进行处理。例如说 date 对应 datetime 类型. + if (Boolean.class.getSimpleName().equals(column.getJavaType())) { + column.setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType()); + } + // 兜底,设置默认为 input 类型 + if (column.getHtmlType() == null) { + column.setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType()); + } + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java new file mode 100644 index 0000000..023648f --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -0,0 +1,225 @@ +package cn.iocoder.yudao.module.infra.service.codegen.inner; + +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.template.TemplateConfig; +import cn.hutool.extra.template.TemplateEngine; +import cn.hutool.extra.template.engine.velocity.VelocityEngine; +import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; +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.CodegenSceneEnum; +import cn.iocoder.yudao.module.infra.framework.codegen.config.CodegenProperties; +import com.google.common.collect.Maps; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static cn.hutool.core.map.MapUtil.getStr; +import static cn.hutool.core.text.CharSequenceUtil.*; + +/** + * 代码生成的引擎,用于具体生成代码 + * 目前基于 {@link org.apache.velocity.app.Velocity} 模板引擎实现 + * + * 考虑到 Java 模板引擎的框架非常多,Freemarker、Velocity、Thymeleaf 等等,所以我们采用 hutool 封装的 {@link cn.hutool.extra.template.Template} 抽象 + * + * @author 芋道源码 + */ +@Component +public class CodegenEngine { + + /** + * 模板配置 + * key:模板在 resources 的地址 + * value:生成的路径 + */ + private static final Map TEMPLATES = MapUtil.builder(new LinkedHashMap<>()) // 有序 + // Java module-impl Main + .put(javaTemplatePath("controller/vo/baseVO"), javaModuleImplVOFilePath("BaseVO")) + .put(javaTemplatePath("controller/vo/createReqVO"), javaModuleImplVOFilePath("CreateReqVO")) + .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO")) + .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO")) + .put(javaTemplatePath("controller/vo/updateReqVO"), javaModuleImplVOFilePath("UpdateReqVO")) + .put(javaTemplatePath("controller/vo/exportReqVO"), javaModuleImplVOFilePath("ExportReqVO")) + .put(javaTemplatePath("controller/vo/excelVO"), javaModuleImplVOFilePath("ExcelVO")) + .put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath()) + .put(javaTemplatePath("convert/convert"), + javaModuleImplMainFilePath("convert/${table.businessName}/${table.className}Convert")) + .put(javaTemplatePath("dal/do"), + javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO")) + .put(javaTemplatePath("dal/mapper"), + javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper")) + .put(javaTemplatePath("service/serviceImpl"), + javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl")) + .put(javaTemplatePath("service/service"), + javaModuleImplMainFilePath("service/${table.businessName}/${table.className}Service")) + // Java module-impl Test + .put(javaTemplatePath("test/serviceTest"), + javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest")) + // Java module-api Main + .put(javaTemplatePath("enums/errorcode"), javaModuleApiMainFilePath("enums/ErrorCodeConstants_手动操作")) + // Vue + .put(vueTemplatePath("views/index.vue"), + vueFilePath("views/${table.moduleName}/${classNameVar}/index.vue")) + .put(vueTemplatePath("api/api.js"), + vueFilePath("api/${table.moduleName}/${classNameVar}.js")) + // SQL + .put("codegen/sql/sql.vm", "sql/sql.sql") + .put("codegen/sql/h2.vm", "sql/h2.sql") + .build(); + + @Resource + private CodegenProperties codegenProperties; + + /** + * 模板引擎,由 hutool 实现 + */ + private final TemplateEngine templateEngine; + /** + * 全局通用变量映射 + */ + private final Map globalBindingMap = new HashMap<>(); + + public CodegenEngine() { + // 初始化 TemplateEngine 属性 + TemplateConfig config = new TemplateConfig(); + config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH); + this.templateEngine = new VelocityEngine(config); + } + + @PostConstruct + private void initGlobalBindingMap() { + // 全局配置 + globalBindingMap.put("basePackage", codegenProperties.getBasePackage()); + globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage() + + '.' + "framework"); // 用于后续获取测试类的 package 地址 + // 全局 Java Bean + globalBindingMap.put("CommonResultClassName", CommonResult.class.getName()); + globalBindingMap.put("PageResultClassName", PageResult.class.getName()); + // VO 类,独有字段 + globalBindingMap.put("PageParamClassName", PageParam.class.getName()); + globalBindingMap.put("DictFormatClassName", DictFormat.class.getName()); + // DO 类,独有字段 + globalBindingMap.put("BaseDOClassName", BaseDO.class.getName()); + globalBindingMap.put("baseDOFields", CodegenBuilder.BASE_DO_FIELDS); + globalBindingMap.put("QueryWrapperClassName", LambdaQueryWrapperX.class.getName()); + globalBindingMap.put("BaseMapperClassName", BaseMapperX.class.getName()); + // Util 工具类 + globalBindingMap.put("ServiceExceptionUtilClassName", ServiceExceptionUtil.class.getName()); + globalBindingMap.put("DateUtilsClassName", DateUtils.class.getName()); + globalBindingMap.put("ExcelUtilsClassName", ExcelUtils.class.getName()); + globalBindingMap.put("ObjectUtilsClassName", ObjectUtils.class.getName()); + globalBindingMap.put("DictConvertClassName", DictConvert.class.getName()); + globalBindingMap.put("OperateLogClassName", OperateLog.class.getName()); + globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName()); + } + + public Map execute(CodegenTableDO table, List columns) { + // 创建 bindingMap + Map bindingMap = new HashMap<>(globalBindingMap); + bindingMap.put("table", table); + bindingMap.put("columns", columns); + bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段 + bindingMap.put("sceneEnum", CodegenSceneEnum.valueOf(table.getScene())); + + // className 相关 + // 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀 + String simpleClassName = removePrefix(table.getClassName(), upperFirst(table.getModuleName())); + bindingMap.put("simpleClassName", simpleClassName); + bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type + bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType,用于变量 + // 将 DictType 转换成 dict-type + String simpleClassNameStrikeCase = toSymbolCase(simpleClassName, '-'); + bindingMap.put("simpleClassName_strikeCase", simpleClassNameStrikeCase); + // permission 前缀 + bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase); + + // 执行生成 + final Map result = Maps.newLinkedHashMapWithExpectedSize(TEMPLATES.size()); // 有序 + TEMPLATES.forEach((vmPath, filePath) -> { + filePath = formatFilePath(filePath, bindingMap); + String content = templateEngine.getTemplate(vmPath).render(bindingMap); + result.put(filePath, content); + }); + return result; + } + + private String formatFilePath(String filePath, Map bindingMap) { + filePath = StrUtil.replace(filePath, "${basePackage}", + getStr(bindingMap, "basePackage").replaceAll("\\.", "/")); + filePath = StrUtil.replace(filePath, "${classNameVar}", + getStr(bindingMap, "classNameVar")); + // sceneEnum 包含的字段 + CodegenSceneEnum sceneEnum = (CodegenSceneEnum) bindingMap.get("sceneEnum"); + filePath = StrUtil.replace(filePath, "${sceneEnum.prefixClass}", sceneEnum.getPrefixClass()); + filePath = StrUtil.replace(filePath, "${sceneEnum.basePackage}", sceneEnum.getBasePackage()); + // table 包含的字段 + CodegenTableDO table = (CodegenTableDO) bindingMap.get("table"); + filePath = StrUtil.replace(filePath, "${table.moduleName}", table.getModuleName()); + filePath = StrUtil.replace(filePath, "${table.businessName}", table.getBusinessName()); + filePath = StrUtil.replace(filePath, "${table.className}", table.getClassName()); + return filePath; + } + + private static String javaTemplatePath(String path) { + return "codegen/java/" + path + ".vm"; + } + + private static String javaModuleImplVOFilePath(String path) { + return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" + + "vo/${sceneEnum.prefixClass}${table.className}" + path, "impl", "main"); + } + + private static String javaModuleImplControllerFilePath() { + return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" + + "${sceneEnum.prefixClass}${table.className}Controller", "impl", "main"); + } + + private static String javaModuleImplMainFilePath(String path) { + return javaModuleFilePath(path, "impl", "main"); + } + + private static String javaModuleApiMainFilePath(String path) { + return javaModuleFilePath(path, "api", "main"); + } + + private static String javaModuleImplTestFilePath(String path) { + return javaModuleFilePath(path, "impl", "test"); + } + + private static String javaModuleFilePath(String path, String module, String src) { + return "yudao-module-${table.moduleName}/" + // 顶级模块 + "yudao-module-${table.moduleName}-" + module + "/" + // 子模块 + "src/" + src + "/java/${basePackage}/module/${table.moduleName}/" + path + ".java"; + } + + private static String vueTemplatePath(String path) { + return "codegen/vue/" + path + ".vm"; + } + + private static String vueFilePath(String path) { + return "yudao-ui-${sceneEnum.basePackage}/" + // 顶级目录 + "src/" + path; + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenSQLParser.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenSQLParser.java new file mode 100644 index 0000000..016a1db --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenSQLParser.java @@ -0,0 +1,117 @@ +package cn.iocoder.yudao.module.infra.service.codegen.inner; + +import cn.hutool.core.collection.CollUtil; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.infra.dal.dataobject.codegen.SchemaTableDO; +import com.alibaba.druid.DbType; +import com.alibaba.druid.sql.ast.expr.SQLCharExpr; +import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; +import com.alibaba.druid.sql.ast.statement.SQLTableElement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.repository.SchemaRepository; +import org.apache.commons.collections4.KeyValue; +import org.apache.commons.collections4.keyvalue.DefaultKeyValue; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import static com.alibaba.druid.sql.SQLUtils.normalize; + +/** + * SQL 解析器,将创建表的 SQL,解析成 {@link SchemaTableDO} 和 {@link SchemaColumnDO} 对象, + * 后续可以基于它们,生成代码~ + * + * @author 芋道源码 + */ +public class CodegenSQLParser { + + /** + * 解析建表 SQL 语句,返回 {@link SchemaTableDO} 和 {@link SchemaColumnDO} 对象 + * + * @param sql 建表 SQL 语句 + * @return 解析结果 + */ + public static KeyValue> parse(String sql) { + // 解析 SQL 成 Statement + SQLCreateTableStatement statement = parseCreateSQL(sql); + // 解析 Table 表 + SchemaTableDO table = parseTable(statement); + // 解析 Column 字段 + List columns = parseColumns(statement); + columns.forEach(column -> column.setTableName(table.getTableName())); + // 返回 + return new DefaultKeyValue<>(table, columns); + } + + /** + * 使用 Druid 工具,建表 SQL 语句 + * + * @param sql 建表 SQL 语句 + * @return 创建 Statement + */ + private static SQLCreateTableStatement parseCreateSQL(String sql) { + // 解析 SQL + SchemaRepository repository = new SchemaRepository(DbType.mysql); + repository.console(sql); + // 获得该表对应的 MySqlCreateTableStatement 对象 + String tableName = CollUtil.getFirst(repository.getDefaultSchema().getObjects()).getName(); + return (MySqlCreateTableStatement) repository.findTable(tableName).getStatement(); + } + + private static SchemaTableDO parseTable(SQLCreateTableStatement statement) { + return SchemaTableDO.builder() + .tableName(statement.getTableSource().getTableName(true)) + .tableComment(getCommentText(statement)) + .build(); + } + + private static String getCommentText(SQLCreateTableStatement statement) { + if (statement == null || statement.getComment() == null) { + return ""; + } + return ((SQLCharExpr) statement.getComment()).getText(); + } + + private static List parseColumns(SQLCreateTableStatement statement) { + List columns = new ArrayList<>(); + statement.getTableElementList().forEach(element -> parseColumn(columns, element)); + return columns; + } + + private static void parseColumn(List columns, SQLTableElement element) { + // 处理主键 + if (element instanceof SQLPrimaryKey) { + parsePrimaryKey(columns, (SQLPrimaryKey) element); + return; + } + // 处理字段定义 + if (element instanceof SQLColumnDefinition) { + parseColumnDefinition(columns, (SQLColumnDefinition) element); + } + } + + private static void parsePrimaryKey(List columns, SQLPrimaryKey primaryKey) { + String columnName = normalize(primaryKey.getColumns().get(0).toString()); // 暂时不考虑联合主键 + // 匹配 columns 主键字段,设置为 primary + columns.stream().filter(column -> column.getColumnName().equals(columnName)) + .forEach(column -> column.setPrimaryKey(true)); + } + + private static void parseColumnDefinition(List columns, SQLColumnDefinition definition) { + String text = definition.toString().toUpperCase(); + columns.add(SchemaColumnDO.builder() + .columnName(normalize(definition.getColumnName())) + .columnType(definition.getDataType().toString()) + .columnComment(Objects.isNull(definition.getComment()) ? "" + : normalize(definition.getComment().toString())) + .nullable(!text.contains(" NOT NULL")) + .primaryKey(false) + .autoIncrement(text.contains("AUTO_INCREMENT")) + .ordinalPosition(columns.size() + 1) + .build()); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java new file mode 100755 index 0000000..8b33f28 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoService.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.infra.service.test; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO; + +import javax.validation.Valid; +import java.util.Collection; +import java.util.List; + +/** + * 字典类型 Service 接口 + * + * @author 芋道源码 + */ +public interface TestDemoService { + + /** + * 创建字典类型 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTestDemo(@Valid TestDemoCreateReqVO createReqVO); + + /** + * 更新字典类型 + * + * @param updateReqVO 更新信息 + */ + void updateTestDemo(@Valid TestDemoUpdateReqVO updateReqVO); + + /** + * 删除字典类型 + * + * @param id 编号 + */ + void deleteTestDemo(Long id); + + /** + * 获得字典类型 + * + * @param id 编号 + * @return 字典类型 + */ + TestDemoDO getTestDemo(Long id); + + /** + * 获得字典类型列表 + * + * @param ids 编号 + * @return 字典类型列表 + */ + List getTestDemoList(Collection ids); + + /** + * 获得字典类型分页 + * + * @param pageReqVO 分页查询 + * @return 字典类型分页 + */ + PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO); + + /** + * 获得字典类型列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 字典类型列表 + */ + List getTestDemoList(TestDemoExportReqVO exportReqVO); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java new file mode 100755 index 0000000..2358531 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImpl.java @@ -0,0 +1,85 @@ +package cn.iocoder.yudao.module.infra.service.test; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO; +import cn.iocoder.yudao.module.infra.convert.test.TestDemoConvert; +import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO; +import cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.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.infra.enums.ErrorCodeConstants.TEST_DEMO_NOT_EXISTS; + +/** + * 字典类型 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class TestDemoServiceImpl implements TestDemoService { + + @Resource + private TestDemoMapper testDemoMapper; + + @Override + public Long createTestDemo(TestDemoCreateReqVO createReqVO) { + // 插入 + TestDemoDO testDemo = TestDemoConvert.INSTANCE.convert(createReqVO); + testDemoMapper.insert(testDemo); + // 返回 + return testDemo.getId(); + } + + @Override + public void updateTestDemo(TestDemoUpdateReqVO updateReqVO) { + // 校验存在 + this.validateTestDemoExists(updateReqVO.getId()); + // 更新 + TestDemoDO updateObj = TestDemoConvert.INSTANCE.convert(updateReqVO); + testDemoMapper.updateById(updateObj); + } + + @Override + public void deleteTestDemo(Long id) { + // 校验存在 + this.validateTestDemoExists(id); + // 删除 + testDemoMapper.deleteById(id); + } + + private void validateTestDemoExists(Long id) { + if (testDemoMapper.selectById(id) == null) { + throw exception(TEST_DEMO_NOT_EXISTS); + } + } + + @Override + public TestDemoDO getTestDemo(Long id) { + return testDemoMapper.selectById(id); + } + + @Override + public List getTestDemoList(Collection ids) { + return testDemoMapper.selectBatchIds(ids); + } + + @Override + public PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO) { + return testDemoMapper.selectPage(pageReqVO); + } + + @Override + public List getTestDemoList(TestDemoExportReqVO exportReqVO) { + return testDemoMapper.selectList(exportReqVO); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/controller.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/controller.vm new file mode 100644 index 0000000..5b05467 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/controller.vm @@ -0,0 +1,109 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +#if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end + +import io.swagger.annotations.*; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import ${PageResultClassName}; +import ${CommonResultClassName}; +import static ${CommonResultClassName}.success; + +import ${ExcelUtilsClassName}; + +import ${OperateLogClassName}; +import static ${OperateTypeEnumClassName}.*; + +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; +import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; + +@Api(tags = "${sceneEnum.name} - ${table.classComment}") +@RestController +##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 +@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") +@Validated +public class ${sceneEnum.prefixClass}${table.className}Controller { + + @Resource + private ${table.className}Service ${classNameVar}Service; + + @PostMapping("/create") + @ApiOperation("创建${table.classComment}") +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')")#end + + public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO) { + return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); + } + + @PutMapping("/update") + @ApiOperation("更新${table.classComment}") +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')")#end + + public CommonResult update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO) { + ${classNameVar}Service.update${simpleClassName}(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @ApiOperation("删除${table.classComment}") + @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = ${primaryColumn.javaType}.class) +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')")#end + + public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${classNameVar}Service.delete${simpleClassName}(id); + return success(true); + } + + @GetMapping("/get") + @ApiOperation("获得${table.classComment}") + @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = ${primaryColumn.javaType}.class) +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")#end + + public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); + return success(${table.className}Convert.INSTANCE.convert(${classNameVar})); + } + + @GetMapping("/list") + @ApiOperation("获得${table.classComment}列表") + @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")#end + + public CommonResult> get${simpleClassName}List(@RequestParam("ids") Collection<${primaryColumn.javaType}> ids) { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(ids); + return success(${table.className}Convert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @ApiOperation("获得${table.classComment}分页") +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")#end + + public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageVO) { + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageVO); + return success(${table.className}Convert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @ApiOperation("导出${table.classComment} Excel") +#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')")#end + + @OperateLog(type = EXPORT) + public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(exportReqVO); + // 导出 Excel + List<${sceneEnum.prefixClass}${table.className}ExcelVO> datas = ${table.className}Convert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}ExcelVO.class, datas); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/_column.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/_column.vm new file mode 100644 index 0000000..2e22225 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/_column.vm @@ -0,0 +1,13 @@ +## 提供给 baseVO、createVO、updateVO 生成字段 + @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) +#if (!${column.nullable})## 判断 @NotEmpty 和 @NotNull 注解 +#if (${field.fieldType} == 'String') + @NotEmpty(message = "${column.columnComment}不能为空") +#else + @NotNull(message = "${column.columnComment}不能为空") +#end +#end +#if (${column.javaType} == "Date")## 时间类型 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +#end + private ${column.javaType} ${column.javaField}; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm new file mode 100644 index 0000000..3036c16 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm @@ -0,0 +1,31 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult} + && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end + +/** +* ${table.classComment} Base VO,提供给添加、修改、详细的子 VO 使用 +* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 +*/ +@Data +public class ${sceneEnum.prefixClass}${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult})##通用操作 + #parse("codegen/java/controller/vo/_column.vm") + +#end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm new file mode 100644 index 0000000..ca13efa --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm @@ -0,0 +1,30 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}) + && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end + +@ApiModel("${sceneEnum.name} - ${table.classComment}创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${sceneEnum.prefixClass}${table.className}CreateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}))##不是通用字段 + #parse("codegen/java/controller/vo/_column.vm") + +#end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm new file mode 100644 index 0000000..2ce6f28 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm @@ -0,0 +1,37 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +import com.alibaba.excel.annotation.ExcelProperty; +#foreach ($column in $columns) +#if ("$!column.dictType" != "")## 有设置数据字典 +import ${DictFormatClassName}; +import ${DictConvertClassName}; + +#break +#end +#end + +/** + * ${table.classComment} Excel VO + * + * @author ${table.author} + */ +@Data +public class ${sceneEnum.prefixClass}${table.className}ExcelVO { + +#foreach ($column in $columns) + #if (${column.listOperationResult})##返回字段 + #if ("$!column.dictType" != "")##处理枚举值 + @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) + @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + #else + @ExcelProperty("${column.columnComment}") + #end + private ${column.javaType} ${column.javaField}; + + #end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm new file mode 100644 index 0000000..10ab97a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm @@ -0,0 +1,42 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import ${PageParamClassName}; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) +#if (${column.javaType} == "Date")## 时间类型 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +#end + @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@ApiModel(value = "${sceneEnum.name} - ${table.classComment} Excel 导出 Request VO", description = "参数和 ${table.className}PageReqVO 是一致的") +@Data +public class ${sceneEnum.prefixClass}${table.className}ExportReqVO { + +#foreach ($column in $columns) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + #columnTpl('begin', '开始') + + #columnTpl('end', '结束') +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm new file mode 100644 index 0000000..5f5952c --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm @@ -0,0 +1,44 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import ${PageParamClassName}; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) +#if (${column.javaType} == "Date")## 时间类型 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) +#end + @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@ApiModel("${sceneEnum.name} - ${table.classComment}分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${sceneEnum.prefixClass}${table.className}PageReqVO extends PageParam { + +#foreach ($column in $columns) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + #columnTpl('begin', '开始') + + #columnTpl('end', '结束') +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/respVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/respVO.vm new file mode 100644 index 0000000..4034b6f --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/respVO.vm @@ -0,0 +1,20 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; + +@ApiModel("${sceneEnum.name} - ${table.classComment} Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${sceneEnum.prefixClass}${table.className}RespVO extends ${sceneEnum.prefixClass}${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.listOperationResult} && (!${column.createOperation} || !${column.updateOperation}))##不是通用字段 + @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType} ${column.javaField}; + +#end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm new file mode 100644 index 0000000..58ce1f7 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm @@ -0,0 +1,30 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.annotations.*; +import javax.validation.constraints.*; +## 处理 Date 字段的引入 +#foreach ($column in $columns) +#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}) + && ${column.javaType} == "Date"))## 时间类型 +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end + +@ApiModel("${sceneEnum.name} - ${table.classComment}更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${sceneEnum.prefixClass}${table.className}UpdateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO { + +#foreach ($column in $columns) +#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))##不是通用字段 + #parse("codegen/java/controller/vo/_column.vm") + +#end +#end +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/convert/convert.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/convert/convert.vm new file mode 100644 index 0000000..6176e0f --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/convert/convert.vm @@ -0,0 +1,34 @@ +package ${basePackage}.module.${table.moduleName}.convert.${table.businessName}; + +import java.util.*; + +import ${PageResultClassName}; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; + +/** + * ${table.classComment} Convert + * + * @author ${table.author} + */ +@Mapper +public interface ${table.className}Convert { + + ${table.className}Convert INSTANCE = Mappers.getMapper(${table.className}Convert.class); + + ${table.className}DO convert(${sceneEnum.prefixClass}${table.className}CreateReqVO bean); + + ${table.className}DO convert(${sceneEnum.prefixClass}${table.className}UpdateReqVO bean); + + ${sceneEnum.prefixClass}${table.className}RespVO convert(${table.className}DO bean); + + List<${sceneEnum.prefixClass}${table.className}RespVO> convertList(List<${table.className}DO> list); + + PageResult<${sceneEnum.prefixClass}${table.className}RespVO> convertPage(PageResult<${table.className}DO> page); + + List<${sceneEnum.prefixClass}${table.className}ExcelVO> convertList02(List<${table.className}DO> list); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/do.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/do.vm new file mode 100644 index 0000000..687a090 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/do.vm @@ -0,0 +1,38 @@ +package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import ${BaseDOClassName}; + +/** + * ${table.classComment} DO + * + * @author ${table.author} + */ +@TableName("${table.tableName}") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ${table.className}DO extends BaseDO { + +#foreach ($column in $columns) +#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 + /** + * ${column.columnComment} + #if ("$!column.dictType" != "")##处理枚举值 + * + * 枚举 {@link TODO ${column.dictType} 对应的类} + #end + */ + #if (${column.primaryKey})##处理主键 + @TableId#if (${column.javaType} == 'String')type = IdType.INPUT)#end + #end + private ${column.javaType} ${column.javaField}; +#end +#end + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/mapper.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/mapper.vm new file mode 100644 index 0000000..cab43ef --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/dal/mapper.vm @@ -0,0 +1,66 @@ +package ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}; + +import java.util.*; + +import ${PageResultClassName}; +import ${QueryWrapperClassName}; +import ${BaseMapperClassName}; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import org.apache.ibatis.annotations.Mapper; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; + +## 字段模板 +#macro(listCondition) +#foreach ($column in $columns) +#if (${column.listOperation}) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperationCondition} == "=")##情况一,= 的时候 + .eqIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 + .neIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">")##情况三,> 的时候 + .gtIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 + .geIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<")##情况五,< 的时候 + .ltIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 + .leIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 + .likeIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 + .betweenIfPresent(${table.className}DO::get${JavaField}, reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}()) +#end +#end +#end +#end +/** + * ${table.classComment} Mapper + * + * @author ${table.author} + */ +@Mapper +public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { + + default PageResult<${table.className}DO> selectPage(${sceneEnum.prefixClass}${table.className}PageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 + + } + + default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 + + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/enums/errorcode.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/enums/errorcode.vm new file mode 100644 index 0000000..a9a6daf --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/enums/errorcode.vm @@ -0,0 +1,3 @@ +// TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! +// ========== ${table.classComment} TODO 补充编号 ========== +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/service.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/service.vm new file mode 100644 index 0000000..b8c6376 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/service.vm @@ -0,0 +1,70 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import java.util.*; +import javax.validation.*; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${PageResultClassName}; + +/** + * ${table.classComment} Service 接口 + * + * @author ${table.author} + */ +public interface ${table.className}Service { + + /** + * 创建${table.classComment} + * + * @param createReqVO 创建信息 + * @return 编号 + */ + ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO); + + /** + * 更新${table.classComment} + * + * @param updateReqVO 更新信息 + */ + void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO); + + /** + * 删除${table.classComment} + * + * @param id 编号 + */ + void delete${simpleClassName}(${primaryColumn.javaType} id); + + /** + * 获得${table.classComment} + * + * @param id 编号 + * @return ${table.classComment} + */ + ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); + + /** + * 获得${table.classComment}列表 + * + * @param ids 编号 + * @return ${table.classComment}列表 + */ + List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids); + + /** + * 获得${table.classComment}分页 + * + * @param pageReqVO 分页查询 + * @return ${table.classComment}分页 + */ + PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO); + + /** + * 获得${table.classComment}列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return ${table.classComment}列表 + */ + List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO); + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/serviceImpl.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/serviceImpl.vm new file mode 100644 index 0000000..85dfa0a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/service/serviceImpl.vm @@ -0,0 +1,82 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${PageResultClassName}; + +import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; + +import static ${ServiceExceptionUtilClassName}.exception; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; + +/** + * ${table.classComment} Service 实现类 + * + * @author ${table.author} + */ +@Service +@Validated +public class ${table.className}ServiceImpl implements ${table.className}Service { + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; + + @Override + public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO) { + // 插入 + ${table.className}DO ${classNameVar} = ${table.className}Convert.INSTANCE.convert(createReqVO); + ${classNameVar}Mapper.insert(${classNameVar}); + // 返回 + return ${classNameVar}.getId(); + } + + @Override + public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO) { + // 校验存在 + this.validate${simpleClassName}Exists(updateReqVO.getId()); + // 更新 + ${table.className}DO updateObj = ${table.className}Convert.INSTANCE.convert(updateReqVO); + ${classNameVar}Mapper.updateById(updateObj); + } + + @Override + public void delete${simpleClassName}(${primaryColumn.javaType} id) { + // 校验存在 + this.validate${simpleClassName}Exists(id); + // 删除 + ${classNameVar}Mapper.deleteById(id); + } + + private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { + if (${classNameVar}Mapper.selectById(id) == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + } + + @Override + public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { + return ${classNameVar}Mapper.selectById(id); + } + + @Override + public List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids) { + return ${classNameVar}Mapper.selectBatchIds(ids); + } + + @Override + public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + return ${classNameVar}Mapper.selectPage(pageReqVO); + } + + @Override + public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO) { + return ${classNameVar}Mapper.selectList(exportReqVO); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/test/serviceTest.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/test/serviceTest.vm new file mode 100644 index 0000000..53b7429 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/java/test/serviceTest.vm @@ -0,0 +1,161 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import ${basePackage}.module.${table.moduleName}.test.BaseDbUnitTest;## 每个项目,默认有一个基础 DB Test 基类 + +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +import ${PageResultClassName}; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; + +import static cn.hutool.core.util.RandomUtil.*; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; +import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; +import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; +import static ${ObjectUtilsClassName}.*; +import static ${DateUtilsClassName}.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +## 字段模板 +#macro(getPageCondition $VO) + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + o.set$JavaField(null); + #end + #end + }); + ${classNameVar}Mapper.insert(db${simpleClassName}); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + // 测试 ${column.javaField} 不匹配 + ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); + #end + #end + // 准备参数 + ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}(); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 + reqVO.setBegin${JavaField}(null); + reqVO.setEnd${JavaField}(null); + #else + reqVO.set$JavaField(null); + #end + #end + #end +#end +/** +* {@link ${table.className}ServiceImpl} 的单元测试类 +* +* @author ${table.author} +*/ +@Import(${table.className}ServiceImpl.class) +public class ${table.className}ServiceImplTest extends BaseDbUnitTest { + + @Resource + private ${table.className}ServiceImpl ${classNameVar}Service; + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; + + @Test + public void testCreate${simpleClassName}_success() { + // 准备参数 + ${sceneEnum.prefixClass}${table.className}CreateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}CreateReqVO.class); + + // 调用 + ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO); + // 断言 + assertNotNull(${classNameVar}Id); + // 校验记录的属性是否正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); + assertPojoEquals(reqVO, ${classNameVar}); + } + + @Test + public void testUpdate${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class, o -> { + o.setId(db${simpleClassName}.getId()); // 设置更新的 ID + }); + + // 调用 + ${classNameVar}Service.update${simpleClassName}(reqVO); + // 校验是否更新正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, ${classNameVar}); + } + + @Test + public void testUpdate${simpleClassName}_notExists() { + // 准备参数 + ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + + @Test + public void testDelete${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${primaryColumn.javaType} id = db${simpleClassName}.getId(); + + // 调用 + ${classNameVar}Service.delete${simpleClassName}(id); + // 校验数据不存在了 + assertNull(${classNameVar}Mapper.selectById(id)); + } + + @Test + public void testDelete${simpleClassName}_notExists() { + // 准备参数 + ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + + @Test // TODO 请修改 null 为需要的值 + public void testGet${simpleClassName}Page() { + #getPageCondition("PageReqVO") + + // 调用 + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); + } + + @Test // TODO 请修改 null 为需要的值 + public void testGet${simpleClassName}List() { + #getPageCondition("ExportReqVO") + + // 调用 + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(db${simpleClassName}, list.get(0)); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/h2.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/h2.vm new file mode 100644 index 0000000..842605a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/h2.vm @@ -0,0 +1,24 @@ +-- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/create_tables.sql 文件里 +CREATE TABLE IF NOT EXISTS "${table.tableName}" ( +#foreach ($column in $columns) + #if (${column.primaryKey})##处理主键 + "${column.javaField}"#if (${column.javaType} == 'String') ${column.columnType} NOT NULL#else ${column.columnType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end, + #else + #if (${column.columnName} == 'create_time') + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + #elseif (${column.columnName} == 'update_time') + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater') + "${column.columnName}" ${column.columnType} DEFAULT '', + #elseif (${column.columnName} == 'deleted') + "deleted" bit NOT NULL DEFAULT FALSE, + #else + "${column.columnName}" ${column.columnType}#if (${column.nullable} == false) NOT NULL#end, + #end + #end +#end + PRIMARY KEY ("${primaryColumn.columnName}") +) COMMENT '${table.tableComment}'; + +-- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "${table.tableName}"; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/sql.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/sql.vm new file mode 100644 index 0000000..25d76ae --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/sql/sql.vm @@ -0,0 +1,27 @@ +-- 菜单 SQL +INSERT INTO `system_menu`( + `name`, `permission`, `menu_type`, `sort`, `parent_id`, + `path`, `icon`, `component`, `status` +) +VALUES ( + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${classNameVar}/index', 0 +); + +-- 按钮父菜单ID +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) +#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) +#foreach ($functionName in $functionNames) +#set ($index = $foreach.count - 1) +INSERT INTO `system_menu`( + `name`, `permission`, `menu_type`, `sort`, `parent_id`, + `path`, `icon`, `component`, `status` +) +VALUES ( + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, + '', '', '', 0 +); +#end diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/api/api.js.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/api/api.js.vm new file mode 100644 index 0000000..5e9da32 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/api/api.js.vm @@ -0,0 +1,55 @@ +import request from '@/utils/request' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// 创建${table.classComment} +export function create${simpleClassName}(data) { + return request({ + url: '${baseURL}/create', + method: 'post', + data: data + }) +} + +// 更新${table.classComment} +export function update${simpleClassName}(data) { + return request({ + url: '${baseURL}/update', + method: 'put', + data: data + }) +} + +// 删除${table.classComment} +export function delete${simpleClassName}(id) { + return request({ + url: '${baseURL}/delete?id=' + id, + method: 'delete' + }) +} + +// 获得${table.classComment} +export function get${simpleClassName}(id) { + return request({ + url: '${baseURL}/get?id=' + id, + method: 'get' + }) +} + +// 获得${table.classComment}分页 +export function get${simpleClassName}Page(query) { + return request({ + url: '${baseURL}/page', + method: 'get', + params: query + }) +} + +// 导出${table.classComment} Excel +export function export${simpleClassName}Excel(query) { + return request({ + url: '${baseURL}/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm new file mode 100644 index 0000000..53ed842 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/main/resources/codegen/vue/views/index.vue.vm @@ -0,0 +1,399 @@ + + + diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java new file mode 100644 index 0000000..49dab6f --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/codegen/SchemaColumnMapperTest.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.infra.dal.mysql.codegen; + +import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; +import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest; +import org.junit.jupiter.api.Test; + +import javax.annotation.Resource; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class SchemaColumnMapperTest extends BaseDbUnitTest { + + @Resource + private SchemaColumnMapper schemaColumnMapper; + + @Test + public void testSelectListByTableName() { + List columns = schemaColumnMapper.selectListByTableName("", "inf_config"); + assertTrue(columns.size() > 0); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/package-info.java new file mode 100644 index 0000000..c6016c2 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/mysql/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package cn.iocoder.yudao.module.infra.dal.mysql; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/package-info.java new file mode 100644 index 0000000..0054e06 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/dal/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package cn.iocoder.yudao.module.infra.dal; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java new file mode 100644 index 0000000..9842b3d --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenEngineTest.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.infra.service.codegen; + +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.service.codegen.inner.CodegenEngine; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; +import org.junit.jupiter.api.Test; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +public class CodegenEngineTest extends BaseDbUnitTest { + + @Resource + private CodegenTableMapper codegenTableMapper; + @Resource + private CodegenColumnMapper codegenColumnMapper; + + @Resource + private CodegenEngine codegenEngine; + + @Test + public void testExecute() { + CodegenTableDO table = codegenTableMapper.selectById(20); + List columns = codegenColumnMapper.selectListByTableId(table.getId()); + Map result = codegenEngine.execute(table, columns); + result.forEach((s, s2) -> System.out.println(s2)); +// System.out.println(result.get("vue/views/system/test/index.vue")); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenSQLParserTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenSQLParserTest.java new file mode 100644 index 0000000..c6bdffc --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenSQLParserTest.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.infra.service.codegen; + +import cn.iocoder.yudao.module.infra.service.codegen.inner.CodegenSQLParser; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; +import org.junit.jupiter.api.Test; + +public class CodegenSQLParserTest extends BaseDbUnitTest { + + @Test + public void testParse() { + String sql = "CREATE TABLE `infra_test_demo` (\n" + + " `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',\n" + + " `name` varchar(100) NOT NULL DEFAULT '' COMMENT '名字',\n" + + " `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',\n" + + " `type` tinyint(4) NOT NULL COMMENT '类型',\n" + + " `category` tinyint(4) NOT NULL COMMENT '分类',\n" + + " `remark` varchar(500) DEFAULT NULL COMMENT '备注',\n" + + " `create_by` varchar(64) DEFAULT '' COMMENT '创建者',\n" + + " `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" + + " `update_by` varchar(64) DEFAULT '' COMMENT '更新者',\n" + + " `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n" + + " `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',\n" + + " PRIMARY KEY (`id`) USING BTREE\n" + + ") ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';"; + CodegenSQLParser.parse(sql); + // TODO 芋艿:后续完善断言 + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java new file mode 100644 index 0000000..22a53d7 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImplTest.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.infra.service.codegen; + +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; +import org.junit.jupiter.api.Test; + +import javax.annotation.Resource; + +class CodegenServiceImplTest extends BaseDbUnitTest { + + @Resource + private CodegenServiceImpl codegenService; + + @Test + public void tetCreateCodegenTable() { + codegenService.createCodegen(0L, "infra_test_demo"); +// infraCodegenService.createCodegenTable("infra_codegen_table"); +// infraCodegenService.createCodegen("infra_codegen_column"); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/package-info.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/package-info.java new file mode 100644 index 0000000..f6a3c5a --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/service/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package cn.iocoder.yudao.module.infra.service; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisIntegrationTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisIntegrationTest.java new file mode 100644 index 0000000..803e412 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseDbAndRedisIntegrationTest.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.infra.test; + +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 com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; +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; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class) +@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 +public class BaseDbAndRedisIntegrationTest { + + @Import({ + // DB 配置类 + DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类 + YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 + DataSourceAutoConfiguration.class, // Spring DB 自动配置类 + DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 + // MyBatis 配置类 + YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 + MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 + + // Redis 配置类 + RedisAutoConfiguration.class, // Spring Redis 自动配置类 + YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 + RedissonAutoConfiguration.class, // Redisson 自动高配置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseRedisIntegrationTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseRedisIntegrationTest.java new file mode 100644 index 0000000..04dd8d6 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test-integration/java/cn/iocoder/yudao/module/infra/test/BaseRedisIntegrationTest.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.infra.test; + +import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; +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; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class) +@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 +public class BaseRedisIntegrationTest { + + @Import({ + // Redis 配置类 + RedisAutoConfiguration.class, // Spring Redis 自动配置类 + YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 + RedissonAutoConfiguration.class, // Redisson 自动高配置类 + }) + public static class Application { + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java new file mode 100755 index 0000000..c5852a2 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/java/cn/iocoder/yudao/module/infra/service/test/TestDemoServiceImplTest.java @@ -0,0 +1,187 @@ +package cn.iocoder.yudao.module.infra.service.test; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoExportReqVO; +import cn.iocoder.yudao.module.infra.dal.dataobject.test.TestDemoDO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoCreateReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoPageReqVO; +import cn.iocoder.yudao.module.infra.controller.admin.test.vo.TestDemoUpdateReqVO; +import cn.iocoder.yudao.module.infra.dal.mysql.test.TestDemoMapper; +import cn.iocoder.yudao.module.infra.test.BaseDbUnitTest; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; + +import javax.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.randomLongId; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; +import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.TEST_DEMO_NOT_EXISTS; +import static org.junit.jupiter.api.Assertions.*; + +/** + * {@link TestDemoServiceImpl} 的单元测试类 + * + * @author 芋道源码 + */ +@Import(TestDemoServiceImpl.class) +public class TestDemoServiceImplTest extends BaseDbUnitTest { + + @Resource + private TestDemoServiceImpl testDemoService; + + @Resource + private TestDemoMapper testDemoMapper; + + @Test + public void testCreateTestDemo_success() { + // 准备参数 + TestDemoCreateReqVO reqVO = randomPojo(TestDemoCreateReqVO.class); + + // 调用 + Long testDemoId = testDemoService.createTestDemo(reqVO); + // 断言 + assertNotNull(testDemoId); + // 校验记录的属性是否正确 + TestDemoDO testDemo = testDemoMapper.selectById(testDemoId); + assertPojoEquals(reqVO, testDemo); + } + + @Test + public void testUpdateTestDemo_success() { + // mock 数据 + TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class); + testDemoMapper.insert(dbTestDemo);// @Sql: 先插入出一条存在的数据 + // 准备参数 + TestDemoUpdateReqVO reqVO = randomPojo(TestDemoUpdateReqVO.class, o -> { + o.setId(dbTestDemo.getId()); // 设置更新的 ID + }); + + // 调用 + testDemoService.updateTestDemo(reqVO); + // 校验是否更新正确 + TestDemoDO testDemo = testDemoMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, testDemo); + } + + @Test + public void testUpdateTestDemo_notExists() { + // 准备参数 + TestDemoUpdateReqVO reqVO = randomPojo(TestDemoUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> testDemoService.updateTestDemo(reqVO), TEST_DEMO_NOT_EXISTS); + } + + @Test + public void testDeleteTestDemo_success() { + // mock 数据 + TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class); + testDemoMapper.insert(dbTestDemo);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbTestDemo.getId(); + + // 调用 + testDemoService.deleteTestDemo(id); + // 校验数据不存在了 + assertNull(testDemoMapper.selectById(id)); + } + + @Test + public void testDeleteTestDemo_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> testDemoService.deleteTestDemo(id), TEST_DEMO_NOT_EXISTS); + } + + @Test + public void testGetTestDemoPage() { + // mock 数据 + TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class, o -> { // 等会查询到 + o.setName("芋道源码"); + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); + o.setType(1); + o.setCategory(2); + o.setRemark("哈哈哈"); + o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); + }); + testDemoMapper.insert(dbTestDemo); + // 测试 name 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setName("不匹配"))); + // 测试 status 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); + // 测试 type 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setType(2))); + // 测试 category 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCategory(1))); + // 测试 remark 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setRemark("呵呵呵"))); + // 测试 createTime 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12)))); + // 准备参数 + TestDemoPageReqVO reqVO = new TestDemoPageReqVO(); + reqVO.setName("芋道"); + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); + reqVO.setType(1); + reqVO.setCategory(2); + reqVO.setRemark("哈哈哈"); + reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10)); + reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12)); + + // 调用 + PageResult pageResult = testDemoService.getTestDemoPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbTestDemo, pageResult.getList().get(0)); + } + + @Test + public void testGetTestDemoList() { + // mock 数据 + TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class, o -> { // 等会查询到 + o.setName("芋道源码"); + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); + o.setType(1); + o.setCategory(2); + o.setRemark("哈哈哈"); + o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); + }); + testDemoMapper.insert(dbTestDemo); + // 测试 name 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setName("不匹配"))); + // 测试 status 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); + // 测试 type 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setType(2))); + // 测试 category 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCategory(1))); + // 测试 remark 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setRemark("呵呵呵"))); + // 测试 createTime 不匹配 + testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12)))); + // 准备参数 + TestDemoExportReqVO reqVO = new TestDemoExportReqVO(); + reqVO.setName("芋道"); + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); + reqVO.setType(1); + reqVO.setCategory(2); + reqVO.setRemark("哈哈哈"); + reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10)); + reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12)); + + // 调用 + List list = testDemoService.getTestDemoList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbTestDemo, list.get(0)); + } + +} diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql index b416d4d..071c77b 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/clean.sql @@ -7,3 +7,4 @@ DELETE FROM "infra_api_error_log"; DELETE FROM "infra_api_access_log"; DELETE FROM "infra_file"; DELETE FROM "infra_api_error_log"; +DELETE FROM "infra_test_demo"; diff --git a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql index c203865..80213b4 100644 --- a/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql +++ b/yudao-module-infra/yudao-module-infra-impl/src/test/resources/sql/create_tables.sql @@ -135,3 +135,18 @@ CREATE TABLE IF NOT EXISTS "infra_api_error_log" ( "tenant_id" bigint not null default '0', primary key ("id") ) COMMENT '系统异常日志'; + +CREATE TABLE IF NOT EXISTS "infra_test_demo" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar(100) NOT NULL, + "status" tinyint NOT NULL, + "type" tinyint NOT NULL, + "category" tinyint NOT NULL, + "remark" varchar(500), + "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 '字典类型表'; diff --git a/yudao-module-tool/pom.xml b/yudao-module-tool/pom.xml deleted file mode 100644 index c85f484..0000000 --- a/yudao-module-tool/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - cn.iocoder.boot - yudao - ${revision} - - 4.0.0 - - yudao-module-tool-api - yudao-module-tool-impl - - yudao-module-tool - pom - - ${project.artifactId} - - tool 模块,我们放研发工具,提升研发效率与质量。 - 例如说:代码生成器、接口文档等等 - - - diff --git a/yudao-module-tool/yudao-module-tool-api/pom.xml b/yudao-module-tool/yudao-module-tool-api/pom.xml deleted file mode 100644 index 8256e25..0000000 --- a/yudao-module-tool/yudao-module-tool-api/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - cn.iocoder.boot - yudao-module-tool - ${revision} - - 4.0.0 - yudao-module-tool-api - jar - - ${project.artifactId} - - tool 模块 API,暴露给其它模块调用 - - - - - cn.iocoder.boot - yudao-common - - - - diff --git a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java deleted file mode 100644 index 77a92cf..0000000 --- a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/api/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Tool API 包,定义暴露给其它模块的 API - */ -package cn.iocoder.yudao.module.tool.api; diff --git a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java deleted file mode 100644 index f22e39f..0000000 --- a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/DictTypeConstants.java +++ /dev/null @@ -1,12 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums; - -/** - * Tool 字典类型的枚举类 - * - * @author 芋道源码 - */ -public interface DictTypeConstants { - - String TEST_DEMO_TYPE = "tool_test_demo_type"; - -} diff --git a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java deleted file mode 100644 index 2d62edc..0000000 --- a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/enums/ErrorCodeConstants.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums; - -import cn.iocoder.yudao.framework.common.exception.ErrorCode; - -/** - * Tool 错误码枚举类 - * - * tool 系统,使用 1-003-000-000 段 - */ -public interface ErrorCodeConstants { - - // ========== 字典类型(测试) 1003000000 ========== - ErrorCode TEST_DEMO_NOT_EXISTS = new ErrorCode(1003000000, "测试示例不存在"); - - // ========== 代码生成器 1003001000 ========== - ErrorCode CODEGEN_TABLE_EXISTS = new ErrorCode(1003001000, "表定义已经存在"); - ErrorCode CODEGEN_IMPORT_TABLE_NULL = new ErrorCode(1003001001, "导入的表不存在"); - ErrorCode CODEGEN_IMPORT_COLUMNS_NULL = new ErrorCode(1003001002, "导入的字段不存在"); - ErrorCode CODEGEN_PARSE_SQL_ERROR = new ErrorCode(1003001003, "解析 SQL 失败,请检查"); - ErrorCode CODEGEN_TABLE_NOT_EXISTS = new ErrorCode(1003001004, "表定义不存在"); - ErrorCode CODEGEN_COLUMN_NOT_EXISTS = new ErrorCode(1003001005, "字段义不存在"); - ErrorCode CODEGEN_SYNC_COLUMNS_NULL = new ErrorCode(1003001006, "同步的字段不存在"); - ErrorCode CODEGEN_SYNC_NONE_CHANGE = new ErrorCode(1003001007, "同步失败,不存在改变"); - -} diff --git a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java b/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java deleted file mode 100644 index 1b5a668..0000000 --- a/yudao-module-tool/yudao-module-tool-api/src/main/java/cn/iocoder/yudao/module/tool/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.tool; diff --git a/yudao-module-tool/yudao-module-tool-impl/pom.xml b/yudao-module-tool/yudao-module-tool-impl/pom.xml deleted file mode 100644 index 0f28e2f..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/pom.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - yudao-module-tool - cn.iocoder.boot - ${revision} - - 4.0.0 - yudao-module-tool-impl - jar - - ${project.artifactId} - - tool 模块,我们放研发工具,提升研发效率与质量。 - 例如说:代码生成器、接口文档等等 - - - - - cn.iocoder.boot - yudao-module-tool-api - ${revision} - - - cn.iocoder.boot - yudao-module-system-api - ${revision} - - - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-operatelog - - - cn.iocoder.boot - yudao-spring-boot-starter-biz-dict - - - - - cn.iocoder.boot - yudao-spring-boot-starter-security - - - - - cn.iocoder.boot - yudao-spring-boot-starter-mybatis - - - - - cn.iocoder.boot - yudao-spring-boot-starter-test - test - - - - - cn.iocoder.boot - yudao-spring-boot-starter-excel - - - - org.apache.velocity - velocity-engine-core - - - - cn.smallbun.screw - screw-core - - - - diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java deleted file mode 100644 index c7d6e93..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/CodegenController.java +++ /dev/null @@ -1,169 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen; - -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.ZipUtil; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenDetailRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenPreviewRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.SchemaTableRespVO; -import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; -import cn.iocoder.yudao.module.tool.service.codegen.CodegenService; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; - -@Api(tags = "管理后台 - 代码生成器") -@RestController -@RequestMapping("/tool/codegen") -@Validated -public class CodegenController { - - @Resource - private CodegenService codegenService; - - @GetMapping("/db/table/list") - @ApiOperation(value = "获得数据库自带的表定义列表", notes = "会过滤掉已经导入 Codegen 的表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "tableName", value = "表名,模糊匹配", required = true, example = "yudao", dataTypeClass = String.class), - @ApiImplicitParam(name = "tableComment", value = "描述,模糊匹配", required = true, example = "芋道", dataTypeClass = String.class) - }) - @PreAuthorize("@ss.hasPermission('tool:codegen:query')") - public CommonResult> getSchemaTableList( - @RequestParam(value = "tableName", required = false) String tableName, - @RequestParam(value = "tableComment", required = false) String tableComment) { - // 获得数据库自带的表定义列表 - List schemaTables = codegenService.getSchemaTableList(tableName, tableComment); - // 移除在 Codegen 中,已经存在的 - Set existsTables = CollectionUtils.convertSet(codegenService.getCodeGenTableList(), CodegenTableDO::getTableName); - schemaTables.removeIf(table -> existsTables.contains(table.getTableName())); - return success(CodegenConvert.INSTANCE.convertList04(schemaTables)); - } - - @GetMapping("/table/page") - @ApiOperation("获得表定义分页") - @PreAuthorize("@ss.hasPermission('tool:codegen:query')") - public CommonResult> getCodeGenTablePage(@Valid CodegenTablePageReqVO pageReqVO) { - PageResult pageResult = codegenService.getCodegenTablePage(pageReqVO); - return success(CodegenConvert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/detail") - @ApiOperation("获得表和字段的明细") - @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:codegen:query')") - public CommonResult getCodegenDetail(@RequestParam("tableId") Long tableId) { - CodegenTableDO table = codegenService.getCodegenTablePage(tableId); - List columns = codegenService.getCodegenColumnListByTableId(tableId); - // 拼装返回 - return success(CodegenConvert.INSTANCE.convert(table, columns)); - } - - @ApiOperation("基于数据库的表结构,创建代码生成器的表和字段定义") - @ApiImplicitParam(name = "tableNames", value = "表名数组", required = true, example = "sys_user", dataTypeClass = List.class) - @PostMapping("/create-list-from-db") - @PreAuthorize("@ss.hasPermission('tool:codegen:create')") - public CommonResult> createCodegenListFromDB(@RequestParam("tableNames") List tableNames) { - return success(codegenService.createCodegenListFromDB(getLoginUserId(), tableNames)); - } - - @ApiOperation("基于 SQL 建表语句,创建代码生成器的表和字段定义") - @ApiImplicitParam(name = "sql", value = "SQL 建表语句", required = true, example = "sql", dataTypeClass = String.class) - @PostMapping("/create-list-from-sql") - @PreAuthorize("@ss.hasPermission('tool:codegen:create')") - public CommonResult createCodegenListFromSQL(@RequestParam("sql") String sql) { - return success(codegenService.createCodegenListFromSQL(getLoginUserId(), sql)); - } - - @ApiOperation("更新数据库的表和字段定义") - @PutMapping("/update") - @PreAuthorize("@ss.hasPermission('tool:codegen:update')") - public CommonResult updateCodegen(@Valid @RequestBody CodegenUpdateReqVO updateReqVO) { - codegenService.updateCodegen(updateReqVO); - return success(true); - } - - @ApiOperation("基于数据库的表结构,同步数据库的表和字段定义") - @PutMapping("/sync-from-db") - @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:codegen:update')") - public CommonResult syncCodegenFromDB(@RequestParam("tableId") Long tableId) { - codegenService.syncCodegenFromDB(tableId); - return success(true); - } - - @ApiOperation("基于 SQL 建表语句,同步数据库的表和字段定义") - @PutMapping("/sync-from-sql") - @ApiImplicitParams({ - @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class), - @ApiImplicitParam(name = "sql", value = "SQL 建表语句", required = true, example = "sql", dataTypeClass = String.class) - }) - @PreAuthorize("@ss.hasPermission('tool:codegen:update')") - public CommonResult syncCodegenFromSQL(@RequestParam("tableId") Long tableId, - @RequestParam("sql") String sql) { - codegenService.syncCodegenFromSQL(tableId, sql); - return success(true); - } - - @ApiOperation("删除数据库的表和字段定义") - @DeleteMapping("/delete") - @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:codegen:delete')") - public CommonResult deleteCodegen(@RequestParam("tableId") Long tableId) { - codegenService.deleteCodegen(tableId); - return success(true); - } - - @ApiOperation("预览生成代码") - @GetMapping("/preview") - @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:codegen:preview')") - public CommonResult> previewCodegen(@RequestParam("tableId") Long tableId) { - Map codes = codegenService.generationCodes(tableId); - return success(CodegenConvert.INSTANCE.convert(codes)); - } - - @ApiOperation("下载生成代码") - @GetMapping("/download") - @ApiImplicitParam(name = "tableId", value = "表编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:codegen:download')") - public void downloadCodegen(@RequestParam("tableId") Long tableId, - HttpServletResponse response) throws IOException { - // 生成代码 - Map codes = codegenService.generationCodes(tableId); - // 构建 zip 包 - String[] paths = codes.keySet().toArray(new String[0]); - ByteArrayInputStream[] ins = codes.values().stream().map(IoUtil::toUtf8Stream).toArray(ByteArrayInputStream[]::new); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ZipUtil.zip(outputStream, paths, ins); - // 输出 - ServletUtils.writeAttachment(response, "codegen.zip", outputStream.toByteArray()); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java deleted file mode 100644 index c4e6ce0..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenDetailRespVO.java +++ /dev/null @@ -1,21 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo; - -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column.CodegenColumnRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableRespVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.List; - -@ApiModel("管理后台 - 代码生成表和字段的明细 Response VO") -@Data -public class CodegenDetailRespVO { - - @ApiModelProperty("表定义") - private CodegenTableRespVO table; - - @ApiModelProperty("字段定义") - private List columns; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java deleted file mode 100644 index 5c2ec68..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenPreviewRespVO.java +++ /dev/null @@ -1,17 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -@ApiModel(value = "管理后台 - 代码生成预览 Response VO", description ="注意,每个文件都是一个该对象") -@Data -public class CodegenPreviewRespVO { - - @ApiModelProperty(value = "文件路径", required = true, example = "java/cn/iocoder/yudao/adminserver/modules/system/controller/test/SysTestDemoController.java") - private String filePath; - - @ApiModelProperty(value = "代码", required = true, example = "Hello World") - private String code; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java deleted file mode 100644 index eb20c60..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/CodegenUpdateReqVO.java +++ /dev/null @@ -1,49 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo; - -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableBaseVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column.CodegenColumnBaseVO; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import java.util.List; - -@ApiModel("管理后台 - 代码生成表和字段的修改 Request VO") -@Data -public class CodegenUpdateReqVO { - - @Valid // 校验内嵌的字段 - @NotNull(message = "表定义不能为空") - private Table table; - - @Valid // 校验内嵌的字段 - @NotNull(message = "字段定义不能为空") - private List columns; - - @ApiModel("更新表定义") - @Data - @EqualsAndHashCode(callSuper = true) - @ToString(callSuper = true) - public static class Table extends CodegenTableBaseVO { - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Long id; - - } - - @ApiModel("更新表定义") - @Data - @EqualsAndHashCode(callSuper = true) - @ToString(callSuper = true) - public static class Column extends CodegenColumnBaseVO { - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Long id; - - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java deleted file mode 100644 index 5a9b693..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnBaseVO.java +++ /dev/null @@ -1,85 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** -* 代码生成字段定义 Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class CodegenColumnBaseVO { - - @ApiModelProperty(value = "表编号", required = true, example = "1") - @NotNull(message = "表编号不能为空") - private Long tableId; - - @ApiModelProperty(value = "字段名", required = true, example = "user_age") - @NotNull(message = "字段名不能为空") - private String columnName; - - @ApiModelProperty(value = "字段类型", required = true, example = "int(11)") - @NotNull(message = "字段类型不能为空") - private String columnType; - - @ApiModelProperty(value = "字段描述", required = true, example = "年龄") - @NotNull(message = "字段描述不能为空") - private String columnComment; - - @ApiModelProperty(value = "是否允许为空", required = true, example = "true") - @NotNull(message = "是否允许为空不能为空") - private Boolean nullable; - - @ApiModelProperty(value = "是否主键", required = true, example = "false") - @NotNull(message = "是否主键不能为空") - private Boolean primaryKey; - - @ApiModelProperty(value = "是否自增", required = true, example = "true") - @NotNull(message = "是否自增不能为空") - private String autoIncrement; - - @ApiModelProperty(value = "排序", required = true, example = "10") - @NotNull(message = "排序不能为空") - private Integer ordinalPosition; - - @ApiModelProperty(value = "Java 属性类型", required = true, example = "userAge") - @NotNull(message = "Java 属性类型不能为空") - private String javaType; - - @ApiModelProperty(value = "Java 属性名", required = true, example = "Integer") - @NotNull(message = "Java 属性名不能为空") - private String javaField; - - @ApiModelProperty(value = "字典类型", example = "sys_gender") - private String dictType; - - @ApiModelProperty(value = "数据示例", example = "1024") - private String example; - - @ApiModelProperty(value = "是否为 Create 创建操作的字段", required = true, example = "true") - @NotNull(message = "是否为 Create 创建操作的字段不能为空") - private Boolean createOperation; - - @ApiModelProperty(value = "是否为 Update 更新操作的字段", required = true, example = "false") - @NotNull(message = "是否为 Update 更新操作的字段不能为空") - private Boolean updateOperation; - - @ApiModelProperty(value = "是否为 List 查询操作的字段", required = true, example = "true") - @NotNull(message = "是否为 List 查询操作的字段不能为空") - private Boolean listOperation; - - @ApiModelProperty(value = "List 查询操作的条件类型", required = true, example = "LIKE", notes = "参见 CodegenColumnListConditionEnum 枚举") - @NotNull(message = "List 查询操作的条件类型不能为空") - private String listOperationCondition; - - @ApiModelProperty(value = "是否为 List 查询操作的返回字段", required = true, example = "true") - @NotNull(message = "是否为 List 查询操作的返回字段不能为空") - private Boolean listOperationResult; - - @ApiModelProperty(value = "显示类型", required = true, example = "input") - @NotNull(message = "显示类型不能为空") - private String htmlType; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java deleted file mode 100644 index 358f1f5..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/column/CodegenColumnRespVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.util.Date; - -@ApiModel("管理后台 - 代码生成字段定义 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CodegenColumnRespVO extends CodegenColumnBaseVO { - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java deleted file mode 100644 index dbe155c..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableBaseVO.java +++ /dev/null @@ -1,61 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotNull; - -/** -* 代码生成 Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class CodegenTableBaseVO { - - @ApiModelProperty(value = "导入类型", required = true, example = "1", notes = "参见 CodegenImportTypeEnum 枚举") - @NotNull(message = "导入类型不能为空") - private Integer importType; - - @ApiModelProperty(value = "生成场景", required = true, example = "1", notes = "参见 CodegenSceneEnum 枚举") - @NotNull(message = "导入类型不能为空") - private Integer scene; - - @ApiModelProperty(value = "表名称", required = true, example = "yudao") - @NotNull(message = "表名称不能为空") - private String tableName; - - @ApiModelProperty(value = "表描述", required = true, example = "芋道") - @NotNull(message = "表描述不能为空") - private String tableComment; - - @ApiModelProperty(value = "备注", example = "我是备注") - private String remark; - - @ApiModelProperty(value = "模块名", required = true, example = "system") - @NotNull(message = "模块名不能为空") - private String moduleName; - - @ApiModelProperty(value = "业务名", required = true, example = "codegen") - @NotNull(message = "业务名不能为空") - private String businessName; - - @ApiModelProperty(value = "类名称", required = true, example = "CodegenTable") - @NotNull(message = "类名称不能为空") - private String className; - - @ApiModelProperty(value = "类描述", required = true, example = "代码生成器的表定义") - @NotNull(message = "类描述不能为空") - private String classComment; - - @ApiModelProperty(value = "作者", required = true, example = "芋道源码") - @NotNull(message = "作者不能为空") - private String author; - - @ApiModelProperty(value = "模板类型", required = true, example = "1", notes = "参见 CodegenTemplateTypeEnum 枚举") - @NotNull(message = "模板类型不能为空") - private Integer templateType; - - @ApiModelProperty(value = "父菜单编号", example = "1024") - private Long parentMenuId; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java deleted file mode 100644 index 69095e2..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; - -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; - -import java.util.Date; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("管理后台 - 表定义分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CodegenTablePageReqVO extends PageParam { - - @ApiModelProperty(value = "表名称", example = "yudao", notes = "模糊匹配") - private String tableName; - - @ApiModelProperty(value = "表描述", example = "芋道", notes = "模糊匹配") - private String tableComment; - - @ApiModelProperty(value = "开始创建时间", example = "2020-10-24 00:00:00") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date beginCreateTime; - - @ApiModelProperty(value = "结束创建时间", example = "2020-10-24 23:59:59") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private Date endCreateTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java deleted file mode 100644 index 06d7c0d..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/CodegenTableRespVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; - -import java.util.Date; - -@ApiModel("管理后台 - 代码生成表定义 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class CodegenTableRespVO extends CodegenTableBaseVO { - - @ApiModelProperty(value = "编号", required = true, example = "1") - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - - @ApiModelProperty(value = "更新时间", required = true) - private Date updateTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java deleted file mode 100644 index 8b54b64..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/codegen/vo/table/SchemaTableRespVO.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.util.Date; - -@ApiModel("管理后台 - 数据字典的表定义 Response VO") -@Data -public class SchemaTableRespVO { - - @ApiModelProperty(value = "数据库", required = true, example = "yudao") - private String tableSchema; - - @ApiModelProperty(value = "表名称", required = true, example = "yuanma") - private String tableName; - - @ApiModelProperty(value = "表描述", required = true, example = "芋道源码") - private String tableComment; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/doc/DbDocController.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/doc/DbDocController.java deleted file mode 100644 index cda1a67..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/doc/DbDocController.java +++ /dev/null @@ -1,158 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.doc; - -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.IdUtil; -import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; -import cn.smallbun.screw.core.Configuration; -import cn.smallbun.screw.core.engine.EngineConfig; -import cn.smallbun.screw.core.engine.EngineFileType; -import cn.smallbun.screw.core.engine.EngineTemplateType; -import cn.smallbun.screw.core.execute.DocumentationExecute; -import cn.smallbun.screw.core.process.ProcessConfig; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -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 javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; - -@Api(tags = "管理后台 - 数据库文档") -@RestController -@RequestMapping("/tool/db-doc") -public class DbDocController { - - @Resource - private DynamicDataSourceProperties dynamicDataSourceProperties; - - private static final String FILE_OUTPUT_DIR = System.getProperty("java.io.tmpdir") + File.separator - + "db-doc"; - private static final String DOC_FILE_NAME = "数据库文档"; - private static final String DOC_VERSION = "1.0.0"; - private static final String DOC_DESCRIPTION = "文档描述"; - - @GetMapping("/export-html") - @ApiOperation("导出 html 格式的数据文档") - @ApiImplicitParam(name = "deleteFile", value = "是否删除在服务器本地生成的数据库文档", example = "true", - dataTypeClass = Boolean.class) - public void exportHtml(@RequestParam(defaultValue = "true") Boolean deleteFile, - HttpServletResponse response) throws IOException { - doExportFile(EngineFileType.HTML, deleteFile, response); - } - - @GetMapping("/export-word") - @ApiOperation("导出 word 格式的数据文档") - @ApiImplicitParam(name = "deleteFile", value = "是否删除在服务器本地生成的数据库文档", example = "true", - dataTypeClass = Boolean.class) - public void exportWord(@RequestParam(defaultValue = "true") Boolean deleteFile, - HttpServletResponse response) throws IOException { - doExportFile(EngineFileType.WORD, deleteFile, response); - } - - @GetMapping("/export-markdown") - @ApiOperation("导出 markdown 格式的数据文档") - @ApiImplicitParam(name = "deleteFile", value = "是否删除在服务器本地生成的数据库文档", example = "true", - dataTypeClass = Boolean.class) - public void exportMarkdown(@RequestParam(defaultValue = "true") Boolean deleteFile, - HttpServletResponse response) throws IOException { - doExportFile(EngineFileType.MD, deleteFile, response); - } - - private void doExportFile(EngineFileType fileOutputType, Boolean deleteFile, - HttpServletResponse response) throws IOException { - String docFileName = DOC_FILE_NAME + "_" + IdUtil.fastSimpleUUID(); - String filePath = doExportFile(fileOutputType, docFileName); - String downloadFileName = DOC_FILE_NAME + fileOutputType.getFileSuffix(); //下载后的文件名 - try { - // 读取,返回 - ServletUtils.writeAttachment(response, downloadFileName, FileUtil.readBytes(filePath)); - } finally { - handleDeleteFile(deleteFile, filePath); - } - } - - /** - * 输出文件,返回文件路径 - * - * @param fileOutputType 文件类型 - * @param fileName 文件名, 无需 ".docx" 等文件后缀 - * @return 生成的文件所在路径 - */ - private String doExportFile(EngineFileType fileOutputType, String fileName) { - try (HikariDataSource dataSource = buildDataSource()) { - // 创建 screw 的配置 - Configuration config = Configuration.builder() - .version(DOC_VERSION) // 版本 - .description(DOC_DESCRIPTION) // 描述 - .dataSource(dataSource) // 数据源 - .engineConfig(buildEngineConfig(fileOutputType, fileName)) // 引擎配置 - .produceConfig(buildProcessConfig()) // 处理配置 - .build(); - - // 执行 screw,生成数据库文档 - new DocumentationExecute(config).execute(); - - return FILE_OUTPUT_DIR + File.separator + fileName + fileOutputType.getFileSuffix(); - } - } - - private void handleDeleteFile(Boolean deleteFile, String filePath) { - if (!deleteFile) { - return; - } - FileUtil.del(filePath); - } - - /** - * 创建数据源 - */ - // TODO 芋艿:screw 暂时不支持 druid,尴尬 - private HikariDataSource buildDataSource() { - // 获得 DataSource 数据源,目前只支持首个 - String primary = dynamicDataSourceProperties.getPrimary(); - DataSourceProperty dataSourceProperty = dynamicDataSourceProperties.getDatasource().get(primary); - // 创建 HikariConfig 配置类 - HikariConfig hikariConfig = new HikariConfig(); - hikariConfig.setJdbcUrl(dataSourceProperty.getUrl()); - hikariConfig.setUsername(dataSourceProperty.getUsername()); - hikariConfig.setPassword(dataSourceProperty.getPassword()); - hikariConfig.addDataSourceProperty("useInformationSchema", "true"); // 设置可以获取 tables remarks 信息 - // 创建数据源 - return new HikariDataSource(hikariConfig); - } - - /** - * 创建 screw 的引擎配置 - */ - private static EngineConfig buildEngineConfig(EngineFileType fileOutputType, String docFileName) { - return EngineConfig.builder() - .fileOutputDir(FILE_OUTPUT_DIR) // 生成文件路径 - .openOutputDir(false) // 打开目录 - .fileType(fileOutputType) // 文件类型 - .produceType(EngineTemplateType.velocity) // 文件类型 - .fileName(docFileName) // 自定义文件名称 - .build(); - } - - /** - * 创建 screw 的处理配置,一般可忽略 - * 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置 - */ - private static ProcessConfig buildProcessConfig() { - return ProcessConfig.builder() - .ignoreTablePrefix(Arrays.asList("QRTZ_", "ACT_")) // 忽略表前缀 - .build(); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java deleted file mode 100755 index bc0de31..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/TestDemoController.java +++ /dev/null @@ -1,96 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.annotations.*; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -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.tool.controller.admin.test.vo.*; -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; -import cn.iocoder.yudao.module.tool.convert.test.TestDemoConvert; -import cn.iocoder.yudao.module.tool.service.test.TestDemoService; - -@Api(tags = "管理后台 - 字典类型") -@RestController -@RequestMapping("/tool/test-demo") -@Validated -public class TestDemoController { - - @Resource - private TestDemoService testDemoService; - - @PostMapping("/create") - @ApiOperation("创建字典类型") - @PreAuthorize("@ss.hasPermission('tool:test-demo:create')") public CommonResult createTestDemo(@Valid @RequestBody TestDemoCreateReqVO createReqVO) { - return success(testDemoService.createTestDemo(createReqVO)); - } - - @PutMapping("/update") - @ApiOperation("更新字典类型") - @PreAuthorize("@ss.hasPermission('tool:test-demo:update')") public CommonResult updateTestDemo(@Valid @RequestBody TestDemoUpdateReqVO updateReqVO) { - testDemoService.updateTestDemo(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @ApiOperation("删除字典类型") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:test-demo:delete')") - public CommonResult deleteTestDemo(@RequestParam("id") Long id) { - testDemoService.deleteTestDemo(id); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得字典类型") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class) - @PreAuthorize("@ss.hasPermission('tool:test-demo:query')") - public CommonResult getTestDemo(@RequestParam("id") Long id) { - TestDemoDO testDemo = testDemoService.getTestDemo(id); - return success(TestDemoConvert.INSTANCE.convert(testDemo)); - } - - @GetMapping("/list") - @ApiOperation("获得字典类型列表") - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) - @PreAuthorize("@ss.hasPermission('tool:test-demo:query')") - public CommonResult> getTestDemoList(@RequestParam("ids") Collection ids) { - List list = testDemoService.getTestDemoList(ids); - return success(TestDemoConvert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @ApiOperation("获得字典类型分页") - @PreAuthorize("@ss.hasPermission('tool:test-demo:query')") public CommonResult> getTestDemoPage(@Valid TestDemoPageReqVO pageVO) { - PageResult pageResult = testDemoService.getTestDemoPage(pageVO); - return success(TestDemoConvert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/export-excel") - @ApiOperation("导出字典类型 Excel") - @PreAuthorize("@ss.hasPermission('tool:test-demo:export')") @OperateLog(type = EXPORT) - public void exportTestDemoExcel(@Valid TestDemoExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List list = testDemoService.getTestDemoList(exportReqVO); - // 导出 Excel - List datas = TestDemoConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "字典类型.xls", "数据", TestDemoExcelVO.class, datas); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java deleted file mode 100755 index 28eb831..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoBaseVO.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -/** -* 字典类型 Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class TestDemoBaseVO { - - @ApiModelProperty(value = "名字", required = true) - @NotNull(message = "名字不能为空") - private String name; - - @ApiModelProperty(value = "状态", required = true) - @NotNull(message = "状态不能为空") - private Integer status; - - @ApiModelProperty(value = "类型", required = true) - @NotNull(message = "类型不能为空") - private Integer type; - - @ApiModelProperty(value = "分类", required = true) - @NotNull(message = "分类不能为空") - private Integer category; - - @ApiModelProperty(value = "备注") - private String remark; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java deleted file mode 100755 index 8fcecd9..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoCreateReqVO.java +++ /dev/null @@ -1,14 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 字典类型创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class TestDemoCreateReqVO extends TestDemoBaseVO { - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java deleted file mode 100755 index 496fa13..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExcelVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -import com.alibaba.excel.annotation.ExcelProperty; - -/** - * 字典类型 Excel VO - * - * @author 芋道源码 - */ -@Data -public class TestDemoExcelVO { - - @ExcelProperty("编号") - private Long id; - - @ExcelProperty("名字") - private String name; - - @ExcelProperty("状态") - private Integer status; - - @ExcelProperty("类型") - private Integer type; - - @ExcelProperty("分类") - private Integer category; - - @ExcelProperty("备注") - private String remark; - - @ExcelProperty("创建时间") - private Date createTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java deleted file mode 100755 index ae47495..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoExportReqVO.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel(value = "管理后台 - 字典类型 Excel 导出 Request VO", description = "参数和 TestDemoPageReqVO 是一致的") -@Data -public class TestDemoExportReqVO { - - @ApiModelProperty(value = "名字") - private String name; - - @ApiModelProperty(value = "状态") - private Integer status; - - @ApiModelProperty(value = "类型") - private Integer type; - - @ApiModelProperty(value = "分类") - private Integer category; - - @ApiModelProperty(value = "备注") - private String remark; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始创建时间") - private Date beginCreateTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束创建时间") - private Date endCreateTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java deleted file mode 100755 index 1c9f8a9..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoPageReqVO.java +++ /dev/null @@ -1,40 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; - -import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; - -@ApiModel("管理后台 - 字典类型分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class TestDemoPageReqVO extends PageParam { - - @ApiModelProperty(value = "名字") - private String name; - - @ApiModelProperty(value = "状态") - private Integer status; - - @ApiModelProperty(value = "类型") - private Integer type; - - @ApiModelProperty(value = "分类") - private Integer category; - - @ApiModelProperty(value = "备注") - private String remark; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "开始创建时间") - private Date beginCreateTime; - - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @ApiModelProperty(value = "结束创建时间") - private Date endCreateTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java deleted file mode 100755 index cdc0e00..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoRespVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("管理后台 - 字典类型 Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class TestDemoRespVO extends TestDemoBaseVO { - - @ApiModelProperty(value = "编号", required = true) - private Long id; - - @ApiModelProperty(value = "创建时间", required = true) - private Date createTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java deleted file mode 100755 index 47953b1..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/admin/test/vo/TestDemoUpdateReqVO.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.iocoder.yudao.module.tool.controller.admin.test.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; - -@ApiModel("管理后台 - 字典类型更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class TestDemoUpdateReqVO extends TestDemoBaseVO { - - @ApiModelProperty(value = "编号", required = true) - @NotNull(message = "编号不能为空") - private Long id; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java deleted file mode 100644 index 3489a71..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/app/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 占位,避免 package 无法提交到 Git 仓库 - */ -package cn.iocoder.yudao.module.tool.controller.app; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/controller/package-info.java deleted file mode 100644 index f06bab1..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/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.tool.controller; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java deleted file mode 100644 index 08ab991..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/codegen/CodegenConvert.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.module.tool.convert.codegen; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenDetailRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenPreviewRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.column.CodegenColumnRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTableRespVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.SchemaTableRespVO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -@Mapper -public interface CodegenConvert { - - CodegenConvert INSTANCE = Mappers.getMapper(CodegenConvert.class); - - // ========== InformationSchemaTableDO 和 InformationSchemaColumnDO 相关 ========== - - CodegenTableDO convert(SchemaTableDO bean); - - List convertList(List list); - - CodegenTableRespVO convert(SchemaColumnDO bean); - - // ========== CodegenTableDO 相关 ========== - -// List convertList02(List list); - - CodegenTableRespVO convert(CodegenTableDO bean); - - PageResult convertPage(PageResult page); - - // ========== CodegenTableDO 相关 ========== - - List convertList02(List list); - - CodegenTableDO convert(CodegenUpdateReqVO.Table bean); - - List convertList03(List columns); - - List convertList04(List list); - - // ========== 其它 ========== - - default CodegenDetailRespVO convert(CodegenTableDO table, List columns) { - CodegenDetailRespVO respVO = new CodegenDetailRespVO(); - respVO.setTable(convert(table)); - respVO.setColumns(convertList02(columns)); - return respVO; - } - - default List convert(Map codes) { - return codes.entrySet().stream().map(entry -> { - CodegenPreviewRespVO respVO = new CodegenPreviewRespVO(); - respVO.setFilePath(entry.getKey()); - respVO.setCode(entry.getValue()); - return respVO; - }).collect(Collectors.toList()); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java deleted file mode 100755 index c959a66..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/convert/test/TestDemoConvert.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.tool.convert.test; - -import java.util.*; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.*; -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; - -/** - * 字典类型 Convert - * - * @author 芋道源码 - */ -@Mapper -public interface TestDemoConvert { - - TestDemoConvert INSTANCE = Mappers.getMapper(TestDemoConvert.class); - - TestDemoDO convert(TestDemoCreateReqVO bean); - - TestDemoDO convert(TestDemoUpdateReqVO bean); - - TestDemoRespVO convert(TestDemoDO bean); - - List convertList(List list); - - PageResult convertPage(PageResult page); - - List convertList02(List list); - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java deleted file mode 100644 index 65f1206..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenColumnDO.java +++ /dev/null @@ -1,124 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnHtmlTypeEnum; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnListConditionEnum; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 代码生成 column 字段定义 - * - * @author 芋道源码 - */ -@TableName(value = "tool_codegen_column", autoResultMap = true) -@Data -@Accessors(chain = true) -@EqualsAndHashCode(callSuper = true) -public class CodegenColumnDO extends BaseDO { - - /** - * ID 编号 - */ - @TableId - private Long id; - /** - * 表编号 - * - * 关联 {@link CodegenTableDO#getId()} - */ - private Long tableId; - - // ========== 表相关字段 ========== - - /** - * 字段名 - */ - private String columnName; - /** - * 字段类型 - */ - private String columnType; - /** - * 字段描述 - */ - private String columnComment; - /** - * 是否允许为空 - */ - private Boolean nullable; - /** - * 是否主键 - */ - private Boolean primaryKey; - /** - * 是否自增 - */ - private Boolean autoIncrement; - /** - * 排序 - */ - private Integer ordinalPosition; - - // ========== Java 相关字段 ========== - - /** - * Java 属性类型 - * - * 例如说 String、Boolean 等等 - */ - private String javaType; - /** - * Java 属性名 - */ -// @NotBlank(message = "Java属性不能为空") - private String javaField; - /** - * 字典类型 - * - * 关联 DictTypeDO 的 type 属性 - */ - private String dictType; - /** - * 数据示例,主要用于生成 Swagger 注解的 example 字段 - */ - private String example; - - // ========== CRUD 相关字段 ========== - - /** - * 是否为 Create 创建操作的字段 - */ - private Boolean createOperation; - /** - * 是否为 Update 更新操作的字段 - */ - private Boolean updateOperation; - /** - * 是否为 List 查询操作的字段 - */ - private Boolean listOperation; - /** - * List 查询操作的条件类型 - * - * 枚举 {@link CodegenColumnListConditionEnum} - */ - private String listOperationCondition; - /** - * 是否为 List 查询操作的返回字段 - */ - private Boolean listOperationResult; - - // ========== UI 相关字段 ========== - - /** - * 显示类型 - * - * 枚举 {@link CodegenColumnHtmlTypeEnum} - */ - private String htmlType; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java deleted file mode 100644 index 9585cb3..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/CodegenTableDO.java +++ /dev/null @@ -1,102 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenSceneEnum; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenTemplateTypeEnum; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.experimental.Accessors; - -/** - * 代码生成 table 表定义 - * - * @author 芋道源码 - */ -@TableName(value = "tool_codegen_table", autoResultMap = true) -@Data -@Accessors(chain = true) -@EqualsAndHashCode(callSuper = true) -public class CodegenTableDO extends BaseDO { - - /** - * ID 编号 - */ - private Long id; - - /** - * 导入类型 - * - * 枚举 {@link CodegenTemplateTypeEnum} - */ - private Integer importType; - /** - * 生成场景 - * - * 枚举 {@link CodegenSceneEnum} - */ - private Integer scene; - - // ========== 表相关字段 ========== - - /** - * 表名称 - */ - private String tableName; - /** - * 表描述 - */ - private String tableComment; - /** - * 备注 - */ - private String remark; - - // ========== 类相关字段 ========== - - /** - * 模块名,即一级目录 - * - * 例如说,system、infra、tool 等等 - */ - private String moduleName; - /** - * 业务名,即二级目录 - * - * 例如说,user、permission、dict 等等 - */ - private String businessName; - /** - * 类名称(首字母大写) - * - * 例如说,SysUser、SysMenu、SysDictData 等等 - */ - private String className; - /** - * 类描述 - */ - private String classComment; - /** - * 作者 - */ - private String author; - - // ========== 生成相关字段 ========== - - /** - * 模板类型 - * - * 枚举 {@link CodegenTemplateTypeEnum} - */ - private Integer templateType; - - // ========== 菜单相关字段 ========== - - /** - * 父菜单编号 - * - * 关联 MenuDO 的 id 属性 - */ - private Long parentMenuId; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java deleted file mode 100644 index d7c2b0d..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaColumnDO.java +++ /dev/null @@ -1,54 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Builder; -import lombok.Data; - -/** - * MySQL 数据库中的 column 字段定义 - * - * @author 芋道源码 - */ -@TableName(value = "information_schema.columns", autoResultMap = true) -@Data -@Builder -public class SchemaColumnDO { - - /** - * 表名称 - */ - private String tableName; - /** - * 字段名 - */ - private String columnName; - /** - * 字段类型 - */ - private String columnType; - /** - * 字段描述 - */ - private String columnComment; - /** - * 是否允许为空 - */ - @TableField("case when is_nullable = 'yes' then '1' else '0' end") - private Boolean nullable; - /** - * 是否主键 - */ - @TableField("case when column_key = 'PRI' then '1' else '0' end") - private Boolean primaryKey; - /** - * 是否自增 - */ - @TableField("case when extra = 'auto_increment' then '1' else '0' end") - private Boolean autoIncrement; - /** - * 排序字段 - */ - private Integer ordinalPosition; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java deleted file mode 100644 index eaec25f..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/codegen/SchemaTableDO.java +++ /dev/null @@ -1,36 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.dataobject.codegen; - -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Builder; -import lombok.Data; - -import java.util.Date; - -/** - * MySQL 数据库中的 table 表定义 - * - * @author 芋道源码 - */ -@TableName(value = "information_schema.tables", autoResultMap = true) -@Data -@Builder -public class SchemaTableDO { - - /** - * 数据库 - */ - private String tableSchema; - /** - * 表名称 - */ - private String tableName; - /** - * 表描述 - */ - private String tableComment; - /** - * 创建时间 - */ - private Date createTime; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java deleted file mode 100755 index a82f752..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/dataobject/test/TestDemoDO.java +++ /dev/null @@ -1,48 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.dataobject.test; - -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - -/** - * 字典类型 DO - * - * @author 芋道源码 - */ -@TableName("tool_test_demo") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class TestDemoDO extends BaseDO { - - /** - * 编号 - */ - @TableId - private Long id; - /** - * 名字 - */ - private String name; - /** - * 状态 - */ - private Integer status; - /** - * 类型 - */ - private Integer type; - /** - * 分类 - */ - private Integer category; - /** - * 备注 - */ - private String remark; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java deleted file mode 100644 index 8c1e47e..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenColumnMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface CodegenColumnMapper extends BaseMapperX { - - default List selectListByTableId(Long tableId) { - return selectList(new QueryWrapper().eq("table_id", tableId) - .orderByAsc("ordinal_position")); - } - - default void deleteListByTableId(Long tableId) { - delete(new QueryWrapper().eq("table_id", tableId)); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java deleted file mode 100644 index 292941b..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/CodegenTableMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.mysql.codegen; - -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.QueryWrapperX; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface CodegenTableMapper extends BaseMapperX { - - default CodegenTableDO selectByTableName(String tableName) { - return selectOne(new QueryWrapper().eq("table_name", tableName)); - } - - default PageResult selectPage(CodegenTablePageReqVO pageReqVO) { - return selectPage(pageReqVO, new QueryWrapperX() - .likeIfPresent("table_name", pageReqVO.getTableName()) - .likeIfPresent("table_comment", pageReqVO.getTableComment()) - .betweenIfPresent("create_time", pageReqVO.getBeginCreateTime(), pageReqVO.getEndCreateTime())); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java deleted file mode 100644 index 52bb6ba..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapper.java +++ /dev/null @@ -1,19 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.List; - -@Mapper -public interface SchemaColumnMapper extends BaseMapperX { - - default List selectListByTableName(String tableSchema, String tableName) { - return selectList(new QueryWrapper().eq("table_name", tableName) - .eq("table_schema", tableSchema) - .orderByAsc("ordinal_position")); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java deleted file mode 100644 index 51d00c2..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaTableMapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import org.apache.ibatis.annotations.Mapper; - -import java.util.Collection; -import java.util.List; - -@Mapper -public interface SchemaTableMapper extends BaseMapperX { - - default List selectList(Collection tableSchemas, String tableName, String tableComment) { - return selectList(new QueryWrapperX().in("table_schema", tableSchemas) - .likeIfPresent("table_name", tableName) - .likeIfPresent("table_comment", tableComment)); - } - - default SchemaTableDO selectByTableSchemaAndTableName(String tableSchema, String tableName) { - return selectOne(new QueryWrapper().eq("table_schema",tableSchema) - .eq("table_name", tableName)); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java deleted file mode 100755 index 0848057..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/dal/mysql/test/TestDemoMapper.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.mysql.test; - -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.tool.dal.dataobject.test.TestDemoDO; -import org.apache.ibatis.annotations.Mapper; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.*; - -/** - * 字典类型 Mapper - * - * @author 芋道源码 - */ -@Mapper -public interface TestDemoMapper extends BaseMapperX { - - default PageResult selectPage(TestDemoPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(TestDemoDO::getName, reqVO.getName()) - .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus()) - .eqIfPresent(TestDemoDO::getType, reqVO.getType()) - .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory()) - .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(TestDemoDO::getId)); - } - - default List selectList(TestDemoExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX() - .likeIfPresent(TestDemoDO::getName, reqVO.getName()) - .eqIfPresent(TestDemoDO::getStatus, reqVO.getStatus()) - .eqIfPresent(TestDemoDO::getType, reqVO.getType()) - .eqIfPresent(TestDemoDO::getCategory, reqVO.getCategory()) - .eqIfPresent(TestDemoDO::getRemark, reqVO.getRemark()) - .betweenIfPresent(TestDemoDO::getCreateTime, reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) - .orderByDesc(TestDemoDO::getId)); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java deleted file mode 100644 index c7d9684..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnHtmlTypeEnum.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums.codegen; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 代码生成器的字段 HTML 展示枚举 - */ -@AllArgsConstructor -@Getter -public enum CodegenColumnHtmlTypeEnum { - - INPUT("input"), // 文本框 - TEXTAREA("textarea"), // 文本域 - SELECT("select"), // 下拉框 - RADIO("radio"), // 单选框 - CHECKBOX("checkbox"), // 复选框 - DATETIME("datetime"), // 日期控件 - UPLOAD_IMAGE("upload_image"), // 上传图片 - UPLOAD_FILE("upload_file"), // 上传文件 - EDITOR("editor"), // 富文本控件 - ; - - /** - * 条件 - */ - private final String type; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java deleted file mode 100644 index 4264b9a..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenColumnListConditionEnum.java +++ /dev/null @@ -1,27 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums.codegen; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 代码生成器的字段过滤条件枚举 - */ -@AllArgsConstructor -@Getter -public enum CodegenColumnListConditionEnum { - - EQ("="), - NE("!="), - GT(">"), - GTE(">="), - LT("<"), - LTE("<="), - LIKE("LIKE"), - BETWEEN("BETWEEN"); - - /** - * 条件 - */ - private final String condition; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java deleted file mode 100644 index 62c7e99..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenImportTypeEnum.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums.codegen; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 代码生成的导入类型 - * - * @author 芋道源码 - */ -@AllArgsConstructor -@Getter -public enum CodegenImportTypeEnum { - - DB(1), // 从 information_schema 的 table 和 columns 表导入 - SQL(2); // 基于建表 SQL 语句导入 - - /** - * 类型 - */ - private final Integer type; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java deleted file mode 100644 index 5b0f59b..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenSceneEnum.java +++ /dev/null @@ -1,42 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums.codegen; - -import cn.hutool.core.util.ArrayUtil; -import lombok.AllArgsConstructor; -import lombok.Getter; - -import static cn.hutool.core.util.ArrayUtil.*; - -/** - * 代码生成的场景枚举 - * - * @author 芋道源码 - */ -@AllArgsConstructor -@Getter -public enum CodegenSceneEnum { - - ADMIN(1, "管理后台", "admin", ""), - APP(2, "用户 APP", "app", "App"); - - /** - * 场景 - */ - private final Integer scene; - /** - * 场景名 - */ - private final String name; - /** - * 基础包名 - */ - private final String basePackage; - /** - * Controller 和 VO 类的前缀 - */ - private final String prefixClass; - - public static CodegenSceneEnum valueOf(Integer scene) { - return firstMatch(sceneEnum -> sceneEnum.getScene().equals(scene), values()); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java deleted file mode 100644 index 9f96aaf..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/codegen/CodegenTemplateTypeEnum.java +++ /dev/null @@ -1,24 +0,0 @@ -package cn.iocoder.yudao.module.tool.enums.codegen; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -/** - * 代码生成模板类型 - * - * @author 芋道源码 - */ -@AllArgsConstructor -@Getter -public enum CodegenTemplateTypeEnum { - - CRUD(1), // 单表(增删改查) - TREE(2), // 树表(增删改查) - ; - - /** - * 类型 - */ - private final Integer type; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java deleted file mode 100644 index c2b493d..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/enums/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 占位 - */ -package cn.iocoder.yudao.module.tool.enums; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java deleted file mode 100644 index b19add6..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenConfiguration.java +++ /dev/null @@ -1,9 +0,0 @@ -package cn.iocoder.yudao.module.tool.framework.codegen.config; - -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableConfigurationProperties(CodegenProperties.class) -public class CodegenConfiguration { -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java deleted file mode 100644 index ba113cf..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/config/CodegenProperties.java +++ /dev/null @@ -1,28 +0,0 @@ -package cn.iocoder.yudao.module.tool.framework.codegen.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.validation.annotation.Validated; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import java.util.Collection; - -@ConfigurationProperties(prefix = "yudao.codegen") -@Validated -@Data -public class CodegenProperties { - - /** - * 生成的 Java 代码的基础包 - */ - @NotNull(message = "Java 代码的基础包不能为空") - private String basePackage; - - /** - * 数据库名数组 - */ - @NotEmpty(message = "数据库不能为空") - private Collection dbSchemas; - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java deleted file mode 100644 index 3348d54..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/codegen/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 代码生成器 - */ -package cn.iocoder.yudao.module.tool.framework.codegen; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java deleted file mode 100644 index 76dbd50..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/framework/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 属于 tool 模块的 framework 封装 - * - * @author 芋道源码 - */ -package cn.iocoder.yudao.module.tool.framework; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java deleted file mode 100644 index 4568d4c..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/** - * tool 模块下,我们放研发工具,提升研发效率与质量。 - * 例如说:代码生成器、接口文档等等 - * - * 1. Controller URL:以 /tool/ 开头,避免和其它 Module 冲突 - * 2. DataObject 表名:以 tool_ 开头,方便在数据库中区分 - */ -package cn.iocoder.yudao.module.tool; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java deleted file mode 100644 index 75327b3..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenService.java +++ /dev/null @@ -1,124 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen; - -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; - -import java.util.List; -import java.util.Map; - -/** - * 代码生成 Service 接口 - * - * @author 芋道源码 - */ -public interface CodegenService { - - /** - * 基于 SQL 建表语句,创建代码生成器的表定义 - * - * @param userId 用户编号 - * @param sql SQL 建表语句 - * @return 创建的表定义的编号 - */ - Long createCodegenListFromSQL(Long userId, String sql); - - /** - * 基于数据库的表结构,创建代码生成器的表定义 - * - * @param userId 用户编号 - * @param tableName 表名称 - * @return 创建的表定义的编号 - */ - Long createCodegen(Long userId, String tableName); - - /** - * 基于 {@link #createCodegen(Long, String)} 的批量创建 - * - * @param userId 用户编号 - * @param tableNames 表名称数组 - * @return 创建的表定义的编号数组 - */ - List createCodegenListFromDB(Long userId, List tableNames); - - /** - * 更新数据库的表和字段定义 - * - * @param updateReqVO 更新信息 - */ - void updateCodegen(CodegenUpdateReqVO updateReqVO); - - /** - * 基于数据库的表结构,同步数据库的表和字段定义 - * - * @param tableId 表编号 - */ - void syncCodegenFromDB(Long tableId); - - /** - * 基于 SQL 建表语句,同步数据库的表和字段定义 - * - * @param tableId 表编号 - * @param sql SQL 建表语句 - */ - void syncCodegenFromSQL(Long tableId, String sql); - - /** - * 删除数据库的表和字段定义 - * - * @param tableId 数据编号 - */ - void deleteCodegen(Long tableId); - - /** - * 获得表定义分页 - * - * @param pageReqVO 分页条件 - * @return 表定义分页 - */ - PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO); - - /** - * 获得表定义 - * - * @param id 表编号 - * @return 表定义 - */ - CodegenTableDO getCodegenTablePage(Long id); - - /** - * 获得全部表定义 - * - * @return 表定义数组 - */ - List getCodeGenTableList(); - - /** - * 获得指定表的字段定义数组 - * - * @param tableId 表编号 - * @return 字段定义数组 - */ - List getCodegenColumnListByTableId(Long tableId); - - /** - * 执行指定表的代码生成 - * - * @param tableId 表编号 - * @return 生成结果。key 为文件路径,value 为对应的代码内容 - */ - Map generationCodes(Long tableId); - - /** - * 获得数据库自带的表定义列表 - * - * @param tableName 表名称 - * @param tableComment 表描述 - * @return 表定义列表 - */ - List getSchemaTableList(String tableName, String tableComment); - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java deleted file mode 100644 index 93210f2..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImpl.java +++ /dev/null @@ -1,292 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.system.api.user.AdminUserApi; -import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.CodegenUpdateReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.codegen.vo.table.CodegenTablePageReqVO; -import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; -import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenColumnMapper; -import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenTableMapper; -import cn.iocoder.yudao.module.tool.dal.mysql.codegen.SchemaColumnMapper; -import cn.iocoder.yudao.module.tool.dal.mysql.codegen.SchemaTableMapper; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenImportTypeEnum; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenBuilder; -import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenEngine; -import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenSQLParser; -import org.apache.commons.collections4.KeyValue; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.*; - -/** - * 代码生成 Service 实现类 - * - * @author 芋道源码 - */ -@Service -public class CodegenServiceImpl implements CodegenService { - - @Resource - private SchemaTableMapper schemaTableMapper; - @Resource - private SchemaColumnMapper schemaColumnMapper; - @Resource - private CodegenTableMapper codegenTableMapper; - @Resource - private CodegenColumnMapper codegenColumnMapper; - - @Resource - private AdminUserApi userApi; - - @Resource - private CodegenBuilder codegenBuilder; - @Resource - private CodegenEngine codegenEngine; - - @Resource - private CodegenProperties codegenProperties; - - private Long createCodegen0(Long userId, CodegenImportTypeEnum importType, - SchemaTableDO schemaTable, List schemaColumns) { - // 校验导入的表和字段非空 - if (schemaTable == null) { - throw exception(CODEGEN_IMPORT_TABLE_NULL); - } - if (CollUtil.isEmpty(schemaColumns)) { - throw exception(CODEGEN_IMPORT_COLUMNS_NULL); - } - // 校验是否已经存在 - if (codegenTableMapper.selectByTableName(schemaTable.getTableName()) != null) { - throw exception(CODEGEN_TABLE_EXISTS); - } - - // 构建 CodegenTableDO 对象,插入到 DB 中 - CodegenTableDO table = codegenBuilder.buildTable(schemaTable); - table.setImportType(importType.getType()); - table.setAuthor(userApi.getUser(userId).getNickname()); - codegenTableMapper.insert(table); - // 构建 CodegenColumnDO 数组,插入到 DB 中 - List columns = codegenBuilder.buildColumns(schemaColumns); - columns.forEach(column -> { - column.setTableId(table.getId()); - codegenColumnMapper.insert(column); // TODO 批量插入 - }); - return table.getId(); - } - - @Override - public Long createCodegenListFromSQL(Long userId, String sql) { - // 从 SQL 中,获得数据库表结构 - SchemaTableDO schemaTable; - List schemaColumns; - try { - KeyValue> result = CodegenSQLParser.parse(sql); - schemaTable = result.getKey(); - schemaColumns = result.getValue(); - } catch (Exception ex) { - throw exception(CODEGEN_PARSE_SQL_ERROR); - } - // 导入 - return this.createCodegen0(userId, CodegenImportTypeEnum.SQL, schemaTable, schemaColumns); - } - - @Override - public Long createCodegen(Long userId, String tableName) { - // 获取当前schema - String tableSchema = codegenProperties.getDbSchemas().iterator().next(); - // 从数据库中,获得数据库表结构 - SchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName); - List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName); - // 导入 - return this.createCodegen0(userId, CodegenImportTypeEnum.DB, schemaTable, schemaColumns); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public List createCodegenListFromDB(Long userId, List tableNames) { - List ids = new ArrayList<>(tableNames.size()); - // 遍历添加。虽然效率会低一点,但是没必要做成完全批量,因为不会这么大量 - tableNames.forEach(tableName -> ids.add(createCodegen(userId, tableName))); - return ids; - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void updateCodegen(CodegenUpdateReqVO updateReqVO) { - // 校验是否已经存在 - if (codegenTableMapper.selectById(updateReqVO.getTable().getId()) == null) { - throw exception(CODEGEN_TABLE_NOT_EXISTS); - } - - // 更新 table 表定义 - CodegenTableDO updateTableObj = CodegenConvert.INSTANCE.convert(updateReqVO.getTable()); - codegenTableMapper.updateById(updateTableObj); - // 更新 column 字段定义 - List updateColumnObjs = CodegenConvert.INSTANCE.convertList03(updateReqVO.getColumns()); - updateColumnObjs.forEach(updateColumnObj -> codegenColumnMapper.updateById(updateColumnObj)); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void syncCodegenFromDB(Long tableId) { - // 校验是否已经存在 - CodegenTableDO table = codegenTableMapper.selectById(tableId); - if (table == null) { - throw exception(CODEGEN_TABLE_NOT_EXISTS); - } - String tableSchema = codegenProperties.getDbSchemas().iterator().next(); - // 从数据库中,获得数据库表结构 - List schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, table.getTableName()); - - // 执行同步 - this.syncCodegen0(tableId, schemaColumns); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void syncCodegenFromSQL(Long tableId, String sql) { - // 校验是否已经存在 - CodegenTableDO table = codegenTableMapper.selectById(tableId); - if (table == null) { - throw exception(CODEGEN_TABLE_NOT_EXISTS); - } - // 从 SQL 中,获得数据库表结构 - List schemaColumns; - try { - KeyValue> result = CodegenSQLParser.parse(sql); - schemaColumns = result.getValue(); - } catch (Exception ex) { - throw exception(CODEGEN_PARSE_SQL_ERROR); - } - - // 执行同步 - this.syncCodegen0(tableId, schemaColumns); - } - - private void syncCodegen0(Long tableId, List schemaColumns) { - // 校验导入的字段不为空 - if (CollUtil.isEmpty(schemaColumns)) { - throw exception(CODEGEN_SYNC_COLUMNS_NULL); - } - Set schemaColumnNames = CollectionUtils.convertSet(schemaColumns, SchemaColumnDO::getColumnName); - - // 构建 CodegenColumnDO 数组,只同步新增的字段 - List codegenColumns = codegenColumnMapper.selectListByTableId(tableId); - Set codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName); - // 移除已经存在的字段 - schemaColumns.removeIf(column -> codegenColumnNames.contains(column.getColumnName())); - // 计算需要删除的字段 - Set deleteColumnIds = codegenColumns.stream().filter(column -> !schemaColumnNames.contains(column.getColumnName())) - .map(CodegenColumnDO::getId).collect(Collectors.toSet()); - if (CollUtil.isEmpty(schemaColumns) && CollUtil.isEmpty(deleteColumnIds)) { - throw exception(CODEGEN_SYNC_NONE_CHANGE); - } - - // 插入新增的字段 - List columns = codegenBuilder.buildColumns(schemaColumns); - columns.forEach(column -> { - column.setTableId(tableId); - codegenColumnMapper.insert(column); // TODO 批量插入 - }); - // 删除不存在的字段 - if (CollUtil.isNotEmpty(deleteColumnIds)) { - codegenColumnMapper.deleteBatchIds(deleteColumnIds); - } - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteCodegen(Long tableId) { - // 校验是否已经存在 - if (codegenTableMapper.selectById(tableId) == null) { - throw exception(CODEGEN_TABLE_NOT_EXISTS); - } - - // 删除 table 表定义 - codegenTableMapper.deleteById(tableId); - // 删除 column 字段定义 - codegenColumnMapper.deleteListByTableId(tableId); - } - - @Override - public PageResult getCodegenTablePage(CodegenTablePageReqVO pageReqVO) { - return codegenTableMapper.selectPage(pageReqVO); - } - - @Override - public CodegenTableDO getCodegenTablePage(Long id) { - return codegenTableMapper.selectById(id); - } - - @Override - public List getCodeGenTableList() { - return codegenTableMapper.selectList(); - } - - @Override - public List getCodegenColumnListByTableId(Long tableId) { - return codegenColumnMapper.selectListByTableId(tableId); - } - - @Override - public Map generationCodes(Long tableId) { - // 校验是否已经存在 - CodegenTableDO table = codegenTableMapper.selectById(tableId); - if (codegenTableMapper.selectById(tableId) == null) { - throw exception(CODEGEN_TABLE_NOT_EXISTS); - } - List columns = codegenColumnMapper.selectListByTableId(tableId); - if (CollUtil.isEmpty(columns)) { - throw exception(CODEGEN_COLUMN_NOT_EXISTS); - } - - // 执行生成 - return codegenEngine.execute(table, columns); - } - - @Override - public List getSchemaTableList(String tableName, String tableComment) { - List tables = schemaTableMapper.selectList(codegenProperties.getDbSchemas(), tableName, tableComment); - // TODO 强制移除 Quartz 的表,未来做成可配置 - tables.removeIf(table -> table.getTableName().startsWith("QRTZ_")); - tables.removeIf(table -> table.getTableName().startsWith("ACT_")); - return tables; - } - -// /** -// * 修改保存参数校验 -// * -// * @param genTable 业务信息 -// */ -// @Override -// public void validateEdit(GenTable genTable) { -// if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { -// String options = JSON.toJSONString(genTable.getParams()); -// JSONObject paramsObj = JSONObject.parseObject(options); -// if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) { -// throw new CustomException("树编码字段不能为空"); -// } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) { -// throw new CustomException("树父编码字段不能为空"); -// } else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) { -// throw new CustomException("树名称字段不能为空"); -// } -// } -// } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java deleted file mode 100644 index cbced25..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenBuilder.java +++ /dev/null @@ -1,207 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen.inner; - -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.tool.convert.codegen.CodegenConvert; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnHtmlTypeEnum; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenColumnListConditionEnum; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenTemplateTypeEnum; -import com.google.common.collect.Sets; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.*; - -import static cn.hutool.core.text.CharSequenceUtil.*; - -/** - * 代码生成器的 Builder,负责: - * 1. 将数据库的表 {@link SchemaTableDO} 定义,构建成 {@link CodegenTableDO} - * 2. 将数据库的列 {@link SchemaColumnDO} 构定义,建成 {@link CodegenColumnDO} - */ -@Component -public class CodegenBuilder { - - /** - * 字段名与 {@link CodegenColumnListConditionEnum} 的默认映射 - * 注意,字段的匹配以后缀的方式 - */ - private static final Map columnListOperationConditionMappings = - MapUtil.builder() - .put("name", CodegenColumnListConditionEnum.LIKE) - .put("time", CodegenColumnListConditionEnum.BETWEEN) - .put("date", CodegenColumnListConditionEnum.BETWEEN) - .build(); - - /** - * 字段名与 {@link CodegenColumnHtmlTypeEnum} 的默认映射 - * 注意,字段的匹配以后缀的方式 - */ - private static final Map columnHtmlTypeMappings = - MapUtil.builder() - .put("status", CodegenColumnHtmlTypeEnum.RADIO) - .put("sex", CodegenColumnHtmlTypeEnum.RADIO) - .put("type", CodegenColumnHtmlTypeEnum.SELECT) - .put("image", CodegenColumnHtmlTypeEnum.UPLOAD_IMAGE) - .put("file", CodegenColumnHtmlTypeEnum.UPLOAD_FILE) - .put("content", CodegenColumnHtmlTypeEnum.EDITOR) - .put("time", CodegenColumnHtmlTypeEnum.DATETIME) - .put("date", CodegenColumnHtmlTypeEnum.DATETIME) - .build(); - - /** - * 多租户编号的字段名 - */ - public static final String TENANT_ID_FIELD = "tenant_id"; - /** - * {@link cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO} 的字段 - */ - public static final Set BASE_DO_FIELDS = new HashSet<>(); - /** - * 新增操作,不需要传递的字段 - */ - private static final Set CREATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); - /** - * 修改操作,不需要传递的字段 - */ - private static final Set UPDATE_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet(); - /** - * 列表操作的条件,不需要传递的字段 - */ - private static final Set LIST_OPERATION_EXCLUDE_COLUMN = Sets.newHashSet("id"); - /** - * 列表操作的结果,不需要返回的字段 - */ - private static final Set LIST_OPERATION_RESULT_EXCLUDE_COLUMN = Sets.newHashSet(); - - /** - * Java 类型与 MySQL 类型的映射关系 - */ - private static final Map> javaTypeMappings = MapUtil.>builder() - .put(Boolean.class.getSimpleName(), Sets.newHashSet("bit")) - .put(Integer.class.getSimpleName(), Sets.newHashSet("tinyint", "smallint", "mediumint", "int")) - .put(Long.class.getSimpleName(), Collections.singleton("bigint")) - .put(Double.class.getSimpleName(), Sets.newHashSet("float", "double")) - .put(BigDecimal.class.getSimpleName(), Sets.newHashSet("decimal", "numeric")) - .put(String.class.getSimpleName(), Sets.newHashSet("tinytext", "text", "mediumtext", "longtext", // 长文本 - "char", "varchar", "nvarchar", "varchar2")) // 短文本 - .put(Date.class.getSimpleName(), Sets.newHashSet("datetime", "time", "date", "timestamp")) - .put("byte[]", Sets.newHashSet("blob")) - .build(); - - static { - Arrays.stream(ReflectUtil.getFields(BaseDO.class)).forEach(field -> BASE_DO_FIELDS.add(field.getName())); - BASE_DO_FIELDS.add(TENANT_ID_FIELD); - // 处理 OPERATION 相关的字段 - CREATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); - UPDATE_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); - LIST_OPERATION_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); - LIST_OPERATION_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是可能需要传递的 - LIST_OPERATION_RESULT_EXCLUDE_COLUMN.addAll(BASE_DO_FIELDS); - LIST_OPERATION_RESULT_EXCLUDE_COLUMN.remove("createTime"); // 创建时间,还是需要返回的 - } - - public CodegenTableDO buildTable(SchemaTableDO schemaTable) { - CodegenTableDO table = CodegenConvert.INSTANCE.convert(schemaTable); - initTableDefault(table); - return table; - } - - /** - * 初始化 Table 表的默认字段 - * - * @param table 表定义 - */ - private void initTableDefault(CodegenTableDO table) { - // 以 system_dept 举例子。moduleName 为 system、businessName 为 dept、className 为 SystemDept - // 如果不希望 System 前缀,则可以手动在【代码生成 - 修改生成配置 - 基本信息】,将实体类名称改为 Dept 即可 - table.setModuleName(StrUtil.subBefore(table.getTableName(), - '_', false)); // 第一个 _ 前缀的前面,作为 module 名字 - table.setBusinessName(toCamelCase(subAfter(table.getTableName(), - '_', false))); // 第一步,第一个 _ 前缀的后面,作为 module 名字; 第二步,可能存在多个 _ 的情况,转换成驼峰 - table.setClassName(upperFirst(toCamelCase(table.getTableName()))); // 驼峰 + 首字母大写 - table.setClassComment(subBefore(table.getTableComment(), // 去除结尾的表,作为类描述 - '表', true)); - table.setAuthor("芋艿"); // TODO 稍后改成创建人 - table.setTemplateType(CodegenTemplateTypeEnum.CRUD.getType()); - } - - public List buildColumns(List schemaColumns) { - List columns = CodegenConvert.INSTANCE.convertList(schemaColumns); - columns.forEach(this::initColumnDefault); - return columns; - } - - /** - * 初始化 Column 列的默认字段 - * - * @param column 列定义 - */ - private void initColumnDefault(CodegenColumnDO column) { - // 处理 Java 相关的字段的默认值 - processColumnJava(column); - // 处理 CRUD 相关的字段的默认值 - processColumnOperation(column); - // 处理 UI 相关的字段的默认值 - processColumnUI(column); - } - - private void processColumnJava(CodegenColumnDO column) { - // 处理 javaField 字段 - column.setJavaField(toCamelCase(column.getColumnName())); - // 处理 dictType 字段,暂无 - // 处理 javaType 字段 - String dbType = StrUtil.subBefore(column.getColumnType(), '(', false); - javaTypeMappings.entrySet().stream() - .filter(entry -> entry.getValue().contains(dbType)) - .findFirst().ifPresent(entry -> column.setJavaType(entry.getKey())); - if (column.getJavaType() == null) { - throw new IllegalStateException(String.format("column(%s) 的数据库类型(%s) 找不到匹配的 Java 类型", - column.getColumnName(), column.getColumnType())); - } - } - - private void processColumnOperation(CodegenColumnDO column) { - // 处理 createOperation 字段 - column.setCreateOperation(!CREATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) - && !column.getPrimaryKey()); // 对于主键,创建时无需传递 - // 处理 updateOperation 字段 - column.setUpdateOperation(!UPDATE_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) - || column.getPrimaryKey()); // 对于主键,更新时需要传递 - // 处理 listOperation 字段 - column.setListOperation(!LIST_OPERATION_EXCLUDE_COLUMN.contains(column.getJavaField()) - && !column.getPrimaryKey()); // 对于主键,列表过滤不需要传递 - // 处理 listOperationCondition 字段 - columnListOperationConditionMappings.entrySet().stream() - .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) - .findFirst().ifPresent(entry -> column.setListOperationCondition(entry.getValue().getCondition())); - if (column.getListOperationCondition() == null) { - column.setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition()); - } - // 处理 listOperationResult 字段 - column.setListOperationResult(!LIST_OPERATION_RESULT_EXCLUDE_COLUMN.contains(column.getJavaField())); - } - - private void processColumnUI(CodegenColumnDO column) { - // 基于后缀进行匹配 - columnHtmlTypeMappings.entrySet().stream() - .filter(entry -> StrUtil.endWithIgnoreCase(column.getJavaField(), entry.getKey())) - .findFirst().ifPresent(entry -> column.setHtmlType(entry.getValue().getType())); - // 如果是 Boolean 类型时,设置为 radio 类型. - // 其它类型,因为字段名可以相对保障,所以不进行处理。例如说 date 对应 datetime 类型. - if (Boolean.class.getSimpleName().equals(column.getJavaType())) { - column.setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType()); - } - // 兜底,设置默认为 input 类型 - if (column.getHtmlType() == null) { - column.setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType()); - } - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java deleted file mode 100644 index 80bd1d3..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenEngine.java +++ /dev/null @@ -1,225 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen.inner; - -import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.extra.template.TemplateConfig; -import cn.hutool.extra.template.TemplateEngine; -import cn.hutool.extra.template.engine.velocity.VelocityEngine; -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; -import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; -import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; -import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.enums.codegen.CodegenSceneEnum; -import cn.iocoder.yudao.module.tool.framework.codegen.config.CodegenProperties; -import com.google.common.collect.Maps; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; -import javax.annotation.Resource; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import static cn.hutool.core.map.MapUtil.getStr; -import static cn.hutool.core.text.CharSequenceUtil.*; - -/** - * 代码生成的引擎,用于具体生成代码 - * 目前基于 {@link org.apache.velocity.app.Velocity} 模板引擎实现 - * - * 考虑到 Java 模板引擎的框架非常多,Freemarker、Velocity、Thymeleaf 等等,所以我们采用 hutool 封装的 {@link cn.hutool.extra.template.Template} 抽象 - * - * @author 芋道源码 - */ -@Component -public class CodegenEngine { - - /** - * 模板配置 - * key:模板在 resources 的地址 - * value:生成的路径 - */ - private static final Map TEMPLATES = MapUtil.builder(new LinkedHashMap<>()) // 有序 - // Java module-impl Main - .put(javaTemplatePath("controller/vo/baseVO"), javaModuleImplVOFilePath("BaseVO")) - .put(javaTemplatePath("controller/vo/createReqVO"), javaModuleImplVOFilePath("CreateReqVO")) - .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO")) - .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO")) - .put(javaTemplatePath("controller/vo/updateReqVO"), javaModuleImplVOFilePath("UpdateReqVO")) - .put(javaTemplatePath("controller/vo/exportReqVO"), javaModuleImplVOFilePath("ExportReqVO")) - .put(javaTemplatePath("controller/vo/excelVO"), javaModuleImplVOFilePath("ExcelVO")) - .put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath()) - .put(javaTemplatePath("convert/convert"), - javaModuleImplMainFilePath("convert/${table.businessName}/${table.className}Convert")) - .put(javaTemplatePath("dal/do"), - javaModuleImplMainFilePath("dal/dataobject/${table.businessName}/${table.className}DO")) - .put(javaTemplatePath("dal/mapper"), - javaModuleImplMainFilePath("dal/mysql/${table.businessName}/${table.className}Mapper")) - .put(javaTemplatePath("service/serviceImpl"), - javaModuleImplMainFilePath("service/${table.businessName}/${table.className}ServiceImpl")) - .put(javaTemplatePath("service/service"), - javaModuleImplMainFilePath("service/${table.businessName}/${table.className}Service")) - // Java module-impl Test - .put(javaTemplatePath("test/serviceTest"), - javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest")) - // Java module-api Main - .put(javaTemplatePath("enums/errorcode"), javaModuleApiMainFilePath("enums/ErrorCodeConstants_手动操作")) - // Vue - .put(vueTemplatePath("views/index.vue"), - vueFilePath("views/${table.moduleName}/${classNameVar}/index.vue")) - .put(vueTemplatePath("api/api.js"), - vueFilePath("api/${table.moduleName}/${classNameVar}.js")) - // SQL - .put("codegen/sql/sql.vm", "sql/sql.sql") - .put("codegen/sql/h2.vm", "sql/h2.sql") - .build(); - - @Resource - private CodegenProperties codegenProperties; - - /** - * 模板引擎,由 hutool 实现 - */ - private final TemplateEngine templateEngine; - /** - * 全局通用变量映射 - */ - private final Map globalBindingMap = new HashMap<>(); - - public CodegenEngine() { - // 初始化 TemplateEngine 属性 - TemplateConfig config = new TemplateConfig(); - config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH); - this.templateEngine = new VelocityEngine(config); - } - - @PostConstruct - private void initGlobalBindingMap() { - // 全局配置 - globalBindingMap.put("basePackage", codegenProperties.getBasePackage()); - globalBindingMap.put("baseFrameworkPackage", codegenProperties.getBasePackage() - + '.' + "framework"); // 用于后续获取测试类的 package 地址 - // 全局 Java Bean - globalBindingMap.put("CommonResultClassName", CommonResult.class.getName()); - globalBindingMap.put("PageResultClassName", PageResult.class.getName()); - // VO 类,独有字段 - globalBindingMap.put("PageParamClassName", PageParam.class.getName()); - globalBindingMap.put("DictFormatClassName", DictFormat.class.getName()); - // DO 类,独有字段 - globalBindingMap.put("BaseDOClassName", BaseDO.class.getName()); - globalBindingMap.put("baseDOFields", CodegenBuilder.BASE_DO_FIELDS); - globalBindingMap.put("QueryWrapperClassName", LambdaQueryWrapperX.class.getName()); - globalBindingMap.put("BaseMapperClassName", BaseMapperX.class.getName()); - // Util 工具类 - globalBindingMap.put("ServiceExceptionUtilClassName", ServiceExceptionUtil.class.getName()); - globalBindingMap.put("DateUtilsClassName", DateUtils.class.getName()); - globalBindingMap.put("ExcelUtilsClassName", ExcelUtils.class.getName()); - globalBindingMap.put("ObjectUtilsClassName", ObjectUtils.class.getName()); - globalBindingMap.put("DictConvertClassName", DictConvert.class.getName()); - globalBindingMap.put("OperateLogClassName", OperateLog.class.getName()); - globalBindingMap.put("OperateTypeEnumClassName", OperateTypeEnum.class.getName()); - } - - public Map execute(CodegenTableDO table, List columns) { - // 创建 bindingMap - Map bindingMap = new HashMap<>(globalBindingMap); - bindingMap.put("table", table); - bindingMap.put("columns", columns); - bindingMap.put("primaryColumn", CollectionUtils.findFirst(columns, CodegenColumnDO::getPrimaryKey)); // 主键字段 - bindingMap.put("sceneEnum", CodegenSceneEnum.valueOf(table.getScene())); - - // className 相关 - // 去掉指定前缀,将 TestDictType 转换成 DictType. 因为在 create 等方法后,不需要带上 Test 前缀 - String simpleClassName = removePrefix(table.getClassName(), upperFirst(table.getModuleName())); - bindingMap.put("simpleClassName", simpleClassName); - bindingMap.put("simpleClassName_underlineCase", toUnderlineCase(simpleClassName)); // 将 DictType 转换成 dict_type - bindingMap.put("classNameVar", lowerFirst(simpleClassName)); // 将 DictType 转换成 dictType,用于变量 - // 将 DictType 转换成 dict-type - String simpleClassNameStrikeCase = toSymbolCase(simpleClassName, '-'); - bindingMap.put("simpleClassName_strikeCase", simpleClassNameStrikeCase); - // permission 前缀 - bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase); - - // 执行生成 - final Map result = Maps.newLinkedHashMapWithExpectedSize(TEMPLATES.size()); // 有序 - TEMPLATES.forEach((vmPath, filePath) -> { - filePath = formatFilePath(filePath, bindingMap); - String content = templateEngine.getTemplate(vmPath).render(bindingMap); - result.put(filePath, content); - }); - return result; - } - - private String formatFilePath(String filePath, Map bindingMap) { - filePath = StrUtil.replace(filePath, "${basePackage}", - getStr(bindingMap, "basePackage").replaceAll("\\.", "/")); - filePath = StrUtil.replace(filePath, "${classNameVar}", - getStr(bindingMap, "classNameVar")); - // sceneEnum 包含的字段 - CodegenSceneEnum sceneEnum = (CodegenSceneEnum) bindingMap.get("sceneEnum"); - filePath = StrUtil.replace(filePath, "${sceneEnum.prefixClass}", sceneEnum.getPrefixClass()); - filePath = StrUtil.replace(filePath, "${sceneEnum.basePackage}", sceneEnum.getBasePackage()); - // table 包含的字段 - CodegenTableDO table = (CodegenTableDO) bindingMap.get("table"); - filePath = StrUtil.replace(filePath, "${table.moduleName}", table.getModuleName()); - filePath = StrUtil.replace(filePath, "${table.businessName}", table.getBusinessName()); - filePath = StrUtil.replace(filePath, "${table.className}", table.getClassName()); - return filePath; - } - - private static String javaTemplatePath(String path) { - return "codegen/java/" + path + ".vm"; - } - - private static String javaModuleImplVOFilePath(String path) { - return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" + - "vo/${sceneEnum.prefixClass}${table.className}" + path, "impl", "main"); - } - - private static String javaModuleImplControllerFilePath() { - return javaModuleFilePath("controller/${sceneEnum.basePackage}/${table.businessName}/" + - "${sceneEnum.prefixClass}${table.className}Controller", "impl", "main"); - } - - private static String javaModuleImplMainFilePath(String path) { - return javaModuleFilePath(path, "impl", "main"); - } - - private static String javaModuleApiMainFilePath(String path) { - return javaModuleFilePath(path, "api", "main"); - } - - private static String javaModuleImplTestFilePath(String path) { - return javaModuleFilePath(path, "impl", "test"); - } - - private static String javaModuleFilePath(String path, String module, String src) { - return "yudao-module-${table.moduleName}/" + // 顶级模块 - "yudao-module-${table.moduleName}-" + module + "/" + // 子模块 - "src/" + src + "/java/${basePackage}/module/${table.moduleName}/" + path + ".java"; - } - - private static String vueTemplatePath(String path) { - return "codegen/vue/" + path + ".vm"; - } - - private static String vueFilePath(String path) { - return "yudao-ui-${sceneEnum.basePackage}/" + // 顶级目录 - "src/" + path; - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java deleted file mode 100644 index d58ac04..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/codegen/inner/CodegenSQLParser.java +++ /dev/null @@ -1,117 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen.inner; - -import cn.hutool.core.collection.CollUtil; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaTableDO; -import com.alibaba.druid.DbType; -import com.alibaba.druid.sql.ast.expr.SQLCharExpr; -import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; -import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; -import com.alibaba.druid.sql.ast.statement.SQLTableElement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; -import com.alibaba.druid.sql.repository.SchemaRepository; -import org.apache.commons.collections4.KeyValue; -import org.apache.commons.collections4.keyvalue.DefaultKeyValue; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import static com.alibaba.druid.sql.SQLUtils.normalize; - -/** - * SQL 解析器,将创建表的 SQL,解析成 {@link SchemaTableDO} 和 {@link SchemaColumnDO} 对象, - * 后续可以基于它们,生成代码~ - * - * @author 芋道源码 - */ -public class CodegenSQLParser { - - /** - * 解析建表 SQL 语句,返回 {@link SchemaTableDO} 和 {@link SchemaColumnDO} 对象 - * - * @param sql 建表 SQL 语句 - * @return 解析结果 - */ - public static KeyValue> parse(String sql) { - // 解析 SQL 成 Statement - SQLCreateTableStatement statement = parseCreateSQL(sql); - // 解析 Table 表 - SchemaTableDO table = parseTable(statement); - // 解析 Column 字段 - List columns = parseColumns(statement); - columns.forEach(column -> column.setTableName(table.getTableName())); - // 返回 - return new DefaultKeyValue<>(table, columns); - } - - /** - * 使用 Druid 工具,建表 SQL 语句 - * - * @param sql 建表 SQL 语句 - * @return 创建 Statement - */ - private static SQLCreateTableStatement parseCreateSQL(String sql) { - // 解析 SQL - SchemaRepository repository = new SchemaRepository(DbType.mysql); - repository.console(sql); - // 获得该表对应的 MySqlCreateTableStatement 对象 - String tableName = CollUtil.getFirst(repository.getDefaultSchema().getObjects()).getName(); - return (MySqlCreateTableStatement) repository.findTable(tableName).getStatement(); - } - - private static SchemaTableDO parseTable(SQLCreateTableStatement statement) { - return SchemaTableDO.builder() - .tableName(statement.getTableSource().getTableName(true)) - .tableComment(getCommentText(statement)) - .build(); - } - - private static String getCommentText(SQLCreateTableStatement statement) { - if (statement == null || statement.getComment() == null) { - return ""; - } - return ((SQLCharExpr) statement.getComment()).getText(); - } - - private static List parseColumns(SQLCreateTableStatement statement) { - List columns = new ArrayList<>(); - statement.getTableElementList().forEach(element -> parseColumn(columns, element)); - return columns; - } - - private static void parseColumn(List columns, SQLTableElement element) { - // 处理主键 - if (element instanceof SQLPrimaryKey) { - parsePrimaryKey(columns, (SQLPrimaryKey) element); - return; - } - // 处理字段定义 - if (element instanceof SQLColumnDefinition) { - parseColumnDefinition(columns, (SQLColumnDefinition) element); - } - } - - private static void parsePrimaryKey(List columns, SQLPrimaryKey primaryKey) { - String columnName = normalize(primaryKey.getColumns().get(0).toString()); // 暂时不考虑联合主键 - // 匹配 columns 主键字段,设置为 primary - columns.stream().filter(column -> column.getColumnName().equals(columnName)) - .forEach(column -> column.setPrimaryKey(true)); - } - - private static void parseColumnDefinition(List columns, SQLColumnDefinition definition) { - String text = definition.toString().toUpperCase(); - columns.add(SchemaColumnDO.builder() - .columnName(normalize(definition.getColumnName())) - .columnType(definition.getDataType().toString()) - .columnComment(Objects.isNull(definition.getComment()) ? "" - : normalize(definition.getComment().toString())) - .nullable(!text.contains(" NOT NULL")) - .primaryKey(false) - .autoIncrement(text.contains("AUTO_INCREMENT")) - .ordinalPosition(columns.size() + 1) - .build()); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java deleted file mode 100755 index 017aaa9..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoService.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.test; - -import java.util.*; -import javax.validation.*; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.*; -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -/** - * 字典类型 Service 接口 - * - * @author 芋道源码 - */ -public interface TestDemoService { - - /** - * 创建字典类型 - * - * @param createReqVO 创建信息 - * @return 编号 - */ - Long createTestDemo(@Valid TestDemoCreateReqVO createReqVO); - - /** - * 更新字典类型 - * - * @param updateReqVO 更新信息 - */ - void updateTestDemo(@Valid TestDemoUpdateReqVO updateReqVO); - - /** - * 删除字典类型 - * - * @param id 编号 - */ - void deleteTestDemo(Long id); - - /** - * 获得字典类型 - * - * @param id 编号 - * @return 字典类型 - */ - TestDemoDO getTestDemo(Long id); - - /** - * 获得字典类型列表 - * - * @param ids 编号 - * @return 字典类型列表 - */ - List getTestDemoList(Collection ids); - - /** - * 获得字典类型分页 - * - * @param pageReqVO 分页查询 - * @return 字典类型分页 - */ - PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO); - - /** - * 获得字典类型列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return 字典类型列表 - */ - List getTestDemoList(TestDemoExportReqVO exportReqVO); - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java b/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java deleted file mode 100755 index dcd8e97..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.test; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import java.util.*; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.*; -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; -import cn.iocoder.yudao.framework.common.pojo.PageResult; - -import cn.iocoder.yudao.module.tool.convert.test.TestDemoConvert; -import cn.iocoder.yudao.module.tool.dal.mysql.test.TestDemoMapper; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.*; - -/** - * 字典类型 Service 实现类 - * - * @author 芋道源码 - */ -@Service -@Validated -public class TestDemoServiceImpl implements TestDemoService { - - @Resource - private TestDemoMapper testDemoMapper; - - @Override - public Long createTestDemo(TestDemoCreateReqVO createReqVO) { - // 插入 - TestDemoDO testDemo = TestDemoConvert.INSTANCE.convert(createReqVO); - testDemoMapper.insert(testDemo); - // 返回 - return testDemo.getId(); - } - - @Override - public void updateTestDemo(TestDemoUpdateReqVO updateReqVO) { - // 校验存在 - this.validateTestDemoExists(updateReqVO.getId()); - // 更新 - TestDemoDO updateObj = TestDemoConvert.INSTANCE.convert(updateReqVO); - testDemoMapper.updateById(updateObj); - } - - @Override - public void deleteTestDemo(Long id) { - // 校验存在 - this.validateTestDemoExists(id); - // 删除 - testDemoMapper.deleteById(id); - } - - private void validateTestDemoExists(Long id) { - if (testDemoMapper.selectById(id) == null) { - throw exception(TEST_DEMO_NOT_EXISTS); - } - } - - @Override - public TestDemoDO getTestDemo(Long id) { - return testDemoMapper.selectById(id); - } - - @Override - public List getTestDemoList(Collection ids) { - return testDemoMapper.selectBatchIds(ids); - } - - @Override - public PageResult getTestDemoPage(TestDemoPageReqVO pageReqVO) { - return testDemoMapper.selectPage(pageReqVO); - } - - @Override - public List getTestDemoList(TestDemoExportReqVO exportReqVO) { - return testDemoMapper.selectList(exportReqVO); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm deleted file mode 100644 index 5b05467..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/controller.vm +++ /dev/null @@ -1,109 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}; - -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -#if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end - -import io.swagger.annotations.*; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import ${PageResultClassName}; -import ${CommonResultClassName}; -import static ${CommonResultClassName}.success; - -import ${ExcelUtilsClassName}; - -import ${OperateLogClassName}; -import static ${OperateTypeEnumClassName}.*; - -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; -import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; - -@Api(tags = "${sceneEnum.name} - ${table.classComment}") -@RestController -##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 -@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") -@Validated -public class ${sceneEnum.prefixClass}${table.className}Controller { - - @Resource - private ${table.className}Service ${classNameVar}Service; - - @PostMapping("/create") - @ApiOperation("创建${table.classComment}") -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')")#end - - public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO) { - return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); - } - - @PutMapping("/update") - @ApiOperation("更新${table.classComment}") -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')")#end - - public CommonResult update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO) { - ${classNameVar}Service.update${simpleClassName}(updateReqVO); - return success(true); - } - - @DeleteMapping("/delete") - @ApiOperation("删除${table.classComment}") - @ApiImplicitParam(name = "id", value = "编号", required = true, dataTypeClass = ${primaryColumn.javaType}.class) -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')")#end - - public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { - ${classNameVar}Service.delete${simpleClassName}(id); - return success(true); - } - - @GetMapping("/get") - @ApiOperation("获得${table.classComment}") - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = ${primaryColumn.javaType}.class) -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")#end - - public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { - ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); - return success(${table.className}Convert.INSTANCE.convert(${classNameVar})); - } - - @GetMapping("/list") - @ApiOperation("获得${table.classComment}列表") - @ApiImplicitParam(name = "ids", value = "编号列表", required = true, example = "1024,2048", dataTypeClass = List.class) -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")#end - - public CommonResult> get${simpleClassName}List(@RequestParam("ids") Collection<${primaryColumn.javaType}> ids) { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(ids); - return success(${table.className}Convert.INSTANCE.convertList(list)); - } - - @GetMapping("/page") - @ApiOperation("获得${table.classComment}分页") -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')")#end - - public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageVO) { - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageVO); - return success(${table.className}Convert.INSTANCE.convertPage(pageResult)); - } - - @GetMapping("/export-excel") - @ApiOperation("导出${table.classComment} Excel") -#if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')")#end - - @OperateLog(type = EXPORT) - public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO, - HttpServletResponse response) throws IOException { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(exportReqVO); - // 导出 Excel - List<${sceneEnum.prefixClass}${table.className}ExcelVO> datas = ${table.className}Convert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}ExcelVO.class, datas); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm deleted file mode 100644 index 2e22225..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/_column.vm +++ /dev/null @@ -1,13 +0,0 @@ -## 提供给 baseVO、createVO、updateVO 生成字段 - @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) -#if (!${column.nullable})## 判断 @NotEmpty 和 @NotNull 注解 -#if (${field.fieldType} == 'String') - @NotEmpty(message = "${column.columnComment}不能为空") -#else - @NotNull(message = "${column.columnComment}不能为空") -#end -#end -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end - private ${column.javaType} ${column.javaField}; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm deleted file mode 100644 index 3036c16..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/baseVO.vm +++ /dev/null @@ -1,31 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult} - && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end - -/** -* ${table.classComment} Base VO,提供给添加、修改、详细的子 VO 使用 -* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 -*/ -@Data -public class ${sceneEnum.prefixClass}${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.createOperation} && ${column.updateOperation} && ${column.listOperationResult})##通用操作 - #parse("codegen/java/controller/vo/_column.vm") - -#end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm deleted file mode 100644 index ca13efa..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/createReqVO.vm +++ /dev/null @@ -1,30 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}) - && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end - -@ApiModel("${sceneEnum.name} - ${table.classComment}创建 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${sceneEnum.prefixClass}${table.className}CreateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.createOperation} && (!${column.updateOperation} || !${column.listOperationResult}))##不是通用字段 - #parse("codegen/java/controller/vo/_column.vm") - -#end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm deleted file mode 100644 index 2ce6f28..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/excelVO.vm +++ /dev/null @@ -1,37 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -import com.alibaba.excel.annotation.ExcelProperty; -#foreach ($column in $columns) -#if ("$!column.dictType" != "")## 有设置数据字典 -import ${DictFormatClassName}; -import ${DictConvertClassName}; - -#break -#end -#end - -/** - * ${table.classComment} Excel VO - * - * @author ${table.author} - */ -@Data -public class ${sceneEnum.prefixClass}${table.className}ExcelVO { - -#foreach ($column in $columns) - #if (${column.listOperationResult})##返回字段 - #if ("$!column.dictType" != "")##处理枚举值 - @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) - @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 - #else - @ExcelProperty("${column.columnComment}") - #end - private ${column.javaType} ${column.javaField}; - - #end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm deleted file mode 100644 index 10ab97a..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/exportReqVO.vm +++ /dev/null @@ -1,42 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import ${PageParamClassName}; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end -## 字段模板 -#macro(columnTpl $prefix $prefixStr) -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end - @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) - private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; -#end - -@ApiModel(value = "${sceneEnum.name} - ${table.classComment} Excel 导出 Request VO", description = "参数和 ${table.className}PageReqVO 是一致的") -@Data -public class ${sceneEnum.prefixClass}${table.className}ExportReqVO { - -#foreach ($column in $columns) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperation})##查询操作 -#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - #columnTpl('begin', '开始') - - #columnTpl('end', '结束') -#else##情况二,非 Between 的时间 - #columnTpl('', '') -#end - -#end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm deleted file mode 100644 index 5f5952c..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/pageReqVO.vm +++ /dev/null @@ -1,44 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import ${PageParamClassName}; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperation} && ${column.javaType} == "Date")## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end -## 字段模板 -#macro(columnTpl $prefix $prefixStr) -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end - @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) - private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; -#end - -@ApiModel("${sceneEnum.name} - ${table.classComment}分页 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${sceneEnum.prefixClass}${table.className}PageReqVO extends PageParam { - -#foreach ($column in $columns) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperation})##查询操作 -#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - #columnTpl('begin', '开始') - - #columnTpl('end', '结束') -#else##情况二,非 Between 的时间 - #columnTpl('', '') -#end - -#end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm deleted file mode 100644 index 4034b6f..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/respVO.vm +++ /dev/null @@ -1,20 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; - -@ApiModel("${sceneEnum.name} - ${table.classComment} Response VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${sceneEnum.prefixClass}${table.className}RespVO extends ${sceneEnum.prefixClass}${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.listOperationResult} && (!${column.createOperation} || !${column.updateOperation}))##不是通用字段 - @ApiModelProperty(value = "${column.columnComment}"#if (!${column.nullable}), required = true#end#if ("$!column.example" != ""), example = "${column.example}"#end) - private ${column.javaType} ${column.javaField}; - -#end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm deleted file mode 100644 index 58ce1f7..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/controller/vo/updateReqVO.vm +++ /dev/null @@ -1,30 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; -import io.swagger.annotations.*; -import javax.validation.constraints.*; -## 处理 Date 字段的引入 -#foreach ($column in $columns) -#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}) - && ${column.javaType} == "Date"))## 时间类型 -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end - -@ApiModel("${sceneEnum.name} - ${table.classComment}更新 Request VO") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${sceneEnum.prefixClass}${table.className}UpdateReqVO extends ${sceneEnum.prefixClass}${table.className}BaseVO { - -#foreach ($column in $columns) -#if (${column.updateOperation} && (!${column.createOperation} || !${column.listOperationResult}))##不是通用字段 - #parse("codegen/java/controller/vo/_column.vm") - -#end -#end -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm deleted file mode 100644 index 6176e0f..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/convert/convert.vm +++ /dev/null @@ -1,34 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.convert.${table.businessName}; - -import java.util.*; - -import ${PageResultClassName}; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; - -/** - * ${table.classComment} Convert - * - * @author ${table.author} - */ -@Mapper -public interface ${table.className}Convert { - - ${table.className}Convert INSTANCE = Mappers.getMapper(${table.className}Convert.class); - - ${table.className}DO convert(${sceneEnum.prefixClass}${table.className}CreateReqVO bean); - - ${table.className}DO convert(${sceneEnum.prefixClass}${table.className}UpdateReqVO bean); - - ${sceneEnum.prefixClass}${table.className}RespVO convert(${table.className}DO bean); - - List<${sceneEnum.prefixClass}${table.className}RespVO> convertList(List<${table.className}DO> list); - - PageResult<${sceneEnum.prefixClass}${table.className}RespVO> convertPage(PageResult<${table.className}DO> page); - - List<${sceneEnum.prefixClass}${table.className}ExcelVO> convertList02(List<${table.className}DO> list); - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm deleted file mode 100644 index 687a090..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/do.vm +++ /dev/null @@ -1,38 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}; - -import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import ${BaseDOClassName}; - -/** - * ${table.classComment} DO - * - * @author ${table.author} - */ -@TableName("${table.tableName}") -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ${table.className}DO extends BaseDO { - -#foreach ($column in $columns) -#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 - /** - * ${column.columnComment} - #if ("$!column.dictType" != "")##处理枚举值 - * - * 枚举 {@link TODO ${column.dictType} 对应的类} - #end - */ - #if (${column.primaryKey})##处理主键 - @TableId#if (${column.javaType} == 'String')type = IdType.INPUT)#end - #end - private ${column.javaType} ${column.javaField}; -#end -#end - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm deleted file mode 100644 index cab43ef..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/dal/mapper.vm +++ /dev/null @@ -1,66 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}; - -import java.util.*; - -import ${PageResultClassName}; -import ${QueryWrapperClassName}; -import ${BaseMapperClassName}; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import org.apache.ibatis.annotations.Mapper; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; - -## 字段模板 -#macro(listCondition) -#foreach ($column in $columns) -#if (${column.listOperation}) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperationCondition} == "=")##情况一,= 的时候 - .eqIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 - .neIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == ">")##情况三,> 的时候 - .gtIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 - .geIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "<")##情况五,< 的时候 - .ltIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 - .leIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 - .likeIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 - .betweenIfPresent(${table.className}DO::get${JavaField}, reqVO.getBegin${JavaField}(), reqVO.getEnd${JavaField}()) -#end -#end -#end -#end -/** - * ${table.classComment} Mapper - * - * @author ${table.author} - */ -@Mapper -public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { - - default PageResult<${table.className}DO> selectPage(${sceneEnum.prefixClass}${table.className}PageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX<${table.className}DO>() - #listCondition() - .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 - - } - - default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ExportReqVO reqVO) { - return selectList(new LambdaQueryWrapperX<${table.className}DO>() - #listCondition() - .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 - - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm deleted file mode 100644 index a9a6daf..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/enums/errorcode.vm +++ /dev/null @@ -1,3 +0,0 @@ -// TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! -// ========== ${table.classComment} TODO 补充编号 ========== -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm deleted file mode 100644 index b8c6376..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/service.vm +++ /dev/null @@ -1,70 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; - -import java.util.*; -import javax.validation.*; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${PageResultClassName}; - -/** - * ${table.classComment} Service 接口 - * - * @author ${table.author} - */ -public interface ${table.className}Service { - - /** - * 创建${table.classComment} - * - * @param createReqVO 创建信息 - * @return 编号 - */ - ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO); - - /** - * 更新${table.classComment} - * - * @param updateReqVO 更新信息 - */ - void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO); - - /** - * 删除${table.classComment} - * - * @param id 编号 - */ - void delete${simpleClassName}(${primaryColumn.javaType} id); - - /** - * 获得${table.classComment} - * - * @param id 编号 - * @return ${table.classComment} - */ - ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); - - /** - * 获得${table.classComment}列表 - * - * @param ids 编号 - * @return ${table.classComment}列表 - */ - List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids); - - /** - * 获得${table.classComment}分页 - * - * @param pageReqVO 分页查询 - * @return ${table.classComment}分页 - */ - PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO); - - /** - * 获得${table.classComment}列表, 用于 Excel 导出 - * - * @param exportReqVO 查询条件 - * @return ${table.classComment}列表 - */ - List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO); - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm deleted file mode 100644 index 85dfa0a..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/service/serviceImpl.vm +++ /dev/null @@ -1,82 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; - -import org.springframework.stereotype.Service; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; - -import java.util.*; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${PageResultClassName}; - -import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert; -import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; - -import static ${ServiceExceptionUtilClassName}.exception; -import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; - -/** - * ${table.classComment} Service 实现类 - * - * @author ${table.author} - */ -@Service -@Validated -public class ${table.className}ServiceImpl implements ${table.className}Service { - - @Resource - private ${table.className}Mapper ${classNameVar}Mapper; - - @Override - public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO) { - // 插入 - ${table.className}DO ${classNameVar} = ${table.className}Convert.INSTANCE.convert(createReqVO); - ${classNameVar}Mapper.insert(${classNameVar}); - // 返回 - return ${classNameVar}.getId(); - } - - @Override - public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO) { - // 校验存在 - this.validate${simpleClassName}Exists(updateReqVO.getId()); - // 更新 - ${table.className}DO updateObj = ${table.className}Convert.INSTANCE.convert(updateReqVO); - ${classNameVar}Mapper.updateById(updateObj); - } - - @Override - public void delete${simpleClassName}(${primaryColumn.javaType} id) { - // 校验存在 - this.validate${simpleClassName}Exists(id); - // 删除 - ${classNameVar}Mapper.deleteById(id); - } - - private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { - if (${classNameVar}Mapper.selectById(id) == null) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - } - - @Override - public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { - return ${classNameVar}Mapper.selectById(id); - } - - @Override - public List<${table.className}DO> get${simpleClassName}List(Collection<${primaryColumn.javaType}> ids) { - return ${classNameVar}Mapper.selectBatchIds(ids); - } - - @Override - public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { - return ${classNameVar}Mapper.selectPage(pageReqVO); - } - - @Override - public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO) { - return ${classNameVar}Mapper.selectList(exportReqVO); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm deleted file mode 100644 index 53b7429..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/java/test/serviceTest.vm +++ /dev/null @@ -1,161 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - -import ${basePackage}.module.${table.moduleName}.test.BaseDbUnitTest;## 每个项目,默认有一个基础 DB Test 基类 - -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; -import ${PageResultClassName}; - -import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; - -import static cn.hutool.core.util.RandomUtil.*; -import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; -import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; -import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; -import static ${ObjectUtilsClassName}.*; -import static ${DateUtilsClassName}.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -## 字段模板 -#macro(getPageCondition $VO) - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - o.set$JavaField(null); - #end - #end - }); - ${classNameVar}Mapper.insert(db${simpleClassName}); - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - // 测试 ${column.javaField} 不匹配 - ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); - #end - #end - // 准备参数 - ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}(); - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 - reqVO.setBegin${JavaField}(null); - reqVO.setEnd${JavaField}(null); - #else - reqVO.set$JavaField(null); - #end - #end - #end -#end -/** -* {@link ${table.className}ServiceImpl} 的单元测试类 -* -* @author ${table.author} -*/ -@Import(${table.className}ServiceImpl.class) -public class ${table.className}ServiceImplTest extends BaseDbUnitTest { - - @Resource - private ${table.className}ServiceImpl ${classNameVar}Service; - - @Resource - private ${table.className}Mapper ${classNameVar}Mapper; - - @Test - public void testCreate${simpleClassName}_success() { - // 准备参数 - ${sceneEnum.prefixClass}${table.className}CreateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}CreateReqVO.class); - - // 调用 - ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(reqVO); - // 断言 - assertNotNull(${classNameVar}Id); - // 校验记录的属性是否正确 - ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); - assertPojoEquals(reqVO, ${classNameVar}); - } - - @Test - public void testUpdate${simpleClassName}_success() { - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); - ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 - // 准备参数 - ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class, o -> { - o.setId(db${simpleClassName}.getId()); // 设置更新的 ID - }); - - // 调用 - ${classNameVar}Service.update${simpleClassName}(reqVO); - // 校验是否更新正确 - ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, ${classNameVar}); - } - - @Test - public void testUpdate${simpleClassName}_notExists() { - // 准备参数 - ${sceneEnum.prefixClass}${table.className}UpdateReqVO reqVO = randomPojo(${sceneEnum.prefixClass}${table.className}UpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(reqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - - @Test - public void testDelete${simpleClassName}_success() { - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); - ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 - // 准备参数 - ${primaryColumn.javaType} id = db${simpleClassName}.getId(); - - // 调用 - ${classNameVar}Service.delete${simpleClassName}(id); - // 校验数据不存在了 - assertNull(${classNameVar}Mapper.selectById(id)); - } - - @Test - public void testDelete${simpleClassName}_notExists() { - // 准备参数 - ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); - - // 调用, 并断言异常 - assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - - @Test // TODO 请修改 null 为需要的值 - public void testGet${simpleClassName}Page() { - #getPageCondition("PageReqVO") - - // 调用 - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); - } - - @Test // TODO 请修改 null 为需要的值 - public void testGet${simpleClassName}List() { - #getPageCondition("ExportReqVO") - - // 调用 - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(db${simpleClassName}, list.get(0)); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm deleted file mode 100644 index 842605a..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/h2.vm +++ /dev/null @@ -1,24 +0,0 @@ --- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "${table.tableName}" ( -#foreach ($column in $columns) - #if (${column.primaryKey})##处理主键 - "${column.javaField}"#if (${column.javaType} == 'String') ${column.columnType} NOT NULL#else ${column.columnType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end, - #else - #if (${column.columnName} == 'create_time') - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - #elseif (${column.columnName} == 'update_time') - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater') - "${column.columnName}" ${column.columnType} DEFAULT '', - #elseif (${column.columnName} == 'deleted') - "deleted" bit NOT NULL DEFAULT FALSE, - #else - "${column.columnName}" ${column.columnType}#if (${column.nullable} == false) NOT NULL#end, - #end - #end -#end - PRIMARY KEY ("${primaryColumn.columnName}") -) COMMENT '${table.tableComment}'; - --- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-impl 模块的 test/resources/sql/clean.sql 文件里 -DELETE FROM "${table.tableName}"; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm deleted file mode 100644 index 25d76ae..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/sql/sql.vm +++ /dev/null @@ -1,27 +0,0 @@ --- 菜单 SQL -INSERT INTO `system_menu`( - `name`, `permission`, `menu_type`, `sort`, `parent_id`, - `path`, `icon`, `component`, `status` -) -VALUES ( - '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, - '${simpleClassName_strikeCase}', '', '${table.moduleName}/${classNameVar}/index', 0 -); - --- 按钮父菜单ID -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) -#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) -#foreach ($functionName in $functionNames) -#set ($index = $foreach.count - 1) -INSERT INTO `system_menu`( - `name`, `permission`, `menu_type`, `sort`, `parent_id`, - `path`, `icon`, `component`, `status` -) -VALUES ( - '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, - '', '', '', 0 -); -#end diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm deleted file mode 100644 index 5e9da32..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/api/api.js.vm +++ /dev/null @@ -1,55 +0,0 @@ -import request from '@/utils/request' -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") - -// 创建${table.classComment} -export function create${simpleClassName}(data) { - return request({ - url: '${baseURL}/create', - method: 'post', - data: data - }) -} - -// 更新${table.classComment} -export function update${simpleClassName}(data) { - return request({ - url: '${baseURL}/update', - method: 'put', - data: data - }) -} - -// 删除${table.classComment} -export function delete${simpleClassName}(id) { - return request({ - url: '${baseURL}/delete?id=' + id, - method: 'delete' - }) -} - -// 获得${table.classComment} -export function get${simpleClassName}(id) { - return request({ - url: '${baseURL}/get?id=' + id, - method: 'get' - }) -} - -// 获得${table.classComment}分页 -export function get${simpleClassName}Page(query) { - return request({ - url: '${baseURL}/page', - method: 'get', - params: query - }) -} - -// 导出${table.classComment} Excel -export function export${simpleClassName}Excel(query) { - return request({ - url: '${baseURL}/export-excel', - method: 'get', - params: query, - responseType: 'blob' - }) -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm b/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm deleted file mode 100644 index 53ed842..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/main/resources/codegen/vue/views/index.vue.vm +++ /dev/null @@ -1,399 +0,0 @@ - - - diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapperTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapperTest.java deleted file mode 100644 index 1adf32f..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/codegen/SchemaColumnMapperTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.tool.dal.mysql.codegen; - -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.SchemaColumnDO; -import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest; -import org.junit.jupiter.api.Test; - -import javax.annotation.Resource; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -public class SchemaColumnMapperTest extends BaseDbUnitTest { - - @Resource - private SchemaColumnMapper schemaColumnMapper; - - @Test - public void testSelectListByTableName() { - List columns = schemaColumnMapper.selectListByTableName("", "inf_config"); - assertTrue(columns.size() > 0); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/package-info.java deleted file mode 100644 index 858488d..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/mysql/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 占位 - */ -package cn.iocoder.yudao.module.tool.dal.mysql; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/package-info.java deleted file mode 100644 index 589846c..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/dal/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 占位 - */ -package cn.iocoder.yudao.module.tool.dal; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenEngineTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenEngineTest.java deleted file mode 100644 index eabc880..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenEngineTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen; - -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenColumnDO; -import cn.iocoder.yudao.module.tool.dal.dataobject.codegen.CodegenTableDO; -import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenColumnMapper; -import cn.iocoder.yudao.module.tool.dal.mysql.codegen.CodegenTableMapper; -import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenEngine; -import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest; -import org.junit.jupiter.api.Test; - -import javax.annotation.Resource; -import java.util.List; -import java.util.Map; - -public class CodegenEngineTest extends BaseDbUnitTest { - - @Resource - private CodegenTableMapper codegenTableMapper; - @Resource - private CodegenColumnMapper codegenColumnMapper; - - @Resource - private CodegenEngine codegenEngine; - - @Test - public void testExecute() { - CodegenTableDO table = codegenTableMapper.selectById(20); - List columns = codegenColumnMapper.selectListByTableId(table.getId()); - Map result = codegenEngine.execute(table, columns); - result.forEach((s, s2) -> System.out.println(s2)); -// System.out.println(result.get("vue/views/system/test/index.vue")); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenSQLParserTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenSQLParserTest.java deleted file mode 100644 index e9a2603..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenSQLParserTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen; - -import cn.iocoder.yudao.module.tool.service.codegen.inner.CodegenSQLParser; -import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest; -import org.junit.jupiter.api.Test; - -public class CodegenSQLParserTest extends BaseDbUnitTest { - - @Test - public void testParse() { - String sql = "CREATE TABLE `tool_test_demo` (\n" + - " `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',\n" + - " `name` varchar(100) NOT NULL DEFAULT '' COMMENT '名字',\n" + - " `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',\n" + - " `type` tinyint(4) NOT NULL COMMENT '类型',\n" + - " `category` tinyint(4) NOT NULL COMMENT '分类',\n" + - " `remark` varchar(500) DEFAULT NULL COMMENT '备注',\n" + - " `create_by` varchar(64) DEFAULT '' COMMENT '创建者',\n" + - " `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',\n" + - " `update_by` varchar(64) DEFAULT '' COMMENT '更新者',\n" + - " `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',\n" + - " `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',\n" + - " PRIMARY KEY (`id`) USING BTREE\n" + - ") ENGINE=InnoDB AUTO_INCREMENT=108 DEFAULT CHARSET=utf8mb4 COMMENT='字典类型表';"; - CodegenSQLParser.parse(sql); - // TODO 芋艿:后续完善断言 - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImplTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImplTest.java deleted file mode 100644 index 461f45b..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/codegen/CodegenServiceImplTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.codegen; - -import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest; -import org.junit.jupiter.api.Test; - -import javax.annotation.Resource; - -class CodegenServiceImplTest extends BaseDbUnitTest { - - @Resource - private CodegenServiceImpl codegenService; - - @Test - public void tetCreateCodegenTable() { - codegenService.createCodegen(0L, "tool_test_demo"); -// toolCodegenService.createCodegenTable("tool_codegen_table"); -// toolCodegenService.createCodegen("tool_codegen_column"); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/package-info.java deleted file mode 100644 index 5dd2f92..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/service/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * 占位 - */ -package cn.iocoder.yudao.module.tool.service; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseDbAndRedisIntegrationTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseDbAndRedisIntegrationTest.java deleted file mode 100644 index 7ce9039..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseDbAndRedisIntegrationTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package cn.iocoder.yudao.module.tool.test; - -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 com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; -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; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class) -@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 -public class BaseDbAndRedisIntegrationTest { - - @Import({ - // DB 配置类 - DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类 - YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 - DataSourceAutoConfiguration.class, // Spring DB 自动配置类 - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 - // MyBatis 配置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 - - // Redis 配置类 - RedisAutoConfiguration.class, // Spring Redis 自动配置类 - YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 - RedissonAutoConfiguration.class, // Redisson 自动高配置类 - }) - public static class Application { - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseRedisIntegrationTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseRedisIntegrationTest.java deleted file mode 100644 index 06bae00..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/java/cn/iocoder/yudao/module/tool/test/BaseRedisIntegrationTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.tool.test; - -import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration; -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; - -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class) -@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 -public class BaseRedisIntegrationTest { - - @Import({ - // Redis 配置类 - RedisAutoConfiguration.class, // Spring Redis 自动配置类 - YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类 - RedissonAutoConfiguration.class, // Redisson 自动高配置类 - }) - public static class Application { - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/resources/application-integration-test.yaml b/yudao-module-tool/yudao-module-tool-impl/src/test-integration/resources/application-integration-test.yaml deleted file mode 100644 index d9612ee..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test-integration/resources/application-integration-test.yaml +++ /dev/null @@ -1,108 +0,0 @@ -spring: - main: - lazy-initialization: true # 开启懒加载,加快速度 - banner-mode: off # 单元测试,禁用 Banner - ---- #################### 数据库相关配置 #################### - -spring: - # 数据源配置项 - autoconfigure: - exclude: - - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 - datasource: - druid: # Druid 【监控】相关的全局配置 - web-stat-filter: - enabled: true - stat-view-servlet: - enabled: true - allow: # 设置白名单,不填则允许所有访问 - url-pattern: /druid/* - login-username: # 控制台管理用户名和密码 - login-password: - filter: - stat: - enabled: true - log-slow-sql: true # 慢 SQL 记录 - slow-sql-millis: 100 - merge-sql: true - wall: - config: - multi-statement-allow: true - dynamic: # 多数据源配置 - druid: # Druid 【连接池】相关的全局配置 - initial-size: 5 # 初始连接数 - min-idle: 10 # 最小连接池数量 - max-active: 20 # 最大连接池数量 - max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 - time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 - min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 - max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 - validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 - test-while-idle: true - test-on-borrow: false - test-on-return: false - primary: master - datasource: - master: - name: ruoyi-vue-pro - url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT - driver-class-name: com.mysql.jdbc.Driver - username: root - password: 123456 - slave: # 模拟从库,可根据自己需要修改 - name: ruoyi-vue-pro - url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT - driver-class-name: com.mysql.jdbc.Driver - username: root - password: 123456 - - # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 - redis: - host: 127.0.0.1 # 地址 - port: 6379 # 端口 - database: 0 # 数据库索引 - -mybatis: - lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 - ---- #################### 定时任务相关配置 #################### - ---- #################### 配置中心相关配置 #################### - ---- #################### 服务保障相关配置 #################### - -# Lock4j 配置项(单元测试,禁用 Lock4j) - -# Resilience4j 配置项 -resilience4j: - ratelimiter: - instances: - backendA: - limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50 - limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500 - timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s - register-health-indicator: true # 是否注册到健康监测 - ---- #################### 监控相关配置 #################### - ---- #################### 芋道相关配置 #################### - -# 芋道配置项,设置当前项目所有自定义的配置 -yudao: - security: - token-header: Authorization - token-secret: abcdefghijklmnopqrstuvwxyz - token-timeout: 1d - session-timeout: 30m - mock-enable: true - mock-secret: test - swagger: - enable: false # 单元测试,禁用 Swagger - file: - base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/ - xss: - enable: false - exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 - - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 - - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/package-info.java b/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/package-info.java deleted file mode 100644 index be7a3de..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package cn.iocoder.yudao.module.tool.service; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImplTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImplTest.java deleted file mode 100755 index b8a2c86..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/service/test/TestDemoServiceImplTest.java +++ /dev/null @@ -1,187 +0,0 @@ -package cn.iocoder.yudao.module.tool.service.test; - -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.util.date.DateUtils; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoCreateReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoExportReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoPageReqVO; -import cn.iocoder.yudao.module.tool.controller.admin.test.vo.TestDemoUpdateReqVO; -import cn.iocoder.yudao.module.tool.dal.dataobject.test.TestDemoDO; -import cn.iocoder.yudao.module.tool.dal.mysql.test.TestDemoMapper; -import cn.iocoder.yudao.module.tool.test.BaseDbUnitTest; -import org.junit.jupiter.api.Test; -import org.springframework.context.annotation.Import; - -import javax.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.randomLongId; -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; -import static cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants.TEST_DEMO_NOT_EXISTS; -import static org.junit.jupiter.api.Assertions.*; - -/** - * {@link TestDemoServiceImpl} 的单元测试类 - * - * @author 芋道源码 - */ -@Import(TestDemoServiceImpl.class) -public class TestDemoServiceImplTest extends BaseDbUnitTest { - - @Resource - private TestDemoServiceImpl testDemoService; - - @Resource - private TestDemoMapper testDemoMapper; - - @Test - public void testCreateTestDemo_success() { - // 准备参数 - TestDemoCreateReqVO reqVO = randomPojo(TestDemoCreateReqVO.class); - - // 调用 - Long testDemoId = testDemoService.createTestDemo(reqVO); - // 断言 - assertNotNull(testDemoId); - // 校验记录的属性是否正确 - TestDemoDO testDemo = testDemoMapper.selectById(testDemoId); - assertPojoEquals(reqVO, testDemo); - } - - @Test - public void testUpdateTestDemo_success() { - // mock 数据 - TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class); - testDemoMapper.insert(dbTestDemo);// @Sql: 先插入出一条存在的数据 - // 准备参数 - TestDemoUpdateReqVO reqVO = randomPojo(TestDemoUpdateReqVO.class, o -> { - o.setId(dbTestDemo.getId()); // 设置更新的 ID - }); - - // 调用 - testDemoService.updateTestDemo(reqVO); - // 校验是否更新正确 - TestDemoDO testDemo = testDemoMapper.selectById(reqVO.getId()); // 获取最新的 - assertPojoEquals(reqVO, testDemo); - } - - @Test - public void testUpdateTestDemo_notExists() { - // 准备参数 - TestDemoUpdateReqVO reqVO = randomPojo(TestDemoUpdateReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> testDemoService.updateTestDemo(reqVO), TEST_DEMO_NOT_EXISTS); - } - - @Test - public void testDeleteTestDemo_success() { - // mock 数据 - TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class); - testDemoMapper.insert(dbTestDemo);// @Sql: 先插入出一条存在的数据 - // 准备参数 - Long id = dbTestDemo.getId(); - - // 调用 - testDemoService.deleteTestDemo(id); - // 校验数据不存在了 - assertNull(testDemoMapper.selectById(id)); - } - - @Test - public void testDeleteTestDemo_notExists() { - // 准备参数 - Long id = randomLongId(); - - // 调用, 并断言异常 - assertServiceException(() -> testDemoService.deleteTestDemo(id), TEST_DEMO_NOT_EXISTS); - } - - @Test - public void testGetTestDemoPage() { - // mock 数据 - TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class, o -> { // 等会查询到 - o.setName("芋道源码"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setType(1); - o.setCategory(2); - o.setRemark("哈哈哈"); - o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); - }); - testDemoMapper.insert(dbTestDemo); - // 测试 name 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setName("不匹配"))); - // 测试 status 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 type 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setType(2))); - // 测试 category 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCategory(1))); - // 测试 remark 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setRemark("呵呵呵"))); - // 测试 createTime 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12)))); - // 准备参数 - TestDemoPageReqVO reqVO = new TestDemoPageReqVO(); - reqVO.setName("芋道"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setType(1); - reqVO.setCategory(2); - reqVO.setRemark("哈哈哈"); - reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10)); - reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12)); - - // 调用 - PageResult pageResult = testDemoService.getTestDemoPage(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbTestDemo, pageResult.getList().get(0)); - } - - @Test - public void testGetTestDemoList() { - // mock 数据 - TestDemoDO dbTestDemo = randomPojo(TestDemoDO.class, o -> { // 等会查询到 - o.setName("芋道源码"); - o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - o.setType(1); - o.setCategory(2); - o.setRemark("哈哈哈"); - o.setCreateTime(DateUtils.buildTime(2021, 11, 11)); - }); - testDemoMapper.insert(dbTestDemo); - // 测试 name 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setName("不匹配"))); - // 测试 status 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); - // 测试 type 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setType(2))); - // 测试 category 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCategory(1))); - // 测试 remark 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setRemark("呵呵呵"))); - // 测试 createTime 不匹配 - testDemoMapper.insert(cloneIgnoreId(dbTestDemo, o -> o.setCreateTime(DateUtils.buildTime(2021, 12, 12)))); - // 准备参数 - TestDemoExportReqVO reqVO = new TestDemoExportReqVO(); - reqVO.setName("芋道"); - reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); - reqVO.setType(1); - reqVO.setCategory(2); - reqVO.setRemark("哈哈哈"); - reqVO.setBeginCreateTime(DateUtils.buildTime(2021, 11, 10)); - reqVO.setEndCreateTime(DateUtils.buildTime(2021, 11, 12)); - - // 调用 - List list = testDemoService.getTestDemoList(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(dbTestDemo, list.get(0)); - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/test/BaseDbUnitTest.java b/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/test/BaseDbUnitTest.java deleted file mode 100644 index 643d4b8..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/java/cn/iocoder/yudao/module/tool/test/BaseDbUnitTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package cn.iocoder.yudao.module.tool.test; - -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.boot.autoconfigure.DruidDataSourceAutoConfigure; -import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Import; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.jdbc.Sql; - -/** - * 依赖内存 DB 的单元测试 - * - * 注意,Service 层同样适用。对于 Service 层的单元测试,我们针对自己模块的 Mapper 走的是 H2 内存数据库,针对别的模块的 Service 走的是 Mock 方法 - * - * @author 芋道源码 - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbUnitTest.Application.class) -@ActiveProfiles("unit-test") // 设置使用 application-unit-test 配置文件 -@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB -public class BaseDbUnitTest { - - @Import({ - // DB 配置类 - YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类 - DataSourceAutoConfiguration.class, // Spring DB 自动配置类 - DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类 - DruidDataSourceAutoConfigure.class, // Druid 自动配置类 - SqlInitializationTestConfiguration.class, // SQL 初始化 - // MyBatis 配置类 - YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类 - MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类 - }) - public static class Application { - } - -} diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/application-unit-test.yaml b/yudao-module-tool/yudao-module-tool-impl/src/test/resources/application-unit-test.yaml deleted file mode 100644 index 60914d9..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/application-unit-test.yaml +++ /dev/null @@ -1,49 +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; # 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 默认的配置足够使用,一般不需要进行调优 - redis: - host: 127.0.0.1 # 地址 - port: 16379 # 端口(单元测试,使用 16379 端口) - database: 0 # 数据库索引 - -mybatis: - lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 - ---- #################### 定时任务相关配置 #################### - ---- #################### 配置中心相关配置 #################### - ---- #################### 服务保障相关配置 #################### - -# Lock4j 配置项(单元测试,禁用 Lock4j) - -# Resilience4j 配置项 - ---- #################### 监控相关配置 #################### - ---- #################### 芋道相关配置 #################### - -# 芋道配置项,设置当前项目所有自定义的配置 -yudao: - info: - base-package: cn.iocoder.yudao.module diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/logback.xml b/yudao-module-tool/yudao-module-tool-impl/src/test/resources/logback.xml deleted file mode 100644 index daf756b..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/logback.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql b/yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql deleted file mode 100644 index 4afb9e7..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/clean.sql +++ /dev/null @@ -1 +0,0 @@ -DELETE FROM "tool_test_demo"; diff --git a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql b/yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql deleted file mode 100644 index 2984308..0000000 --- a/yudao-module-tool/yudao-module-tool-impl/src/test/resources/sql/create_tables.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE IF NOT EXISTS "tool_test_demo" ( - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, - "name" varchar(100) NOT NULL, - "status" tinyint NOT NULL, - "type" tinyint NOT NULL, - "category" tinyint NOT NULL, - "remark" varchar(500), - "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 '字典类型表'; diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml index 1b7bdbe..9010d91 100644 --- a/yudao-server/pom.xml +++ b/yudao-server/pom.xml @@ -34,11 +34,6 @@ cn.iocoder.boot - yudao-module-tool-impl - ${revision} - - - cn.iocoder.boot yudao-module-infra-impl ${revision} diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index 2d1ea0e..738c70b 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -87,7 +87,6 @@ yudao: - cn.iocoder.yudao.module.member.enums.ErrorCodeConstants - cn.iocoder.yudao.module.pay.enums.ErrorCodeConstants - cn.iocoder.yudao.module.system.enums.ErrorCodeConstants - - cn.iocoder.yudao.module.tool.enums.ErrorCodeConstants tenant: # 多租户相关配置项 enable: true ignore-urls: @@ -96,11 +95,6 @@ yudao: - /admin-api/infra/file/get/* # 获取图片,和租户无关 - /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号 ignore-tables: - - infra_config - - infra_file - - infra_job - - infra_job_log - - infra_job_log - system_tenant - system_tenant_package - system_dict_data @@ -110,11 +104,16 @@ yudao: - system_sms_channel - system_sms_template - system_sms_log - - tool_codegen_column - - tool_codegen_table - - tool_test_demo + - infra_codegen_column + - infra_codegen_table + - infra_test_demo - tables - columns + - infra_config + - infra_file + - infra_job + - infra_job_log + - infra_job_log sms-code: # 短信验证码相关的配置项 expire-times: 10m send-frequency: 1m diff --git a/yudao-ui-admin/src/api/infra/codegen.js b/yudao-ui-admin/src/api/infra/codegen.js new file mode 100644 index 0000000..a9eb2fb --- /dev/null +++ b/yudao-ui-admin/src/api/infra/codegen.js @@ -0,0 +1,105 @@ +import request from '@/utils/request' + +// 获得表定义分页 +export function getCodegenTablePage(query) { + return request({ + url: '/infra/codegen/table/page', + method: 'get', + params: query + }) +} + +// 获得表和字段的明细 +export function getCodegenDetail(tableId) { + return request({ + url: '/infra/codegen/detail?tableId=' + tableId, + method: 'get', + }) +} + +// 修改代码生成信息 +export function updateCodegen(data) { + return request({ + url: '/infra/codegen/update', + method: 'put', + data: data + }) +} + +// 基于数据库的表结构,同步数据库的表和字段定义 +export function syncCodegenFromDB(tableId) { + return request({ + url: '/infra/codegen/sync-from-db?tableId=' + tableId, + method: 'put' + }) +} + +// 基于 SQL 建表语句,同步数据库的表和字段定义 +export function syncCodegenFromSQL(tableId, sql) { + return request({ + url: '/infra/codegen/sync-from-sql?tableId=' + tableId, + method: 'put', + headers:{ + 'Content-type': 'application/x-www-form-urlencoded' + }, + data: 'tableId=' + tableId + "&sql=" + sql, + }) +} + +// 预览生成代码 +export function previewCodegen(tableId) { + return request({ + url: '/infra/codegen/preview?tableId=' + tableId, + method: 'get', + }) +} + +// 下载生成代码 +export function downloadCodegen(tableId) { + return request({ + url: '/infra/codegen/download?tableId=' + tableId, + method: 'get', + responseType: 'blob' + }) +} + +// 获得表定义分页 +export function getSchemaTableList(query) { + return request({ + url: '/infra/codegen/db/table/list', + method: 'get', + params: query + }) +} + +// 基于数据库的表结构,创建代码生成器的表定义 +export function createCodegenListFromDB(tableNames) { + return request({ + url: '/infra/codegen/create-list-from-db', + method: 'post', + headers:{ + 'Content-type': 'application/x-www-form-urlencoded' + }, + data: 'tableNames=' + tableNames + }) +} + +// 基于 SQL 建表语句,创建代码生成器的表定义 +export function createCodegenListFromSQL(data) { + return request({ + url: '/infra/codegen/create-list-from-sql', + method: 'post', + headers:{ + 'Content-type': 'application/x-www-form-urlencoded' + }, + data: 'sql=' + data.sql, + }) +} + +// 删除数据库的表和字段定义 +export function deleteCodegen(tableId) { + return request({ + url: '/infra/codegen/delete?tableId=' + tableId, + method: 'delete' + }) +} diff --git a/yudao-ui-admin/src/api/infra/dbDoc.js b/yudao-ui-admin/src/api/infra/dbDoc.js new file mode 100644 index 0000000..015c6d7 --- /dev/null +++ b/yudao-ui-admin/src/api/infra/dbDoc.js @@ -0,0 +1,26 @@ +// 导出参数 +import request from "@/utils/request"; + +export function exportHtml() { + return request({ + url: '/infra/db-doc/export-html', + method: 'get', + responseType: 'blob' + }) +} + +export function exportWord() { + return request({ + url: '/infra/db-doc/export-word', + method: 'get', + responseType: 'blob' + }) +} + +export function exportMarkdown() { + return request({ + url: '/infra/db-doc/export-markdown', + method: 'get', + responseType: 'blob' + }) +} diff --git a/yudao-ui-admin/src/api/infra/testDemo.js b/yudao-ui-admin/src/api/infra/testDemo.js new file mode 100755 index 0000000..cec5742 --- /dev/null +++ b/yudao-ui-admin/src/api/infra/testDemo.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +// 创建字典类型 +export function createTestDemo(data) { + return request({ + url: '/infra/test-demo/create', + method: 'post', + data: data + }) +} + +// 更新字典类型 +export function updateTestDemo(data) { + return request({ + url: '/infra/test-demo/update', + method: 'put', + data: data + }) +} + +// 删除字典类型 +export function deleteTestDemo(id) { + return request({ + url: '/infra/test-demo/delete?id=' + id, + method: 'delete' + }) +} + +// 获得字典类型 +export function getTestDemo(id) { + return request({ + url: '/infra/test-demo/get?id=' + id, + method: 'get' + }) +} + +// 获得字典类型分页 +export function getTestDemoPage(query) { + return request({ + url: '/infra/test-demo/page', + method: 'get', + params: query + }) +} + +// 导出字典类型 Excel +export function exportTestDemoExcel(query) { + return request({ + url: '/infra/test-demo/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/yudao-ui-admin/src/api/tool/codegen.js b/yudao-ui-admin/src/api/tool/codegen.js deleted file mode 100644 index 31aad1e..0000000 --- a/yudao-ui-admin/src/api/tool/codegen.js +++ /dev/null @@ -1,105 +0,0 @@ -import request from '@/utils/request' - -// 获得表定义分页 -export function getCodegenTablePage(query) { - return request({ - url: '/tool/codegen/table/page', - method: 'get', - params: query - }) -} - -// 获得表和字段的明细 -export function getCodegenDetail(tableId) { - return request({ - url: '/tool/codegen/detail?tableId=' + tableId, - method: 'get', - }) -} - -// 修改代码生成信息 -export function updateCodegen(data) { - return request({ - url: '/tool/codegen/update', - method: 'put', - data: data - }) -} - -// 基于数据库的表结构,同步数据库的表和字段定义 -export function syncCodegenFromDB(tableId) { - return request({ - url: '/tool/codegen/sync-from-db?tableId=' + tableId, - method: 'put' - }) -} - -// 基于 SQL 建表语句,同步数据库的表和字段定义 -export function syncCodegenFromSQL(tableId, sql) { - return request({ - url: '/tool/codegen/sync-from-sql?tableId=' + tableId, - method: 'put', - headers:{ - 'Content-type': 'application/x-www-form-urlencoded' - }, - data: 'tableId=' + tableId + "&sql=" + sql, - }) -} - -// 预览生成代码 -export function previewCodegen(tableId) { - return request({ - url: '/tool/codegen/preview?tableId=' + tableId, - method: 'get', - }) -} - -// 下载生成代码 -export function downloadCodegen(tableId) { - return request({ - url: '/tool/codegen/download?tableId=' + tableId, - method: 'get', - responseType: 'blob' - }) -} - -// 获得表定义分页 -export function getSchemaTableList(query) { - return request({ - url: '/tool/codegen/db/table/list', - method: 'get', - params: query - }) -} - -// 基于数据库的表结构,创建代码生成器的表定义 -export function createCodegenListFromDB(tableNames) { - return request({ - url: '/tool/codegen/create-list-from-db', - method: 'post', - headers:{ - 'Content-type': 'application/x-www-form-urlencoded' - }, - data: 'tableNames=' + tableNames - }) -} - -// 基于 SQL 建表语句,创建代码生成器的表定义 -export function createCodegenListFromSQL(data) { - return request({ - url: '/tool/codegen/create-list-from-sql', - method: 'post', - headers:{ - 'Content-type': 'application/x-www-form-urlencoded' - }, - data: 'sql=' + data.sql, - }) -} - -// 删除数据库的表和字段定义 -export function deleteCodegen(tableId) { - return request({ - url: '/tool/codegen/delete?tableId=' + tableId, - method: 'delete' - }) -} diff --git a/yudao-ui-admin/src/api/tool/dbDoc.js b/yudao-ui-admin/src/api/tool/dbDoc.js deleted file mode 100644 index 19f91c3..0000000 --- a/yudao-ui-admin/src/api/tool/dbDoc.js +++ /dev/null @@ -1,26 +0,0 @@ -// 导出参数 -import request from "@/utils/request"; - -export function exportHtml() { - return request({ - url: '/tool/db-doc/export-html', - method: 'get', - responseType: 'blob' - }) -} - -export function exportWord() { - return request({ - url: '/tool/db-doc/export-word', - method: 'get', - responseType: 'blob' - }) -} - -export function exportMarkdown() { - return request({ - url: '/tool/db-doc/export-markdown', - method: 'get', - responseType: 'blob' - }) -} diff --git a/yudao-ui-admin/src/api/tool/testDemo.js b/yudao-ui-admin/src/api/tool/testDemo.js deleted file mode 100755 index 1b1185e..0000000 --- a/yudao-ui-admin/src/api/tool/testDemo.js +++ /dev/null @@ -1,54 +0,0 @@ -import request from '@/utils/request' - -// 创建字典类型 -export function createTestDemo(data) { - return request({ - url: '/tool/test-demo/create', - method: 'post', - data: data - }) -} - -// 更新字典类型 -export function updateTestDemo(data) { - return request({ - url: '/tool/test-demo/update', - method: 'put', - data: data - }) -} - -// 删除字典类型 -export function deleteTestDemo(id) { - return request({ - url: '/tool/test-demo/delete?id=' + id, - method: 'delete' - }) -} - -// 获得字典类型 -export function getTestDemo(id) { - return request({ - url: '/tool/test-demo/get?id=' + id, - method: 'get' - }) -} - -// 获得字典类型分页 -export function getTestDemoPage(query) { - return request({ - url: '/tool/test-demo/page', - method: 'get', - params: query - }) -} - -// 导出字典类型 Excel -export function exportTestDemoExcel(query) { - return request({ - url: '/tool/test-demo/export-excel', - method: 'get', - params: query, - responseType: 'blob' - }) -} diff --git a/yudao-ui-admin/src/router/index.js b/yudao-ui-admin/src/router/index.js index 7fc4f89..3b3b822 100644 --- a/yudao-ui-admin/src/router/index.js +++ b/yudao-ui-admin/src/router/index.js @@ -108,9 +108,9 @@ export const constantRoutes = [ hidden: true, children: [{ path: 'edit/:tableId(\\d+)', - component: (resolve) => require(['@/views/tool/codegen/editTable'], resolve), + component: (resolve) => require(['@/views/infra/codegen/editTable'], resolve), name: 'GenEdit', - meta: {title: '修改生成配置', activeMenu: '/tool/codegen'} + meta: {title: '修改生成配置', activeMenu: '/infra/codegen'} } ] }, { diff --git a/yudao-ui-admin/src/utils/constants.js b/yudao-ui-admin/src/utils/constants.js index 912f90f..f1e69a2 100644 --- a/yudao-ui-admin/src/utils/constants.js +++ b/yudao-ui-admin/src/utils/constants.js @@ -43,7 +43,7 @@ export const SystemDataScopeEnum = { /** * 代码生成模板类型 */ -export const ToolCodegenTemplateTypeEnum = { +export const InfraCodegenTemplateTypeEnum = { CRUD: 1, // 基础 CRUD TREE: 2, // 树形 CRUD SUB: 3, // 主子表 CRUD diff --git a/yudao-ui-admin/src/utils/dict.js b/yudao-ui-admin/src/utils/dict.js index 5a9df13..46f0c60 100644 --- a/yudao-ui-admin/src/utils/dict.js +++ b/yudao-ui-admin/src/utils/dict.js @@ -30,10 +30,8 @@ export const DICT_TYPE = { INFRA_JOB_LOG_STATUS: 'infra_job_log_status', INFRA_API_ERROR_LOG_PROCESS_STATUS: 'infra_api_error_log_process_status', INFRA_CONFIG_TYPE: 'infra_config_type', - - // ========== TOOL 模块 ========== - TOOL_CODEGEN_TEMPLATE_TYPE: 'tool_codegen_template_type', - TOOL_CODEGEN_SCENE: 'tool_codegen_scene', + INFRA_CODEGEN_TEMPLATE_TYPE: 'infra_codegen_template_type', + INFRA_CODEGEN_SCENE: 'infra_codegen_scene', // ========== BPM 模块 ========== BPM_MODEL_CATEGORY: 'bpm_model_category', diff --git a/yudao-ui-admin/src/views/bpm/form/formEditor.vue b/yudao-ui-admin/src/views/bpm/form/formEditor.vue index 913ad5d..07b64d3 100644 --- a/yudao-ui-admin/src/views/bpm/form/formEditor.vue +++ b/yudao-ui-admin/src/views/bpm/form/formEditor.vue @@ -145,9 +145,9 @@ import { debounce } from 'throttle-debounce' import { saveAs } from 'file-saver' import ClipboardJS from 'clipboard' import render from '@/components/render/render' -import FormDrawer from '@/views/tool/build/FormDrawer' -import JsonDrawer from '@/views/tool/build/JsonDrawer' -import RightPanel from '@/views/tool/build/RightPanel' +import FormDrawer from '@/views/infra/build/FormDrawer' +import JsonDrawer from '@/views/infra/build/JsonDrawer' +import RightPanel from '@/views/infra/build/RightPanel' import { inputComponents, selectComponents, layoutComponents, formConf } from '@/components/generator/config' @@ -161,8 +161,8 @@ import { makeUpJs } from '@/components/generator/js' import { makeUpCss } from '@/components/generator/css' import drawingDefalut from '@/components/generator/drawingDefalut' import logo from '@/assets/logo/logo.png' -import CodeTypeDialog from '@/views/tool/build/CodeTypeDialog' -import DraggableItem from '@/views/tool/build/DraggableItem' +import CodeTypeDialog from '@/views/infra/build/CodeTypeDialog' +import DraggableItem from '@/views/infra/build/DraggableItem' import { getDrawingList, saveDrawingList, getIdGlobal, saveIdGlobal, getFormConf } from '@/utils/db' diff --git a/yudao-ui-admin/src/views/infra/build/App.vue b/yudao-ui-admin/src/views/infra/build/App.vue new file mode 100644 index 0000000..b25f0b5 --- /dev/null +++ b/yudao-ui-admin/src/views/infra/build/App.vue @@ -0,0 +1,22 @@ + + + diff --git a/yudao-ui-admin/src/views/infra/build/CodeTypeDialog.vue b/yudao-ui-admin/src/views/infra/build/CodeTypeDialog.vue new file mode 100644 index 0000000..6f0c0d1 --- /dev/null +++ b/yudao-ui-admin/src/views/infra/build/CodeTypeDialog.vue @@ -0,0 +1,110 @@ + + + + diff --git a/yudao-ui-admin/src/views/infra/build/DraggableItem.vue b/yudao-ui-admin/src/views/infra/build/DraggableItem.vue new file mode 100644 index 0000000..4cccea6 --- /dev/null +++ b/yudao-ui-admin/src/views/infra/build/DraggableItem.vue @@ -0,0 +1,120 @@ + diff --git a/yudao-ui-admin/src/views/infra/build/FormDrawer.vue b/yudao-ui-admin/src/views/infra/build/FormDrawer.vue new file mode 100644 index 0000000..ef17ba5 --- /dev/null +++ b/yudao-ui-admin/src/views/infra/build/FormDrawer.vue @@ -0,0 +1,331 @@ +