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
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+