Files
gym-manage/gym-manage-api/gym-member/CARD_MERGE_REPORT.md
T

200 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<Entity, Long>`
- 保留所有自定义查询方法
- 更新参数类型为新的实体类
### 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
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
```
## 待完成的工作
### 需要手动复制的文件(约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
**合并状态:** 基础架构完成,待复制业务逻辑文件