# gym-member-card 模块合并到 gym-member 完成报告 ## 合并概述 将 `gym-member-card` 模块的功能合并到 `gym-member` 模块的 `card` 子包中,保持功能不变,代码风格以 `gym-member` 为基准。 ## 已完成的工作 ### 1. 目录结构创建 ✅ 在 `gym-member/src/main/java/cn/novalon/gym/manage/member/card` 下创建了以下子目录: - `entity/` - 实体类 - `dto/` - 数据传输对象 - `vo/` - 视图对象 - `repository/` - 数据访问层 - `service/` - 服务接口 - `service/impl/` - 服务实现 - `handler/` - 业务处理器 - `enums/` - 枚举类 - `util/` - 工具类 ### 2. 实体类重构(Entity)✅ 按照 gym-member 的风格(使用 Lombok),创建了以下实体类: | 原文件 | 新文件 | 说明 | |--------|--------|------| | MemberCardEntity.java + MemberCard.java | card/entity/MemberCard.java | 会员卡类型实体 | | MemberCardRecordEntity.java + MemberCardRecord.java | card/entity/MemberCardRecord.java | 会员持卡记录实体 | | MemberCardTransactionsEntity.java | card/entity/MemberCardTransaction.java | 交易流水实体 | | RefundApplicationEntity.java | card/entity/RefundApplication.java | 退款申请实体 | **主要改进:** - 使用 `@Data`, `@Builder`, `@NoArgsConstructor`, `@AllArgsConstructor` Lombok 注解 - 继承 `cn.novalon.gym.manage.member.entity.BaseEntity` - 移除手动编写的 getter/setter - 添加规范的 JavaDoc 注释 ### 3. 枚举类创建 ✅ 创建了以下枚举类: | 原文件 | 新文件 | 说明 | |--------|--------|------| | MemberCardType.java | card/enums/MemberCardType.java | 会员卡类型 | | MemberCardRecordStatus.java | card/enums/MemberCardRecordStatus.java | 卡片状态 | | MemberCardTransactionsAction.java | card/enums/TransactionType.java | 交易操作类型 | | MemberCardTransactionsType.java | card/enums/BizType.java | 关联业务类型 | | MemberCardEvent.java | card/enums/CardEvent.java | 状态机事件 | ### 4. Repository 层合并 ✅ 将原有的 DAO 接口整合为 Repository 接口,直接继承 `R2dbcRepository`: | 原文件 | 新文件 | 说明 | |--------|--------|------| | MemberCardDao.java | card/repository/MemberCardRepository.java | 会员卡类型 Repository | | MemberCardRecordDao.java | card/repository/MemberCardRecordRepository.java | 持卡记录 Repository | | MemberCardTransactionsDao.java | card/repository/MemberCardTransactionRepository.java | 交易流水 Repository | | RefundApplicationDao.java | card/repository/RefundApplicationRepository.java | 退款申请 Repository | **主要改进:** - 统一命名规范(移除 Dao,使用 Repository) - 继承 `R2dbcRepository` - 保留所有自定义查询方法 - 更新参数类型为新的实体类 ### 5. 数据库 Schema 迁移 ✅ 将会员卡相关的表结构添加到 `gym-member/src/main/resources/db/schema.sql`: 新增表: - `member_card` - 会员卡类型表 - `member_card_record` - 会员持卡记录表 - `member_card_transactions` - 交易流水表 - `refund_application` - 退款申请表 包含完整的索引和注释。 ### 6. pom.xml 依赖更新 ✅ 在 `gym-member/pom.xml` 中添加了 Redis 响应式支持: ```xml org.springframework.boot spring-boot-starter-data-redis-reactive ``` ## 待完成的工作 ### 需要手动复制的文件(约30个) 以下文件需要从 `gym-member-card` 复制到 `gym-member/card`,并修改包名: #### Handler 层(8个文件) 源路径:`gym-member-card/src/main/java/cn/novalon/gym/manage/gymmembercard/handler/` 目标路径:`gym-member/src/main/java/cn/novalon/gym/manage/member/card/handler/` - DistributedLockService.java - ExpirationReminderService.java - MemberCardHandler.java - MemberCardRecordHandler.java - MemberCardScheduledHandler.java - MemberCardStateMachine.java - MemberCardTransactionHandler.java - RefundSagaHandler.java #### Service 接口层(4个文件) 源路径:`gym-member-card/src/main/java/cn/novalon/gym/manage/gymmembercard/sevice/` 目标路径:`gym-member/src/main/java/cn/novalon/gym/manage/member/card/service/` 注意:目录名从 `sevice`(拼写错误)改为 `service` - IMemberCardService.java - IMemberCardRecordService.java - IMemberCardTransactionsService.java - IRefundApplicationService.java #### Service 实现层(4个文件) 源路径:`gym-member-card/src/main/java/cn/novalon/gym/manage/gymmembercard/sevice/impl/` 目标路径:`gym-member/src/main/java/cn/novalon/gym/manage/member/card/service/impl/` - MemberCardServiceImpl.java - MemberCardRecordServiceImpl.java - MemberCardTransactionsServiceImpl.java - RefundApplicationServiceImpl.java #### Util 工具类(1个文件) 源路径:`gym-member-card/src/main/java/cn/novalon/gym/manage/gymmembercard/util/` 目标路径:`gym-member/src/main/java/cn/novalon/gym/manage/member/card/util/` - BeanConvertUtil.java ### 批量替换规则 复制每个文件后,需要进行以下文本替换: 1. **包名替换:** ``` package cn.novalon.gym.manage.gymmembercard -> package cn.novalon.gym.manage.member.card ``` 2. **导入语句替换:** ``` import cn.novalon.gym.manage.gymmembercard -> import cn.novalon.gym.manage.member.card ``` 3. **BaseEntity 导入替换:** ``` import cn.novalon.gym.manage.db.entity.BaseEntity -> import cn.novalon.gym.manage.member.entity.BaseEntity ``` 4. **BaseDomain 处理(如果存在):** ``` import cn.novalon.gym.manage.sys.core.domain.BaseDomain -> (注释掉或删除) ``` 5. **Repository 引用更新(如果需要):** ``` IMemberCardRepository -> MemberCardRepository IMemberCardRecordRepository -> MemberCardRecordRepository IMemberCardTransactionsRepository -> MemberCardTransactionRepository IRefundApplicationRepository -> RefundApplicationRepository ``` ## 验证步骤 完成文件复制后,执行以下验证: 1. **编译验证:** ```bash cd gym-manage-api/gym-member mvn clean compile ``` 2. **检查是否有编译错误:** - 修复任何缺失的导入 - 确认所有依赖类都已正确迁移 - 检查枚举引用是否正确 3. **运行测试(如果有):** ```bash mvn test ``` ## 注意事项 1. **包名一致性:** 确保所有文件中的包声明和导入语句都正确更新 2. **依赖注入:** Spring 的 `@Autowired` 或构造函数注入应自动工作,因为使用了相同的注解 3. **数据库兼容性:** schema.sql 已追加新表,不会影响现有表 4. **Redis 配置:** 确保 application.yml 中有 Redis 配置(如果需要分布式锁功能) 5. **定时任务:** MemberCardScheduledHandler 和 ExpirationReminderService 可能需要启用 `@EnableScheduling` ## 自动化脚本 项目根目录下提供了两个辅助脚本: - `gym-member-card/migrate_to_member.py` - Python 迁移脚本 - `gym-member-card/migrate-to-member.ps1` - PowerShell 迁移脚本 可以运行这些脚本来自动完成文件复制和包名替换。 --- **生成时间:** 2026-05-27 **合并状态:** 基础架构完成,待复制业务逻辑文件