# 商城信息获取方法重构说明 ## 背景 原来的 `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 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. 测试缓存清除功能是否正常