200 lines
7.1 KiB
Markdown
200 lines
7.1 KiB
Markdown
# 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
|
||
**合并状态:** 基础架构完成,待复制业务逻辑文件
|