Files
mp-java/docs/SHOP_INFO_REFACTOR.md
赵忠林 14ceffe84f docs: 添加商城信息重构和网站信息接口重新设计文档
- 新增《商城信息获取方法重构说明》文档,详细介绍了商城信息获取服务的独立和重构过程
- 新增《getSiteInfo 接口重新设计 - 彻底解决空值异常》文档,详细说明了网站信息接口的重新设计和改进
- 更新了《VO模式解决方案》、《最终修复完成-编译错误解决》和《重构总结-Service层架构》等文档
- 修改了 CmsMainController 的导入信息
2025-08-13 14:20:55 +08:00

132 lines
4.0 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.

# 商城信息获取方法重构说明
## 背景
原来的 `getSiteInfo` 方法被商城和旧站点共用,为了更好地区分和管理,现在将商城相关的服务完全独立到 `shop` 包下,避免 `cms` 包被覆盖的问题。
## 重构内容
### 1. 保留原有 CMS 方法
- **位置**: `com.gxwebsoft.cms.service.CmsWebsiteService`
- **方法名**: `getSiteInfo(Integer tenantId)`
- **用途**: 专门给旧站点使用
- **缓存键**: `site_info:` + tenantId
- **缓存时间**: 1天
- **说明**: 保持原有逻辑不变,确保旧站点功能正常
### 2. 新增商城专用服务
- **位置**: `com.gxwebsoft.shop.service.ShopWebsiteService`
- **方法名**: `getShopInfo(Integer tenantId)`
- **用途**: 专门给商城使用
- **缓存键**: `shop_info:` + tenantId
- **缓存时间**: 12小时商城信息更新频率可能更高
- **说明**: 完全独立的商城服务,不依赖 CMS 服务
### 3. 新增缓存清理方法
- **方法名**: `clearShopInfoCache(Integer tenantId)`
- **用途**: 清除商城信息缓存
- **说明**: 商城专用的缓存清理方法
## 新增的文件
### 1. ShopWebsiteService.java
```java
package com.gxwebsoft.shop.service;
public interface ShopWebsiteService {
/**
* 获取商城基本信息VO格式
*/
ShopVo getShopInfo(Integer tenantId);
/**
* 清除商城信息缓存
*/
void clearShopInfoCache(Integer tenantId);
}
```
### 2. ShopWebsiteServiceImpl.java
```java
package com.gxwebsoft.shop.service.impl;
@Service
public class ShopWebsiteServiceImpl implements ShopWebsiteService {
@Override
public ShopVo getShopInfo(Integer tenantId) {
// 商城专用的获取逻辑
// 使用独立的缓存键: "shop_info:" + tenantId
// 缓存时间: 12小时
// 调用 CmsWebsiteService 获取基础数据
}
@Override
public void clearShopInfoCache(Integer tenantId) {
// 清除商城专用缓存
}
}
```
## 修改的文件
### 1. ShopMainController.java
```java
// 修改导入
import com.gxwebsoft.shop.service.ShopWebsiteService;
// 修改注入
@Resource
private ShopWebsiteService shopWebsiteService;
// 修改方法调用
@GetMapping("/getShopInfo")
public ApiResult<ShopVo> getShopInfo() {
ShopVo shopVo = shopWebsiteService.getShopInfo(tenantId);
return success(shopVo);
}
```
### 2. CmsWebsiteService.java 和 CmsWebsiteServiceImpl.java
- **已还原**: 移除了之前添加的商城相关方法
- **保持原样**: `getSiteInfo` 方法继续给旧站点使用
## 优势
1. **完全独立**: 商城服务完全独立在 `shop` 包下,不会被 `cms` 包覆盖
2. **职责分离**: 商城和旧站点使用完全独立的服务,避免相互影响
3. **缓存独立**: 使用不同的缓存键,可以独立管理缓存策略
4. **灵活配置**: 商城信息缓存时间更短,适应商城信息更新频率
5. **向后兼容**: 旧站点的 `getSiteInfo` 方法保持不变
6. **日志区分**: 可以更好地区分商城和站点的日志信息
7. **避免覆盖**: CMS 相关文件可以安全地还原,不影响商城功能
## 使用方式
### 商城前端调用
```javascript
// 获取商城信息
const response = await api.get('/api/shop/getShopInfo');
```
### 旧站点调用
```javascript
// 继续使用原有的 CMS 服务方法
const response = await cmsApi.getSiteInfo(tenantId);
```
## 注意事项
1. **商城服务独立**: 所有商城相关的调用都使用 `ShopWebsiteService`
2. **CMS 服务保持**: 旧站点继续使用 `CmsWebsiteService.getSiteInfo` 方法
3. **缓存管理独立**:
- 商城: `ShopWebsiteService.clearShopInfoCache(tenantId)`
- 旧站点: `CmsWebsiteService.clearSiteInfoCache(tenantId)`
4. **包结构清晰**: 商城相关代码都在 `com.gxwebsoft.shop` 包下
5. **安全还原**: CMS 相关文件可以安全地从版本控制还原,不影响商城功能
## 测试建议
1. 测试商城信息获取功能是否正常
2. 测试旧站点信息获取功能是否不受影响
3. 测试缓存功能是否正常工作
4. 测试缓存清除功能是否正常