From d387cbb2353d2660cc8170c3fb69329a27940525 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Sun, 8 Dec 2024 00:05:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E5=90=88=20orm,=20=E7=AE=80=E5=8D=95?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies/pom.xml | 64 +++ platform-orm/design/wx-docking-platform.ndm2 | 369 ++++++++++++++++++ platform-orm/pom.xml | 75 ++++ .../docking/wx/config/MybatisPlusConfig.java | 27 ++ .../cn/skcks/docking/wx/orm/entity/MpApp.java | 74 ++++ .../docking/wx/orm/mapper/MpAppMapper.java | 16 + .../docking/wx/orm/mapper/xml/MpAppMapper.xml | 5 + .../src/main/resources/application.yaml | 9 + .../main/resources/db/changelog-master.xml | 11 + .../cn/skcks/docking/wx/OrmGeneratorTest.java | 15 + .../wx/orm/generator/OrmGenerator.java | 94 +++++ .../test/resources/application-generator.yaml | 9 + platform-services/pom.xml | 10 + .../wx/services/mp/WxMpServiceStarter.java | 4 +- .../wx/services/mp/config/SwaggerConfig.java | 48 +++ .../mp/controller/MpAppController.java | 44 +++ .../wx/services/mp/service/MpAppService.java | 48 +++ pom.xml | 7 + wx-docking-platform-common/pom.xml | 24 ++ .../docking/wx/common/page/PageWrapper.java | 18 + .../src/main/resources/application.yml | 12 + .../src/main/resources/logback-example.xml | 27 ++ 22 files changed, 1009 insertions(+), 1 deletion(-) create mode 100644 platform-orm/design/wx-docking-platform.ndm2 create mode 100644 platform-orm/pom.xml create mode 100644 platform-orm/src/main/java/cn/skcks/docking/wx/config/MybatisPlusConfig.java create mode 100644 platform-orm/src/main/java/cn/skcks/docking/wx/orm/entity/MpApp.java create mode 100644 platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/MpAppMapper.java create mode 100644 platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/xml/MpAppMapper.xml create mode 100644 platform-orm/src/main/resources/application.yaml create mode 100644 platform-orm/src/main/resources/db/changelog-master.xml create mode 100644 platform-orm/src/test/java/cn/skcks/docking/wx/OrmGeneratorTest.java create mode 100644 platform-orm/src/test/java/cn/skcks/docking/wx/orm/generator/OrmGenerator.java create mode 100644 platform-orm/src/test/resources/application-generator.yaml create mode 100644 platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/config/SwaggerConfig.java create mode 100644 platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/controller/MpAppController.java create mode 100644 platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/service/MpAppService.java create mode 100644 wx-docking-platform-common/src/main/resources/application.yml create mode 100644 wx-docking-platform-common/src/main/resources/logback-example.xml diff --git a/dependencies/pom.xml b/dependencies/pom.xml index 2bae0e3..7fae6cc 100644 --- a/dependencies/pom.xml +++ b/dependencies/pom.xml @@ -14,11 +14,43 @@ 17 UTF-8 + 5.8.34 4.6.0 + 3.5.9 + 2.1.0 + 6.1.0 + + + org.apache.velocity + velocity-engine-core + 2.4.1 + + + + org.apache.commons + commons-collections4 + 4.5.0-M2 + + + + org.apache.commons + commons-lang3 + 3.17.0 + + + + cn.hutool + hutool-bom + ${hutool.version} + pom + + import + + com.github.binarywang weixin-java-mp @@ -36,6 +68,38 @@ weixin-java-open ${wx-java.version} + + + com.baomidou + mybatis-plus-bom + ${mybatis-plus.version} + pom + import + + + + com.baomidou + mybatis-plus-spring-boot3-starter + ${mybatis-plus.version} + + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus.version} + + + + com.github.pagehelper + pagehelper-spring-boot-starter + ${pagehelper-starter.version} + + + + com.github.pagehelper + pagehelper + ${pagehelper.version} + diff --git a/platform-orm/design/wx-docking-platform.ndm2 b/platform-orm/design/wx-docking-platform.ndm2 new file mode 100644 index 0000000..728b82f --- /dev/null +++ b/platform-orm/design/wx-docking-platform.ndm2 @@ -0,0 +1,369 @@ +{ + "paper": { + "name": "A4", + "leftMargin": 0.5, + "rightMargin": 0.5, + "topMargin": 0.5, + "bottomMargin": 0.5, + "isPortriat": true + }, + "modelVersion": 2.01, + "defaultSchema": "Default", + "server": { + "objectType": "Server_MYSQL", + "name": "Default", + "serverVersion": 80099, + "edition": "Default", + "lowerCaseTableNames": 0, + "schemas": [ + { + "objectType": "Schema_MYSQL", + "name": "Default", + "tables": [ + { + "objectType": "Table_MYSQL", + "name": "mp_app", + "comment": "微信公众号记录表", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "id", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "None", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "公众号id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "id" + }, + { + "objectType": "TableField_MYSQL", + "name": "app_id", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "开发者id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "app_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "app_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "app_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "app_secret", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "开发者密钥", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "app_secret" + }, + { + "objectType": "TableField_MYSQL", + "name": "token", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "令牌", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "token" + }, + { + "objectType": "TableField_MYSQL", + "name": "encoding_aes_key", + "type": "varchar", + "length": 43, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "消息加密密钥", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "encoding_aes_key" + }, + { + "objectType": "TableField_MYSQL", + "name": "enable", + "type": "tinyint", + "length": 1, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "1", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否启用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "enable" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "", + "type": "", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "app_id", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + }, + { + "objectType": "Index_MYSQL", + "name": "", + "type": "", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "app_name", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "id", + "keyLength": 0, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "triggers": [], + "tablePartitions": [] + } + ], + "views": [] + } + ] + }, + "diagrams": [ + { + "name": "Diagram 1", + "paperWidth": 1, + "paperHeight": 1, + "tableFont": "Arial Unicode MS", + "tableFontSize": 14, + "isBalckWhite": false, + "showDBSchemaName": false, + "showViewRelations": true, + "notation": "default", + "showFieldComment": true, + "showTableComment": true, + "shapes": [ + { + "type": "table", + "schemaName": "Default", + "tableName": "mp_app", + "x": 30, + "y": 30, + "width": 340, + "height": 220, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + } + ], + "layers": [], + "relations": [], + "viewRelations": [] + } + ] +} \ No newline at end of file diff --git a/platform-orm/pom.xml b/platform-orm/pom.xml new file mode 100644 index 0000000..4e001c5 --- /dev/null +++ b/platform-orm/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + cn.skcks.docking.wx + wx-docking-platform + 0.0.1-SNAPSHOT + + + platform-orm + + + 17 + 17 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-test + + + + com.mysql + mysql-connector-j + + + + com.baomidou + mybatis-plus-spring-boot3-starter + + + + + com.baomidou + mybatis-plus-jsqlparser + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + cn.hutool + hutool-core + test + + + + com.baomidou + mybatis-plus-generator + test + + + + org.apache.velocity + velocity-engine-core + + + + + org.liquibase + liquibase-core + + + diff --git a/platform-orm/src/main/java/cn/skcks/docking/wx/config/MybatisPlusConfig.java b/platform-orm/src/main/java/cn/skcks/docking/wx/config/MybatisPlusConfig.java new file mode 100644 index 0000000..d61e4b2 --- /dev/null +++ b/platform-orm/src/main/java/cn/skcks/docking/wx/config/MybatisPlusConfig.java @@ -0,0 +1,27 @@ +package cn.skcks.docking.wx.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.mybatis.spring.annotation.MapperScans; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@MapperScans({ + @MapperScan("cn.skcks.docking.wx.orm") +}) +public class MybatisPlusConfig { + + /** + * 添加分页插件 + */ + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加 + // 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType + return interceptor; + } +} diff --git a/platform-orm/src/main/java/cn/skcks/docking/wx/orm/entity/MpApp.java b/platform-orm/src/main/java/cn/skcks/docking/wx/orm/entity/MpApp.java new file mode 100644 index 0000000..83774da --- /dev/null +++ b/platform-orm/src/main/java/cn/skcks/docking/wx/orm/entity/MpApp.java @@ -0,0 +1,74 @@ +package cn.skcks.docking.wx.orm.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.experimental.Accessors; + +/** + *

+ * 微信公众号记录表 + *

+ * + * @author shikong + * @since 2024-12-07 + */ +@Getter +@Setter +@Accessors(chain = true) +@TableName("mp_app") +public class MpApp extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 公众号id + */ + @TableId("id") + private String id; + + /** + * 开发者id + */ + @TableField("app_id") + private String appId; + + /** + * 名称 + */ + @TableField("app_name") + private String appName; + + /** + * 开发者密钥 + */ + @TableField("app_secret") + private String appSecret; + + /** + * 令牌 + */ + @TableField("token") + private String token; + + /** + * 消息加密密钥 + */ + @TableField("encoding_aes_key") + private String encodingAesKey; + + /** + * 是否启用 + */ + @TableField("enable") + private Boolean enable; + + @Override + public Serializable pkVal() { + return this.id; + } +} diff --git a/platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/MpAppMapper.java b/platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/MpAppMapper.java new file mode 100644 index 0000000..9a90674 --- /dev/null +++ b/platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/MpAppMapper.java @@ -0,0 +1,16 @@ +package cn.skcks.docking.wx.orm.mapper; + +import cn.skcks.docking.wx.orm.entity.MpApp; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 微信公众号记录表 Mapper 接口 + *

+ * + * @author shikong + * @since 2024-12-07 + */ +public interface MpAppMapper extends BaseMapper { + +} diff --git a/platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/xml/MpAppMapper.xml b/platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/xml/MpAppMapper.xml new file mode 100644 index 0000000..0e1b32c --- /dev/null +++ b/platform-orm/src/main/java/cn/skcks/docking/wx/orm/mapper/xml/MpAppMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/platform-orm/src/main/resources/application.yaml b/platform-orm/src/main/resources/application.yaml new file mode 100644 index 0000000..e9ac80c --- /dev/null +++ b/platform-orm/src/main/resources/application.yaml @@ -0,0 +1,9 @@ +spring: + liquibase: + enabled: true + change-log: classpath:db/changelog-master.xml + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + username: root + password: 12341234 + url: jdbc:mysql://10.10.10.200:3306/wx-docking-platform?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai diff --git a/platform-orm/src/main/resources/db/changelog-master.xml b/platform-orm/src/main/resources/db/changelog-master.xml new file mode 100644 index 0000000..10ecb23 --- /dev/null +++ b/platform-orm/src/main/resources/db/changelog-master.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/platform-orm/src/test/java/cn/skcks/docking/wx/OrmGeneratorTest.java b/platform-orm/src/test/java/cn/skcks/docking/wx/OrmGeneratorTest.java new file mode 100644 index 0000000..c752ac8 --- /dev/null +++ b/platform-orm/src/test/java/cn/skcks/docking/wx/OrmGeneratorTest.java @@ -0,0 +1,15 @@ +package cn.skcks.docking.wx; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; + +@SpringBootApplication +public class OrmGeneratorTest { + public static void main(String[] args) { + SpringApplication app = new SpringApplicationBuilder(OrmGeneratorTest.class) + .profiles("generator") + .build(); + app.run(args); + } +} diff --git a/platform-orm/src/test/java/cn/skcks/docking/wx/orm/generator/OrmGenerator.java b/platform-orm/src/test/java/cn/skcks/docking/wx/orm/generator/OrmGenerator.java new file mode 100644 index 0000000..55acaf3 --- /dev/null +++ b/platform-orm/src/test/java/cn/skcks/docking/wx/orm/generator/OrmGenerator.java @@ -0,0 +1,94 @@ +package cn.skcks.docking.wx.orm.generator; + +import cn.hutool.core.date.DatePattern; +import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.SmartLifecycle; +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Slf4j +@Profile("generator") +@Service +@RequiredArgsConstructor +public class OrmGenerator implements SmartLifecycle { + private final DataSourceProperties dataSourceProperties; + private final ConfigurableApplicationContext context; + private boolean isRunning; + + private final static String sourceDir = Paths.get(System.getProperty("user.dir")) + "/platform-orm/src/main/java"; + + @Override + public void start() { + isRunning = true; + + generate(); + } + + @Override + public void stop() { + isRunning = false; + } + + @Override + public boolean isRunning() { + return isRunning; + } + + @SneakyThrows + private static String getGitUserName(){ + BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader( + Runtime.getRuntime().exec("git config user.name") + .getInputStream())); + return bufferedReader.readLine(); + } + + private void generate(){ + log.info("[+] 开始从数据库生成实体类"); + FastAutoGenerator.create(dataSourceProperties.getUrl(), dataSourceProperties.getUsername(), dataSourceProperties.getPassword()) + .globalConfig(builder -> { + builder.author(getGitUserName()) + .outputDir(sourceDir) + .commentDate(DatePattern.NORM_DATE_PATTERN); + }) + .packageConfig(builder -> { + builder.parent("cn.skcks.docking.wx.orm") + .entity("entity") + .mapper("mapper") + .service("service") + .serviceImpl("service.impl") + .xml("mapper.xml"); + }).strategyConfig(builder -> builder + .enableSkipView() + .addInclude("^mp_.*") + .entityBuilder() + //开启文件覆盖 + // .enableFileOverride() + //开启链式模型 + .enableChainModel() + //开启Lombok + .enableLombok() + .enableTableFieldAnnotation()//开启生成实体时生成字段注解 + //开启 ActiveRecord 模型(封装了实体一些简单持久化操作,必须有对应的BaseMapper实现) + .enableActiveRecord() + .controllerBuilder().disable() + .serviceBuilder().disable() + ) + .templateEngine(new VelocityTemplateEngine()) + .execute(); + System.exit(SpringApplication.exit(context, () -> 0)); + } +} diff --git a/platform-orm/src/test/resources/application-generator.yaml b/platform-orm/src/test/resources/application-generator.yaml new file mode 100644 index 0000000..e9ac80c --- /dev/null +++ b/platform-orm/src/test/resources/application-generator.yaml @@ -0,0 +1,9 @@ +spring: + liquibase: + enabled: true + change-log: classpath:db/changelog-master.xml + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + username: root + password: 12341234 + url: jdbc:mysql://10.10.10.200:3306/wx-docking-platform?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai diff --git a/platform-services/pom.xml b/platform-services/pom.xml index 435e6f0..d98a917 100644 --- a/platform-services/pom.xml +++ b/platform-services/pom.xml @@ -36,6 +36,16 @@ wx-docking-platform-common + + cn.skcks.docking.wx + platform-orm + + + + cn.skcks.docking.wx.annotation + wx-docking-platform-annotation + + org.springframework.boot spring-boot-starter-test diff --git a/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/WxMpServiceStarter.java b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/WxMpServiceStarter.java index 742022e..abec48b 100644 --- a/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/WxMpServiceStarter.java +++ b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/WxMpServiceStarter.java @@ -1,9 +1,11 @@ package cn.skcks.docking.wx.services.mp; +import org.mybatis.spring.annotation.MapperScan; +import org.mybatis.spring.annotation.MapperScans; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication +@SpringBootApplication(scanBasePackages = "cn.skcks.docking.wx") public class WxMpServiceStarter { public static void main(String[] args) { SpringApplication.run(WxMpServiceStarter.class, args); diff --git a/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/config/SwaggerConfig.java b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/config/SwaggerConfig.java new file mode 100644 index 0000000..6064c11 --- /dev/null +++ b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/config/SwaggerConfig.java @@ -0,0 +1,48 @@ +package cn.skcks.docking.wx.services.mp.config; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import lombok.Data; +import org.springdoc.core.customizers.OpenApiCustomizer; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.springdoc.core.utils.Constants.ALL_PATTERN; + +@Configuration +@Data +public class SwaggerConfig { + public static final Info INFO; + private static final License LICENSE; + + static { + INFO = new Info() + .contact(new Contact() + .name("shikong") + .url("https://skon.top") + .email("skon@duck.com")) + .title("MpApp API") + .description("MpApp API description") + .version("2.0"); + LICENSE = new License() + .name("Apache 2.0") + .url("http://www.apache.org/licenses/LICENSE-2.0.html"); + INFO.license(LICENSE); + } + + public static GroupedOpenApi api(String group, String path) { + return GroupedOpenApi.builder() + .group(group) + .pathsToMatch(path + ALL_PATTERN) + .addOpenApiCustomizer(openApi -> openApi.info(SwaggerConfig.INFO)) + .build(); + } + + @Bean + public GroupedOpenApi mpApi(){ + return api("mp-app", "/"); + } +} diff --git a/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/controller/MpAppController.java b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/controller/MpAppController.java new file mode 100644 index 0000000..8b4b9bb --- /dev/null +++ b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/controller/MpAppController.java @@ -0,0 +1,44 @@ +package cn.skcks.docking.wx.services.mp.controller; + +import cn.skcks.docking.wx.annotation.web.methods.GetJson; +import cn.skcks.docking.wx.common.json.JsonResponse; +import cn.skcks.docking.wx.common.page.PageWrapper; +import cn.skcks.docking.wx.orm.entity.MpApp; +import cn.skcks.docking.wx.services.mp.service.MpAppService; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Tag(name = "微信公众号") +@RequestMapping("/mp-app") +@RestController +@RequiredArgsConstructor +public class MpAppController { + private final MpAppService mpAppService; + + + @Operation(summary = "公众号列表") + @GetJson("/list") + public JsonResponse> getMpAppList() { + List mpAppList = mpAppService.getMpAppList(); + return JsonResponse.success(mpAppList); + } + + @Operation(summary = "公众号分页列表") + @GetJson("/page") + @Parameters({ + @Parameter(name = "pageNo", description = "页数", example = "1"), + @Parameter(name = "pageSize", description = "条数", example = "10") + }) + public JsonResponse> getMpAppListPage(@RequestParam Integer pageNo, @RequestParam Integer pageSize) { + return JsonResponse.success(mpAppService.getMpAppPageList(pageNo,pageSize)); + } +} diff --git a/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/service/MpAppService.java b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/service/MpAppService.java new file mode 100644 index 0000000..8281a68 --- /dev/null +++ b/platform-services/wx-mp-service/src/main/java/cn/skcks/docking/wx/services/mp/service/MpAppService.java @@ -0,0 +1,48 @@ +package cn.skcks.docking.wx.services.mp.service; + +import cn.skcks.docking.wx.common.page.PageWrapper; +import cn.skcks.docking.wx.orm.entity.MpApp; +import cn.skcks.docking.wx.orm.mapper.MpAppMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class MpAppService { + private final MpAppMapper mpAppMapper; + + + /** + * 获取所有公众号列表 + * + * @author shikong + * @since 2024-12-07 + */ + public List getMpAppList(){ + return mpAppMapper.selectList(null); + } + + + /** + * 分页查询公众号列表 + * + * @author shikong + * @since 2024-12-07 + */ + public PageWrapper getMpAppPageList(Integer pageNum, Integer pageSize){ + // try(Page ignored = PageHelper.startPage(pageNum, pageSize)){ + // return new PageInfo<>(mpAppMapper.selectList(null)); + // } + + Page mpAppPage = mpAppMapper.selectPage(new Page<>(pageNum, pageSize), null); + return PageWrapper.of(mpAppPage); + } +} diff --git a/pom.xml b/pom.xml index fe0efaa..09de5fa 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ wx-docking-platform-annotation platform-services dependencies + platform-orm @@ -71,6 +72,12 @@ import + + cn.skcks.docking.wx + platform-orm + ${project.version} + + cn.skcks.docking.wx.annotation wx-docking-platform-annotation diff --git a/wx-docking-platform-common/pom.xml b/wx-docking-platform-common/pom.xml index 577223d..ea30e8a 100644 --- a/wx-docking-platform-common/pom.xml +++ b/wx-docking-platform-common/pom.xml @@ -24,6 +24,20 @@ springdoc-openapi-starter-common + + org.apache.commons + commons-collections4 + + + + org.apache.commons + commons-lang3 + + + + cn.hutool + hutool-core + com.fasterxml.jackson.core @@ -48,5 +62,15 @@ runtime true + + + com.github.pagehelper + pagehelper + + + + com.baomidou + mybatis-plus-extension + diff --git a/wx-docking-platform-common/src/main/java/cn/skcks/docking/wx/common/page/PageWrapper.java b/wx-docking-platform-common/src/main/java/cn/skcks/docking/wx/common/page/PageWrapper.java index 4074234..7a5a9ef 100644 --- a/wx-docking-platform-common/src/main/java/cn/skcks/docking/wx/common/page/PageWrapper.java +++ b/wx-docking-platform-common/src/main/java/cn/skcks/docking/wx/common/page/PageWrapper.java @@ -1,5 +1,7 @@ package cn.skcks.docking.wx.common.page; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.pagehelper.PageInfo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; @@ -27,4 +29,20 @@ public class PageWrapper { public static PageWrapper of(Collection data, long page, long pageSize, long pageTotal, long total) { return new PageWrapper<>(data, page, pageSize, pageTotal, total); } + + public static PageWrapper of(PageInfo pageInfo) { + return new PageWrapper<>(pageInfo.getList(), + pageInfo.getPageNum(), + pageInfo.getPageSize(), + pageInfo.getPages(), + pageInfo.getTotal()); + } + + public static PageWrapper of(Page page) { + return new PageWrapper<>(page.getRecords(), + page.getCurrent(), + page.getSize(), + page.getPages(), + page.getTotal()); + } } diff --git a/wx-docking-platform-common/src/main/resources/application.yml b/wx-docking-platform-common/src/main/resources/application.yml new file mode 100644 index 0000000..00ef65f --- /dev/null +++ b/wx-docking-platform-common/src/main/resources/application.yml @@ -0,0 +1,12 @@ +# 日志文件配置 +#logging: +# config: classpath:logback.xml + +spring: + # json 配置 + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + deserialization: + # 忽略没有的字段 + fail_on_unknown_properties: false diff --git a/wx-docking-platform-common/src/main/resources/logback-example.xml b/wx-docking-platform-common/src/main/resources/logback-example.xml new file mode 100644 index 0000000..b66a16c --- /dev/null +++ b/wx-docking-platform-common/src/main/resources/logback-example.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + %red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %yellow(at %class.%method) (%file:%line\) - %cyan(%msg%n) + + UTF-8 + + + + + + + + + + + + +