build 整理SQL和配置

This commit is contained in:
xxm1995
2023-07-12 15:54:42 +08:00
parent ba30c2bf42
commit b0f71431db
28 changed files with 2327 additions and 5949 deletions

View File

@@ -2,10 +2,11 @@
<p>
<img src='https://gitee.com/bootx/bootx-platform/badge/star.svg?theme=dark' alt='star'/>
<img src="https://img.shields.io/badge/Boot%20Platform-1.2.3-success.svg" alt="Build Status"/>
<img src="https://img.shields.io/badge/Dax%20Pay-1.0-success.svg" alt="Build Status"/>
<img src="https://img.shields.io/badge/Boot%20Platform-1.3.2-success.svg" alt="Build Status"/>
<img src='https://gitee.com/bootx/dax-pay/badge/star.svg?theme=dark' alt='star'/>
<img src="https://img.shields.io/badge/Dax%20Pay-1.0.0-success.svg" alt="Build Status"/>
<img src="https://img.shields.io/badge/Author-Bootx-orange.svg" alt="Build Status"/>
<img src="https://img.shields.io/badge/Spring%20Boot-2.7.10-blue.svg" alt="Downloads"/>
<img src="https://img.shields.io/badge/Spring%20Boot-2.7.x-blue.svg" alt="Downloads"/>
<img src="https://img.shields.io/badge/license-Apache%20License%202.0-green.svg"/>
</p>
@@ -17,10 +18,14 @@ Dax-Pay是Bootx-Platform的子项目之一主要是对支付收单和账务
同时扩展了更多支付方式,如储值卡、现金卡等,可以作为一个简单的四方支付进行使用。
## 🛠️功能亮点
- 支持单通道支付、聚合支付、组合支付、部分和全部退款等支付功能
- 支持支付宝、微信、云闪付、现金、钱包、储值卡等多种支付方式
- 支持退款
- 支持对账
- 支持单通道支付、聚合支付、组合支付、退款、对账等支付功能
- 单通道支付:支持支付宝、微信、现金、钱包、储值卡等多种支付方式
- 聚合支付:支持微信或支付宝使用同一个码
- 组合支付:支持多种同步支付和一个异步支付(微信、支付宝)进行组合支付
- 支持退款:部分对款、全部退款等方式
- 储值卡:支持单卡支付、多卡支付,退款时支持退款到原储值卡中,也支持将余额退到同一个卡上
- 支付宝支持web支付、wap支付、扫码支付、付款码支付、APP支付
- 微信wap支付、扫码支付、付款码支付、APP支付、公众号/小程序支付
结算台演示地址:[http://daxpay.demo.bootx.cn/cashier](http://daxpay.demo.bootx.cn/cashier)
@@ -41,17 +46,14 @@ Dax-Pay是Bootx-Platform的子项目之一主要是对支付收单和账务
## 名词解释
| 名词 | 英文或简写 | 备注 |
|------|----------|------------------------------------------------|
|------|----------------|------------------------------------------------|
| 支付通道 | Channel | 主要包括第三方支付平台,如支付宝、微信、云闪付等 |
| 支付方式 | PayWay | 主要是进行支付时的方式如扫码支付、H5支付、APP支付等一种支付通道通常会有多种支付方式 |
| 支付策略 | Strategy | 对支付通道和支付方式进行封装,可以完成一种支付操作 |
| 聚合支付 | | 通常是扫码或收款时,根据客户使用应用的不同,自动识别是哪种支付通道,并进行支付 |
| 组合支付 | | 同时使用多种支付通道进行支付,如同时使用余额+现金+储值卡+微信支付进行支付 |
| 商户 | Merchant | |
| 商户应用 | mchApp | |
| 分账 | | |
| 对账 | | |
| 聚合支付 | AggregationPay | 通常是扫码或收款时,根据客户使用应用的不同,自动识别是哪种支付通道,并进行支付 |
| 组合支付 | CombinationPay | 同时使用多种支付通道进行支付,如同时使用余额+现金+储值卡+微信支付进行支付 |
| 商户 | Merchant | 系统中的一种单元 |
| 商户应用 | mchApp | 一个商户可以有多个应用,一个应用可以分别进行各种支付通道配置 |
## 🥞项目结构(dax-pay)
```lua
@@ -62,12 +64,14 @@ dax-pay
├── controller -- 使用外部项目对应开源协议
├── core -- 核心包
├── aggregate -- Quartz定时任务模块
├── cashier -- 微信对接模块
├── pay -- 企业微信对接模块
├── payment -- 企业微信对接模块
├── paymodel -- 企业微信对接模块
├── refund -- 企业微信对接模块
├── order -- 企业微信对接模块
├── cashier -- 结算台
├── channel -- 支付通道
├── merchant -- 商户和应用
├── pay -- 支付
├── payment -- 支付单
├── notify -- 回调通知
├── refund -- 退款
├── order -- 订单
├── bill -- 账单
├── dto -- 业务实体类
├── event -- 事件
@@ -76,7 +80,6 @@ dax-pay
├── param -- 参数
├── task -- 定时任务
├── util -- 工具类
├── DaxPayApplication -- 启动类
├── resources
├── mapper -- MyBatis映射文件
├── templates -- 静态网页

2236
_config/sql/dax-pay.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,10 @@
# CHANGELOG
## [v1.0.0] 支付之路
-
- 支持单通道支付、聚合支付、组合支付、退款功能
- 单通道支付:支持支付宝、微信、现金、钱包、储值卡等多种支付方式
- 聚合支付:支持微信或支付宝使用同一个码
- 组合支付:支持多种同步支付和一个异步支付(微信、支付宝)进行组合支付
- 支持退款:部分对款、全部退款等方式
- 储值卡:支持单卡支付、多卡支付,退款时支持退款到原储值卡中,也支持将余额退到同一个卡上
- 支付宝支持web支付、wap支付、扫码支付、付款码支付、APP支付
- 微信wap支付、扫码支付、付款码支付、APP支付、公众号/小程序支付

View File

@@ -1 +0,0 @@
[ ]

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>cn.bootx.platform</groupId>
<artifactId>bootx-dax-pay</artifactId>
<version>1.3.0</version>
<version>1.0.0</version>
</parent>
<artifactId>dax-pay</artifactId>
@@ -151,12 +151,18 @@
</exclusions>
</dependency>
<!-- 微信支付 -->
<!-- 微信支付 ijpay -->
<dependency>
<groupId>com.github.javen205</groupId>
<artifactId>IJPay-WxPay</artifactId>
<version>${IJPay.version}</version>
</dependency>
<!-- 微信支付 wxjava -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>${wxjava.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -9,9 +9,9 @@ package cn.bootx.platform.daxpay.code.paymodel;
public interface WeChatPayCode {
// 版本
String API_V2 = "api_v2";
String API_V2 = "apiV2";
String API_V3 = "api_v3";
String API_V3 = "apiV3";
// 请求参数
/** jsapi发起获取AuthCode时的重定向参数 */

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.alipay.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlFieldType;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlFieldTypeEnum;
@@ -31,7 +30,7 @@ import lombok.experimental.Accessors;
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
@DbTable(comment = "支付宝支付配置")
//@DbTable(comment = "支付宝支付配置")
@TableName("pay_alipay_config")
public class AlipayConfig extends MpBaseEntity implements EntityBaseFunction<AlipayConfigDto> {

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.config.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.daxpay.core.channel.config.convert.PayChannelConfigConvert;
@@ -20,7 +19,7 @@ import lombok.experimental.Accessors;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "支付通道配置")
//@DbTable(comment = "支付通道配置")
@Accessors(chain = true)
@TableName("pay_channel_config")
public class PayChannelConfig extends MpBaseEntity implements EntityBaseFunction<PayChannelConfigDto> {

View File

@@ -2,7 +2,6 @@ package cn.bootx.platform.daxpay.core.channel.voucher.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbComment;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
@@ -25,7 +24,7 @@ import java.time.LocalDateTime;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "储值卡")
//@DbTable(comment = "储值卡")
@Accessors(chain = true)
@TableName("pay_voucher")
public class Voucher extends MpBaseEntity implements EntityBaseFunction<VoucherDto> {

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.voucher.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
@@ -23,7 +22,7 @@ import java.math.BigDecimal;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "储值卡日志")
//@DbTable(comment = "储值卡日志")
@Accessors(chain = true)
@TableName("pay_voucher_log")
public class VoucherLog extends MpBaseEntity implements EntityBaseFunction<VoucherLogDto> {

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.voucher.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlFieldType;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlFieldTypeEnum;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
@@ -25,7 +24,7 @@ import java.util.List;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "储值卡支付记录")
//@DbTable(comment = "储值卡支付记录")
@Accessors(chain = true)
@TableName(value = "pay_voucher_payment",autoResultMap = true)
public class VoucherPayment extends BasePayment implements EntityBaseFunction<VoucherPaymentDto> {

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.wallet.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
@@ -23,7 +22,7 @@ import java.math.BigDecimal;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "钱包")
//@DbTable(comment = "钱包")
@Accessors(chain = true)
@TableName("pay_wallet")
public class Wallet extends MpBaseEntity implements EntityBaseFunction<WalletDto> {

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.wallet.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
@@ -22,7 +21,7 @@ import java.math.BigDecimal;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "钱包日志")
//@DbTable(comment = "钱包日志")
@Accessors(chain = true)
@TableName("pay_wallet_log")
public class WalletLog extends MpBaseEntity implements EntityBaseFunction<WalletLogDto> {

View File

@@ -18,7 +18,7 @@ import lombok.experimental.Accessors;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "钱包交易记录")
//@DbTable(comment = "钱包交易记录")
@Accessors(chain = true)
@TableName("pay_wallet_payment")
public class WalletPayment extends BasePayment implements EntityBaseFunction<WalletPaymentDto> {

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.channel.wechat.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlFieldType;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlFieldTypeEnum;
@@ -9,6 +8,7 @@ import cn.bootx.platform.common.core.annotation.BigField;
import cn.bootx.platform.common.core.annotation.EncryptionField;
import cn.bootx.platform.common.core.function.EntityBaseFunction;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import cn.bootx.platform.daxpay.code.paymodel.WeChatPayCode;
import cn.bootx.platform.daxpay.core.channel.wechat.convert.WeChatConvert;
import cn.bootx.platform.daxpay.dto.channel.wechat.WeChatPayConfigDto;
import cn.bootx.platform.daxpay.param.channel.wechat.WeChatPayConfigParam;
@@ -29,7 +29,7 @@ import lombok.experimental.Accessors;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "微信支付配置")
//@DbTable(comment = "微信支付配置")
@Accessors(chain = true)
@TableName("pay_wechat_pay_config")
public class WeChatPayConfig extends MpBaseEntity implements EntityBaseFunction<WeChatPayConfigDto> {
@@ -57,6 +57,13 @@ public class WeChatPayConfig extends MpBaseEntity implements EntityBaseFunction<
@DbColumn(comment = "微信应用appId")
private String wxAppId;
/**
* api版本
* @see WeChatPayCode#API_V2
*/
@DbColumn(comment = "api版本")
private String apiVersion;
/** 商户平台「API安全」中的 APIv2 密钥 */
@TableField(updateStrategy = FieldStrategy.IGNORED)
@BigField
@@ -85,10 +92,6 @@ public class WeChatPayConfig extends MpBaseEntity implements EntityBaseFunction<
@DbColumn(comment = "API证书中p12证书Base64")
private String p12;
/** 应用域名,回调中会使用此参数 */
@DbColumn(comment = "应用域名")
private String domain;
/** 服务器异步通知页面路径 通知url必须为直接可访问的url不能携带参数。公网域名必须为https */
@DbColumn(comment = "异步通知页面")
private String notifyUrl;

View File

@@ -55,6 +55,7 @@ public class WeChatPayCancelService {
.build()
.createSign(weChatPayConfig.getApiKeyV2(), SignType.HMACSHA256);
String xmlResult = WxPayApi.closeOrder(params);
Map<String, String> result = WxPayKit.xmlToMap(xmlResult);
this.verifyErrorMsg(result);
}

View File

@@ -1,7 +1,6 @@
package cn.bootx.platform.daxpay.core.merchant.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.platform.common.mybatisplus.base.MpBaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
@@ -17,7 +16,7 @@ import lombok.experimental.Accessors;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "商户应用支付配置")
//@DbTable(comment = "商户应用支付配置")
@Accessors(chain = true)
@TableName("pay_mch_app_config")
public class MchAppPayConfig extends MpBaseEntity {

View File

@@ -23,7 +23,7 @@ import lombok.experimental.FieldNameConstants;
* @author xxm
* @since 2023-05-19
*/
@DbTable(comment = "商户应用")
//@DbTable(comment = "商户应用")
@EqualsAndHashCode(callSuper = true)
@DbMySqlIndex(fields = MchApplication.Fields.code, type = MySqlIndexType.UNIQUE, comment = "应用编码唯一索引")
@Data

View File

@@ -25,7 +25,7 @@ import java.time.LocalDateTime;
*/
@EqualsAndHashCode(callSuper = true)
@Data
@DbTable(comment = "回调记录")
//@DbTable(comment = "回调记录")
@Accessors(chain = true)
@TableName("pay_pay_notify_record")
public class PayNotifyRecord extends MpBaseEntity implements EntityBaseFunction<PayNotifyRecordDto> {

View File

@@ -1,8 +1,6 @@
package cn.bootx.platform.daxpay.core.payment.entity;
import cn.bootx.mybatis.table.modify.annotation.DbColumn;
import cn.bootx.mybatis.table.modify.annotation.DbComment;
import cn.bootx.mybatis.table.modify.annotation.DbTable;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlFieldType;
import cn.bootx.mybatis.table.modify.mybatis.mysq.annotation.DbMySqlIndex;
import cn.bootx.mybatis.table.modify.mybatis.mysq.constants.MySqlFieldTypeEnum;
@@ -33,10 +31,8 @@ import java.util.List;
* @author xxm
* @since 2020/12/8
*/
@DbTable
@EqualsAndHashCode(callSuper = true)
@Data
@DbComment("支付记录")
@FieldNameConstants
@Accessors(chain = true)
@TableName(value = "pay_payment", autoResultMap = true)

View File

@@ -1,6 +1,7 @@
package cn.bootx.platform.daxpay.dto.channel.wechat;
import cn.bootx.platform.common.core.rest.dto.BaseDto;
import cn.bootx.platform.daxpay.code.paymodel.WeChatPayCode;
import cn.bootx.platform.starter.data.perm.sensitive.SensitiveInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -31,6 +32,12 @@ public class WeChatPayConfigDto extends BaseDto implements Serializable {
@SensitiveInfo
private String wxAppId;
/**
* @see WeChatPayCode#API_V2
*/
@Schema(description = "api版本")
private String apiVersion;
@Schema(description = "商户平台「API安全」中的 APIv2 密钥")
@SensitiveInfo
private String apiKeyV2;
@@ -47,9 +54,6 @@ public class WeChatPayConfigDto extends BaseDto implements Serializable {
@SensitiveInfo
private String p12;
@Schema(description = "应用域名,回调中会使用此参数")
private String domain;
@Schema(description = "服务器异步通知页面路径 通知url必须为直接可访问的url不能携带参数。公网域名必须为https ")
private String notifyUrl;

View File

@@ -1,6 +1,7 @@
package cn.bootx.platform.daxpay.param.channel.wechat;
import cn.bootx.platform.common.core.annotation.QueryParam;
import cn.bootx.platform.daxpay.code.paymodel.WeChatPayCode;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -37,6 +38,12 @@ public class WeChatPayConfigParam {
@Schema(description = "微信应用appId")
private String wxAppId;
/**
* @see WeChatPayCode#API_V2
*/
@Schema(description = "api版本")
private String apiVersion;
@Schema(description = "商户平台「API安全」中的 APIv2 密钥")
private String apiKeyV2;
@@ -49,9 +56,6 @@ public class WeChatPayConfigParam {
@Schema(description = "API 证书中的 p12 文件")
private String p12;
@Schema(description = "应用域名,回调中会使用此参数")
private String domain;
@Schema(description = "服务器异步通知页面路径 通知url必须为直接可访问的url不能携带参数。公网域名必须为https ")
private String notifyUrl;

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>cn.bootx.platform</groupId>
<artifactId>bootx-dax-pay</artifactId>
<version>1.3.0</version>
<version>1.0.0</version>
</parent>
<artifactId>dax-start</artifactId>

View File

@@ -227,4 +227,5 @@ bootx:
bucket: bootx
# 数据权限
data-perm:
# 需要符合AES密钥的要求
field-decrypt-key: "UCrtxSCwYZNCIlav"

44
pom.xml
View File

@@ -15,7 +15,7 @@
<groupId>cn.bootx.platform</groupId>
<artifactId>bootx-dax-pay</artifactId>
<packaging>pom</packaging>
<version>1.3.0</version>
<version>1.0.0</version>
<modules>
<module>dax-pay</module>
@@ -29,53 +29,21 @@
<!-- 二方库版本 -->
<bootx-platform.version>1.3.2</bootx-platform.version>
<dax.version>1.3.0</dax.version>
<dax.version>1.0.0</dax.version>
<!-- 三方库 -->
<hutool.version>5.8.15</hutool.version>
<oshi.version>6.4.0</oshi.version>
<jackson.version>2.12.3</jackson.version>
<lang3.version>3.11</lang3.version>
<collections4.version>4.4</collections4.version>
<text.version>1.10.0</text.version>
<commons-io.version>2.11.0</commons-io.version>
<guava.version>31.1-jre</guava.version>
<servlet-api.version>4.0.1</servlet-api.version>
<spring.checkstyle.version>0.0.38</spring.checkstyle.version>
<slf4j.version>1.7.30</slf4j.version>
<ttl.version>2.14.2</ttl.version>
<flyway.version>7.15.0</flyway.version>
<xml-apis.version>1.4.01</xml-apis.version>
<flowable.version>6.8.0</flowable.version>
<!-- 升级新版本会有兼容性问题 -->
<logback-classic.version>1.2.4</logback-classic.version>
<!-- 3.5.3 有bug -->
<xml-apis.version>1.4.01</xml-apis.version>
<spring.checkstyle.version>0.0.38</spring.checkstyle.version>
<plumelog.version>3.5.2</plumelog.version>
<easyexcel.version>3.2.1</easyexcel.version>
<xxl-job.version>2.3.1</xxl-job.version>
<IJPay.version>2.9.7</IJPay.version>
<sa-token.version>1.34.0</sa-token.version>
<justauth.version>1.16.5</justauth.version>
<minio.version>8.5.2</minio.version>
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
<dynamic-datasource.version>3.6.1</dynamic-datasource.version>
<springdoc.version>1.6.15</springdoc.version>
<redisson.version>3.20.0</redisson.version>
<knife4j.version>4.0.0</knife4j.version>
<mapstruct.version>1.5.3.Final</mapstruct.version>
<lombok-mapstruct.version>0.2.0</lombok-mapstruct.version>
<easy-captcha.version>1.6.2</easy-captcha.version>
<logstash-logback.version>7.3</logstash-logback.version>
<fastjson.version>1.2.83_noneautotype</fastjson.version>
<kryo.serializers.version>0.41</kryo.serializers.version>
<asyncTool.version>V1.4-SNAPSHOT</asyncTool.version>
<velocity.version>2.3</velocity.version>
<wxjava.version>4.4.9.B</wxjava.version>
<ding-talk.version>1.3.81</ding-talk.version>
<lock4j.version>2.2.4</lock4j.version>
<ip2region.version>2.7.0</ip2region.version>
<mybatis-table-modify.version>1.5.3</mybatis-table-modify.version>
<wxjava.version>4.5.2.B</wxjava.version>
<lock4j.version>2.2.4</lock4j.version>
</properties>
<!-- 项目依赖版本管理 -->
<dependencyManagement>
<dependencies>