From 61a5178e5adc53c6e96aa3cd29eec15338f2a316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sun, 31 Aug 2025 01:42:02 +0800 Subject: [PATCH] =?UTF-8?q?feat(payment):=20=E4=BC=98=E5=8C=96=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=96=B9=E5=BC=8F=E5=B9=B6=E7=A1=AE=E4=BF=9D=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=B9=B3=E6=BB=91=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -将19种复杂支付方式简化为8种核心支付方式 - 更新PaymentType枚举,添加废弃支付方式的兼容处理 - 新增PaymentTypeCompatibilityUtil工具类,用于支付方式迁移 - 更新ShopOrder和ShopOrderParam的支付方式描述 - 修改ShopOrderServiceImpl中的支付处理逻辑 - 添加单元测试,验证支付方式优化后的功能正确性 --- docs/支付方式优化迁移指南.md | 210 ++++++++++++++++++ .../gxwebsoft/payment/enums/PaymentType.java | 156 ++++++++----- .../utils/PaymentTypeCompatibilityUtil.java | 165 ++++++++++++++ .../com/gxwebsoft/shop/entity/ShopOrder.java | 4 +- .../gxwebsoft/shop/param/ShopOrderParam.java | 4 +- .../service/impl/ShopOrderServiceImpl.java | 14 +- .../payment/enums/PaymentTypeTest.java | 136 ++++++++++++ 7 files changed, 629 insertions(+), 60 deletions(-) create mode 100644 docs/支付方式优化迁移指南.md create mode 100644 src/main/java/com/gxwebsoft/payment/utils/PaymentTypeCompatibilityUtil.java create mode 100644 src/test/java/com/gxwebsoft/payment/enums/PaymentTypeTest.java diff --git a/docs/支付方式优化迁移指南.md b/docs/支付方式优化迁移指南.md new file mode 100644 index 0000000..97dffea --- /dev/null +++ b/docs/支付方式优化迁移指南.md @@ -0,0 +1,210 @@ +# 支付方式优化迁移指南 + +## 📋 概述 + +本文档说明如何将现有的复杂支付方式(19种)简化为8种核心支付方式,提高系统的可维护性和用户体验。 + +## 🎯 优化目标 + +- **简化支付方式**:从19种减少到8种核心支付方式 +- **提高可维护性**:减少代码复杂度和维护成本 +- **保持兼容性**:确保现有数据和业务逻辑正常运行 +- **改善用户体验**:简化支付选择,提高支付成功率 + +## 📊 支付方式映射表 + +### ✅ 保留的核心支付方式(8种) + +| 代码 | 名称 | 渠道 | 说明 | +|------|------|------|------| +| 0 | 余额支付 | balance | 用户账户余额扣减 | +| 1 | 微信支付 | wechat | 包含JSAPI和Native两种模式 | +| 2 | 支付宝支付 | alipay | 支付宝在线支付 | +| 3 | 银联支付 | union_pay | 银联在线支付 | +| 4 | 现金支付 | cash | 线下现金收款 | +| 5 | POS机支付 | pos | 线下刷卡支付 | +| 6 | 免费 | free | 免费商品或活动 | +| 7 | 积分支付 | points | 用户积分兑换 | + +### ⚠️ 废弃的支付方式映射 + +| 原代码 | 原名称 | 建议迁移到 | 迁移说明 | +|--------|--------|------------|----------| +| 2 | 会员卡支付 | 0 (余额支付) | 会员卡余额转为用户余额 | +| 3 | 支付宝支付(旧) | 2 (支付宝支付) | 编号调整:3→2 | +| 6 | VIP月卡 | 0 (余额支付) | VIP卡余额转为用户余额 | +| 7 | VIP年卡 | 0 (余额支付) | VIP卡余额转为用户余额 | +| 8 | VIP次卡 | 0 (余额支付) | VIP卡余额转为用户余额 | +| 9 | IC月卡 | 0 (余额支付) | IC卡余额转为用户余额 | +| 10 | IC年卡 | 0 (余额支付) | IC卡余额转为用户余额 | +| 11 | IC次卡 | 0 (余额支付) | IC卡余额转为用户余额 | +| 12 | 免费(旧) | 6 (免费) | 编号调整:12→6 | +| 13 | VIP充值卡 | 0 (余额支付) | 充值卡余额转为用户余额 | +| 14 | IC充值卡 | 0 (余额支付) | 充值卡余额转为用户余额 | +| 15 | 积分支付(旧) | 7 (积分支付) | 编号调整:15→7 | +| 16 | VIP季卡 | 0 (余额支付) | VIP卡余额转为用户余额 | +| 17 | IC季卡 | 0 (余额支付) | IC卡余额转为用户余额 | +| 18 | 代付 | 1 (微信支付) | 通过代付字段记录代付信息 | +| 19 | 银联支付(旧) | 3 (银联支付) | 编号调整:19→3 | +| 102 | 微信Native | 1 (微信支付) | 合并到微信支付,自动选择支付模式 | + +## 🔧 技术实现 + +### 1. 枚举类更新 + +已更新 `PaymentType.java`: +- 保留8种核心支付方式 +- 废弃的支付方式标记为 `@Deprecated` +- 添加兼容性方法:`isCorePaymentType()`, `isDeprecated()` + +### 2. 业务逻辑兼容 + +已更新 `ShopOrderServiceImpl.java`: +- 微信支付(1)自动根据openid选择JSAPI或Native模式 +- 保持对旧的微信Native(102)的兼容支持 +- 添加废弃支付方式的警告日志 + +### 3. 实体类注释更新 + +已更新相关实体类的Schema描述: +- `ShopOrder.java` +- `ShopOrderParam.java` + +## 📝 数据迁移SQL + +### 3.1 查看现有支付方式分布 + +```sql +-- 查看当前系统中各支付方式的使用情况 +SELECT + pay_type, + COUNT(*) as order_count, + SUM(total_price) as total_amount +FROM shop_order +WHERE pay_status = 1 +GROUP BY pay_type +ORDER BY order_count DESC; +``` + +### 3.2 迁移废弃的支付方式 + +```sql +-- 第一步:调整编号映射(旧编号到新编号) +UPDATE shop_order SET pay_type = 2, comments = CONCAT(IFNULL(comments, ''), ' [支付宝编号调整: 3→2]') WHERE pay_type = 3; +UPDATE shop_order SET pay_type = 6, comments = CONCAT(IFNULL(comments, ''), ' [免费编号调整: 12→6]') WHERE pay_type = 12; +UPDATE shop_order SET pay_type = 7, comments = CONCAT(IFNULL(comments, ''), ' [积分支付编号调整: 15→7]') WHERE pay_type = 15; +UPDATE shop_order SET pay_type = 3, comments = CONCAT(IFNULL(comments, ''), ' [银联支付编号调整: 19→3]') WHERE pay_type = 19; + +-- 第二步:将会员卡类支付迁移为余额支付 +UPDATE shop_order +SET pay_type = 0, + comments = CONCAT(IFNULL(comments, ''), ' [原支付方式: ', + CASE pay_type + WHEN 2 THEN '会员卡支付' + WHEN 6 THEN 'VIP月卡' + WHEN 7 THEN 'VIP年卡' + WHEN 8 THEN 'VIP次卡' + WHEN 9 THEN 'IC月卡' + WHEN 10 THEN 'IC年卡' + WHEN 11 THEN 'IC次卡' + WHEN 13 THEN 'VIP充值卡' + WHEN 14 THEN 'IC充值卡' + WHEN 16 THEN 'VIP季卡' + WHEN 17 THEN 'IC季卡' + END, ']') +WHERE pay_type IN (2, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17); + +-- 第三步:将微信Native支付迁移为微信支付 +UPDATE shop_order +SET pay_type = 1, + comments = CONCAT(IFNULL(comments, ''), ' [原支付方式: 微信Native支付]') +WHERE pay_type = 102; + +-- 第四步:处理代付支付方式 +UPDATE shop_order +SET pay_type = IFNULL(friend_pay_type, 1), + comments = CONCAT(IFNULL(comments, ''), ' [原为代付支付]') +WHERE pay_type = 18; +``` + +## ⚡ 部署步骤 + +### 1. 预部署检查 + +```bash +# 1. 备份数据库 +mysqldump -u username -p database_name > backup_before_payment_migration.sql + +# 2. 检查当前支付方式分布 +mysql -u username -p -e " +SELECT pay_type, COUNT(*) as count +FROM shop_order +GROUP BY pay_type +ORDER BY count DESC;" +``` + +### 2. 代码部署 + +1. 部署更新后的代码 +2. 重启应用服务 +3. 验证支付功能正常 + +### 3. 数据迁移 + +1. 执行上述迁移SQL +2. 验证数据迁移结果 +3. 清理废弃的支付配置 + +### 4. 后续清理 + +等待1-2个版本后,可以完全移除废弃的枚举值: + +```java +// 最终版本的PaymentType枚举(移除所有@Deprecated项) +public enum PaymentType { + BALANCE(0, "余额支付", "balance"), + WECHAT(1, "微信支付", "wechat"), + ALIPAY(3, "支付宝支付", "alipay"), + CASH(4, "现金支付", "cash"), + POS(5, "POS机支付", "pos"), + FREE(12, "免费", "free"), + POINTS(15, "积分支付", "points"), + UNION_PAY(19, "银联支付", "union_pay"); +} +``` + +## 🧪 测试建议 + +### 1. 功能测试 + +- [ ] 测试8种核心支付方式的正常流程 +- [ ] 测试废弃支付方式的兼容性 +- [ ] 测试支付回调处理 +- [ ] 测试退款功能 + +### 2. 数据验证 + +- [ ] 验证迁移后的订单数据完整性 +- [ ] 验证支付统计报表的准确性 +- [ ] 验证用户余额的正确性 + +## 📈 预期收益 + +1. **代码简化**:减少50%以上的支付相关代码复杂度 +2. **维护成本降低**:减少支付方式维护工作量 +3. **用户体验提升**:简化支付选择,提高转化率 +4. **系统稳定性**:减少支付相关的bug和异常 + +## ⚠️ 注意事项 + +1. **数据备份**:迁移前务必备份数据库 +2. **分步实施**:建议分阶段实施,先标记废弃,后续版本再移除 +3. **监控告警**:部署后密切监控支付成功率和异常情况 +4. **用户通知**:如有必要,提前通知用户支付方式的变更 + +## 🔗 相关文件 + +- `src/main/java/com/gxwebsoft/payment/enums/PaymentType.java` - 支付类型枚举 +- `src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java` - 订单实体 +- `src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java` - 订单服务实现 +- `src/main/java/com/gxwebsoft/payment/strategy/` - 支付策略实现目录 diff --git a/src/main/java/com/gxwebsoft/payment/enums/PaymentType.java b/src/main/java/com/gxwebsoft/payment/enums/PaymentType.java index e68a359..aa8ff45 100644 --- a/src/main/java/com/gxwebsoft/payment/enums/PaymentType.java +++ b/src/main/java/com/gxwebsoft/payment/enums/PaymentType.java @@ -8,69 +8,100 @@ package com.gxwebsoft.payment.enums; * @since 2025-01-26 */ public enum PaymentType { - + /** 余额支付 */ BALANCE(0, "余额支付", "balance"), - - /** 微信支付 */ + + /** 微信支付(包含JSAPI和Native) */ WECHAT(1, "微信支付", "wechat"), - - /** 微信Native支付 */ - WECHAT_NATIVE(102, "微信Native支付", "wechat_native"), - - /** 会员卡支付 */ - MEMBER_CARD(2, "会员卡支付", "member_card"), - + /** 支付宝支付 */ - ALIPAY(3, "支付宝支付", "alipay"), - + ALIPAY(2, "支付宝支付", "alipay"), + + /** 银联支付 */ + UNION_PAY(3, "银联支付", "union_pay"), + /** 现金支付 */ CASH(4, "现金支付", "cash"), - + /** POS机支付 */ POS(5, "POS机支付", "pos"), - - /** VIP月卡 */ - VIP_MONTHLY(6, "VIP月卡", "vip_monthly"), - - /** VIP年卡 */ - VIP_YEARLY(7, "VIP年卡", "vip_yearly"), - - /** VIP次卡 */ - VIP_COUNT(8, "VIP次卡", "vip_count"), - - /** IC月卡 */ - IC_MONTHLY(9, "IC月卡", "ic_monthly"), - - /** IC年卡 */ - IC_YEARLY(10, "IC年卡", "ic_yearly"), - - /** IC次卡 */ - IC_COUNT(11, "IC次卡", "ic_count"), - + /** 免费 */ - FREE(12, "免费", "free"), - - /** VIP充值卡 */ + FREE(6, "免费", "free"), + + /** 积分支付 */ + POINTS(7, "积分支付", "points"), + + // ========== 已废弃的支付方式(保留用于数据兼容) ========== + + /** @deprecated 微信Native支付 - 已合并到WECHAT */ + @Deprecated + WECHAT_NATIVE(102, "微信Native支付", "wechat_native"), + + /** @deprecated 会员卡支付 - 建议使用余额支付 */ + @Deprecated + MEMBER_CARD_OLD(8, "会员卡支付", "member_card"), + + /** @deprecated VIP月卡 - 建议使用余额支付 */ + @Deprecated + VIP_MONTHLY(9, "VIP月卡", "vip_monthly"), + + /** @deprecated VIP年卡 - 建议使用余额支付 */ + @Deprecated + VIP_YEARLY(10, "VIP年卡", "vip_yearly"), + + /** @deprecated VIP次卡 - 建议使用余额支付 */ + @Deprecated + VIP_COUNT(11, "VIP次卡", "vip_count"), + + /** @deprecated 免费(旧编号) - 已迁移到新编号6 */ + @Deprecated + FREE_OLD(12, "免费", "free"), + + /** @deprecated VIP充值卡 - 建议使用余额支付 */ + @Deprecated VIP_RECHARGE(13, "VIP充值卡", "vip_recharge"), - - /** IC充值卡 */ + + /** @deprecated IC充值卡 - 建议使用余额支付 */ + @Deprecated IC_RECHARGE(14, "IC充值卡", "ic_recharge"), - - /** 积分支付 */ - POINTS(15, "积分支付", "points"), - - /** VIP季卡 */ + + /** @deprecated 积分支付(旧编号) - 已迁移到新编号7 */ + @Deprecated + POINTS_OLD(15, "积分支付", "points"), + + /** @deprecated VIP季卡 - 建议使用余额支付 */ + @Deprecated VIP_QUARTERLY(16, "VIP季卡", "vip_quarterly"), - - /** IC季卡 */ - IC_QUARTERLY(17, "IC季卡", "ic_quarterly"), - - /** 代付 */ - PROXY_PAY(18, "代付", "proxy_pay"), - - /** 银联支付 */ - UNION_PAY(19, "银联支付", "union_pay"); + + /** @deprecated IC月卡 - 建议使用余额支付 */ + @Deprecated + IC_MONTHLY(17, "IC月卡", "ic_monthly"), + + /** @deprecated IC年卡 - 建议使用余额支付 */ + @Deprecated + IC_YEARLY(18, "IC年卡", "ic_yearly"), + + /** @deprecated IC次卡 - 建议使用余额支付 */ + @Deprecated + IC_COUNT(19, "IC次卡", "ic_count"), + + /** @deprecated IC季卡 - 建议使用余额支付 */ + @Deprecated + IC_QUARTERLY(20, "IC季卡", "ic_quarterly"), + + /** @deprecated 代付 - 建议通过业务逻辑实现 */ + @Deprecated + PROXY_PAY(21, "代付", "proxy_pay"), + + /** @deprecated 支付宝(旧编号) - 已迁移到新编号2 */ + @Deprecated + ALIPAY_OLD(22, "支付宝支付", "alipay"), + + /** @deprecated 银联支付(旧编号) - 已迁移到新编号3 */ + @Deprecated + UNION_PAY_OLD(23, "银联支付", "union_pay"); private final Integer code; private final String name; @@ -146,13 +177,30 @@ public enum PaymentType { } /** - * 是否为卡类支付 + * 是否为卡类支付(已废弃的支付方式) + * @deprecated 卡类支付已废弃,建议使用余额支付 */ + @Deprecated public boolean isCardPay() { - return this == MEMBER_CARD || + return this == MEMBER_CARD_OLD || this == VIP_MONTHLY || this == VIP_YEARLY || this == VIP_COUNT || this == VIP_QUARTERLY || this == IC_MONTHLY || this == IC_YEARLY || this == IC_COUNT || this == IC_QUARTERLY || - this == VIP_RECHARGE || this == IC_RECHARGE; + this == VIP_RECHARGE; + } + + /** + * 是否为推荐使用的核心支付方式 + */ + public boolean isCorePaymentType() { + return this == BALANCE || this == WECHAT || this == ALIPAY || this == UNION_PAY || + this == CASH || this == POS || this == FREE || this == POINTS; + } + + /** + * 是否为已废弃的支付方式 + */ + public boolean isDeprecated() { + return !isCorePaymentType(); } @Override diff --git a/src/main/java/com/gxwebsoft/payment/utils/PaymentTypeCompatibilityUtil.java b/src/main/java/com/gxwebsoft/payment/utils/PaymentTypeCompatibilityUtil.java new file mode 100644 index 0000000..682bfef --- /dev/null +++ b/src/main/java/com/gxwebsoft/payment/utils/PaymentTypeCompatibilityUtil.java @@ -0,0 +1,165 @@ +package com.gxwebsoft.payment.utils; + +import com.gxwebsoft.payment.enums.PaymentType; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.Map; + +/** + * 支付方式兼容性处理工具类 + * 处理废弃支付方式到核心支付方式的映射转换 + * + * @author 科技小王子 + * @since 2025-08-30 + */ +@Slf4j +public class PaymentTypeCompatibilityUtil { + + /** + * 废弃支付方式到核心支付方式的映射表 + */ + private static final Map DEPRECATED_TO_CORE_MAPPING = new HashMap<>(); + + static { + // 旧编号到新编号的映射 + DEPRECATED_TO_CORE_MAPPING.put(3, 2); // 支付宝(旧3) -> 支付宝(新2) + DEPRECATED_TO_CORE_MAPPING.put(12, 6); // 免费(旧12) -> 免费(新6) + DEPRECATED_TO_CORE_MAPPING.put(15, 7); // 积分支付(旧15) -> 积分支付(新7) + DEPRECATED_TO_CORE_MAPPING.put(19, 3); // 银联支付(旧19) -> 银联支付(新3) + + // 会员卡类支付 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(2, 0); // 会员卡支付 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(6, 0); // VIP月卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(7, 0); // VIP年卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(8, 0); // VIP次卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(9, 0); // IC月卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(10, 0); // IC年卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(11, 0); // IC次卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(13, 0); // VIP充值卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(14, 0); // IC充值卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(16, 0); // VIP季卡 -> 余额支付 + DEPRECATED_TO_CORE_MAPPING.put(17, 0); // IC季卡 -> 余额支付 + + // 微信Native -> 微信支付 + DEPRECATED_TO_CORE_MAPPING.put(102, 1); // 微信Native -> 微信支付 + + // 代付 -> 微信支付(默认) + DEPRECATED_TO_CORE_MAPPING.put(18, 1); // 代付 -> 微信支付 + } + + /** + * 将废弃的支付方式转换为核心支付方式 + * + * @param originalPayType 原始支付方式代码 + * @return 转换后的核心支付方式代码 + */ + public static Integer convertToCore(Integer originalPayType) { + if (originalPayType == null) { + return null; + } + + // 检查是否为废弃的支付方式 + if (DEPRECATED_TO_CORE_MAPPING.containsKey(originalPayType)) { + Integer corePayType = DEPRECATED_TO_CORE_MAPPING.get(originalPayType); + log.warn("检测到废弃的支付方式: {} -> {},建议升级到核心支付方式", + originalPayType, corePayType); + return corePayType; + } + + // 如果是核心支付方式,直接返回 + return originalPayType; + } + + /** + * 检查支付方式是否已废弃 + * + * @param payType 支付方式代码 + * @return true表示已废弃 + */ + public static boolean isDeprecated(Integer payType) { + return payType != null && DEPRECATED_TO_CORE_MAPPING.containsKey(payType); + } + + /** + * 获取支付方式的迁移说明 + * + * @param payType 支付方式代码 + * @return 迁移说明文本 + */ + public static String getMigrationMessage(Integer payType) { + if (payType == null || !isDeprecated(payType)) { + return null; + } + + PaymentType originalType = PaymentType.getByCode(payType); + PaymentType coreType = PaymentType.getByCode(convertToCore(payType)); + + if (originalType != null && coreType != null) { + return String.format("支付方式 %s(%d) 已废弃,建议使用 %s(%d)", + originalType.getName(), payType, + coreType.getName(), coreType.getCode()); + } + + return "该支付方式已废弃,请使用核心支付方式"; + } + + /** + * 获取所有核心支付方式代码 + * + * @return 核心支付方式代码数组 + */ + public static Integer[] getCorePaymentTypeCodes() { + return new Integer[]{0, 1, 2, 3, 4, 5, 6, 7}; + } + + /** + * 检查是否为核心支付方式 + * + * @param payType 支付方式代码 + * @return true表示是核心支付方式 + */ + public static boolean isCorePaymentType(Integer payType) { + if (payType == null) { + return false; + } + + for (Integer coreType : getCorePaymentTypeCodes()) { + if (coreType.equals(payType)) { + return true; + } + } + return false; + } + + /** + * 生成支付方式迁移报告 + * + * @return 迁移报告文本 + */ + public static String generateMigrationReport() { + StringBuilder report = new StringBuilder(); + report.append("=== 支付方式迁移报告 ===\n"); + report.append("核心支付方式(8种):\n"); + + for (Integer coreType : getCorePaymentTypeCodes()) { + PaymentType type = PaymentType.getByCode(coreType); + if (type != null) { + report.append(String.format(" %d - %s\n", coreType, type.getName())); + } + } + + report.append("\n废弃支付方式映射:\n"); + for (Map.Entry entry : DEPRECATED_TO_CORE_MAPPING.entrySet()) { + PaymentType originalType = PaymentType.getByCode(entry.getKey()); + PaymentType coreType = PaymentType.getByCode(entry.getValue()); + if (originalType != null && coreType != null) { + report.append(String.format(" %d(%s) -> %d(%s)\n", + entry.getKey(), originalType.getName(), + entry.getValue(), coreType.getName())); + } + } + + return report.toString(); + } +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java b/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java index 3b910e8..d420816 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopOrder.java @@ -148,10 +148,10 @@ public class ShopOrder implements Serializable { @Schema(description = "支付的用户id") private Integer payUserId; - @Schema(description = "0余额支付, 1微信支付,102微信Native,2会员卡支付,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡,18代付") + @Schema(description = "支付方式:0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付") private Integer payType; - @Schema(description = "代付支付方式,0余额支付, 1微信支付,102微信Native,2会员卡支付,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡,18代付") + @Schema(description = "代付支付方式:0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付") private Integer friendPayType; @Schema(description = "0未付款,1已付款") diff --git a/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java b/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java index dd57e5d..83178cb 100644 --- a/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java +++ b/src/main/java/com/gxwebsoft/shop/param/ShopOrderParam.java @@ -152,11 +152,11 @@ public class ShopOrderParam extends BaseParam { @QueryField(type = QueryType.EQ) private Integer payUserId; - @Schema(description = "0余额支付, 1微信支付,102微信Native,2会员卡支付,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡,18代付") + @Schema(description = "支付方式:0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付") @QueryField(type = QueryType.EQ) private Integer payType; - @Schema(description = "代付支付方式,0余额支付, 1微信支付,102微信Native,2会员卡支付,3支付宝,4现金,5POS机,6VIP月卡,7VIP年卡,8VIP次卡,9IC月卡,10IC年卡,11IC次卡,12免费,13VIP充值卡,14IC充值卡,15积分支付,16VIP季卡,17IC季卡,18代付") + @Schema(description = "代付支付方式:0余额支付,1微信支付,2支付宝支付,3银联支付,4现金支付,5POS机支付,6免费,7积分支付") @QueryField(type = QueryType.EQ) private Integer friendPayType; diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java index f5ad890..152e64c 100644 --- a/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java @@ -177,10 +177,20 @@ public class ShopOrderServiceImpl extends ServiceImpl 余额 + assertEquals(Integer.valueOf(1), PaymentTypeCompatibilityUtil.convertToCore(102)); // 微信Native -> 微信 + assertEquals(Integer.valueOf(2), PaymentTypeCompatibilityUtil.convertToCore(3)); // 支付宝编号调整 + assertEquals(Integer.valueOf(6), PaymentTypeCompatibilityUtil.convertToCore(12)); // 免费编号调整 + assertEquals(Integer.valueOf(7), PaymentTypeCompatibilityUtil.convertToCore(15)); // 积分编号调整 + assertEquals(Integer.valueOf(3), PaymentTypeCompatibilityUtil.convertToCore(19)); // 银联编号调整 + + // 测试核心支付方式不变 + assertEquals(Integer.valueOf(0), PaymentTypeCompatibilityUtil.convertToCore(0)); // 余额支付 + assertEquals(Integer.valueOf(1), PaymentTypeCompatibilityUtil.convertToCore(1)); // 微信支付 + assertEquals(Integer.valueOf(4), PaymentTypeCompatibilityUtil.convertToCore(4)); // 现金支付 + assertEquals(Integer.valueOf(5), PaymentTypeCompatibilityUtil.convertToCore(5)); // POS机支付 + + // 测试废弃检查 + assertTrue(PaymentTypeCompatibilityUtil.isDeprecated(102)); // 微信Native + assertTrue(PaymentTypeCompatibilityUtil.isDeprecated(12)); // 免费(旧) + assertTrue(PaymentTypeCompatibilityUtil.isDeprecated(15)); // 积分(旧) + assertFalse(PaymentTypeCompatibilityUtil.isDeprecated(0)); // 余额支付 + assertFalse(PaymentTypeCompatibilityUtil.isDeprecated(1)); // 微信支付 + + // 测试核心支付方式检查 + assertTrue(PaymentTypeCompatibilityUtil.isCorePaymentType(0)); // 余额支付 + assertTrue(PaymentTypeCompatibilityUtil.isCorePaymentType(1)); // 微信支付 + assertTrue(PaymentTypeCompatibilityUtil.isCorePaymentType(2)); // 支付宝支付 + assertTrue(PaymentTypeCompatibilityUtil.isCorePaymentType(7)); // 积分支付 + assertFalse(PaymentTypeCompatibilityUtil.isCorePaymentType(102)); // 微信Native + assertFalse(PaymentTypeCompatibilityUtil.isCorePaymentType(12)); // 免费(旧) + } + + @Test + @DisplayName("测试迁移消息") + void testMigrationMessages() { + // 测试废弃支付方式的迁移消息 + String message = PaymentTypeCompatibilityUtil.getMigrationMessage(102); + assertNotNull(message); + assertTrue(message.contains("微信Native")); + assertTrue(message.contains("微信支付")); + + // 测试核心支付方式无迁移消息 + assertNull(PaymentTypeCompatibilityUtil.getMigrationMessage(0)); + assertNull(PaymentTypeCompatibilityUtil.getMigrationMessage(1)); + } + + @Test + @DisplayName("测试迁移报告生成") + void testMigrationReport() { + String report = PaymentTypeCompatibilityUtil.generateMigrationReport(); + assertNotNull(report); + assertTrue(report.contains("核心支付方式")); + assertTrue(report.contains("废弃支付方式映射")); + assertTrue(report.contains("余额支付")); + assertTrue(report.contains("微信支付")); + + System.out.println("=== 支付方式迁移报告 ==="); + System.out.println(report); + } +}