Compare commits

..

2 Commits

Author SHA1 Message Date
bbd41da1d3 fix(shop): 修复商城信息缓存解析逻辑
- 优化缓存数据解析流程,添加空值检查
- 当缓存解析失败时清理无效缓存键
- 改进异常处理机制,避免返回空数据
- 移除调试代码并完善日志记录
2026-02-05 10:46:28 +08:00
e4e10d46cc fix(mapper): 修复用户票券关联查询中的数据放大问题
- 修改 shop_order 表关联条件,从 order_no 改为 order_id + tenant_id 组合
- 添加 tenant_id 筛选避免跨租户数据污染
- 添加 deleted 字段过滤确保只关联未删除订单
- 将 pay_price 字段别名规范化为 camelCase 格式
2026-02-05 10:15:03 +08:00
2 changed files with 13 additions and 8 deletions

View File

@@ -4,11 +4,12 @@
<!-- 关联查询sql -->
<sql id="selectSql">
SELECT a.*, u.nickname, u.avatar, u.phone, m.name AS templateName, o.pay_price
SELECT a.*, u.nickname, u.avatar, u.phone, m.name AS templateName, o.pay_price AS payPrice
FROM glt_user_ticket a
LEFT JOIN gxwebsoft_core.sys_user u ON a.user_id = u.user_id
LEFT JOIN glt_ticket_template m ON a.template_id = m.id
LEFT JOIN shop_order o ON a.order_no = o.order_no
<!-- 使用 order_id + tenant_id 关联,避免 order_no 跨租户/重复导致 a.id 数据被 JOIN 放大 -->
LEFT JOIN shop_order o ON a.order_id = o.order_id AND a.tenant_id = o.tenant_id AND o.deleted = 0
<where>
<if test="param.id != null">
AND a.id = #{param.id}

View File

@@ -45,12 +45,16 @@ public class ShopWebsiteServiceImpl implements ShopWebsiteService {
String cacheKey = SHOP_INFO_KEY_PREFIX + tenantId;
String shopInfo = redisUtil.get(cacheKey);
if (StrUtil.isNotBlank(shopInfo)) {
log.info("从缓存获取商城信息租户ID: {}", tenantId);
// try {
// return JSONUtil.parseObject(shopInfo, ShopVo.class);
// } catch (Exception e) {
// log.warn("商城缓存解析失败,从数据库重新获取: {}", e.getMessage());
// }
try {
ShopVo cacheVo = JSONUtil.parseObject(shopInfo, ShopVo.class);
if (cacheVo != null) {
log.info("从缓存获取商城信息租户ID: {}", tenantId);
return cacheVo;
}
} catch (Exception e) {
log.warn("商城缓存解析失败,清理缓存后重新获取: {}", e.getMessage());
redisUtil.delete(cacheKey);
}
}
// 直接调用 CMS 服务获取站点信息,然后使用商城专用缓存