You've already forked FrameTour-BE
feat(payment): 支付与退款后清除景区统计缓存
- 在支付成功、取消、退款回调后增加缓存删除逻辑 - 新增 `invalidateStatisticsCache` 方法用于删除 Redis 缓存 - 定时任务中统计景区数据后也调用缓存清除方法 - 调整景区统计任务时间并扩展统计周期为近7天 - 增强定时任务日志记录和异常处理机制
This commit is contained in:
@@ -30,6 +30,7 @@ import com.ycwl.basic.service.pc.ScenicService;
|
||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
@@ -60,6 +61,8 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
private OrderMapper orderMapper;
|
||||
@Autowired
|
||||
private ScenicService scenicService;
|
||||
@Autowired
|
||||
private RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> createOrder(Long scenicId, WXPayOrderReqVO req) {
|
||||
@@ -100,10 +103,14 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
long orderId = Long.parseLong(callbackResponse.getOrderNo());
|
||||
if (callbackResponse.isPay()) {
|
||||
orderBiz.paidOrder(orderId);
|
||||
// 支付成功后删除统计缓存,确保下次查询获取最新数据
|
||||
invalidateStatisticsCache(scenicId);
|
||||
} else if (callbackResponse.isCancel()) {
|
||||
orderBiz.cancelOrder(orderId);
|
||||
} else if (callbackResponse.isRefund()) {
|
||||
orderBiz.refundOrder(orderId);
|
||||
// 退款后删除统计缓存
|
||||
invalidateStatisticsCache(scenicId);
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
@@ -165,6 +172,10 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
statisticsRecordAddReq.setScenicId(order.getScenicId());
|
||||
statisticsRecordAddReq.setMorphId(orderId);
|
||||
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
|
||||
|
||||
// 退款成功后删除统计缓存,确保下次查询获取最新数据
|
||||
invalidateStatisticsCache(scenicId);
|
||||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error("微信退款回调失败!", e);
|
||||
@@ -180,4 +191,15 @@ public class WxPayServiceImpl implements WxPayService {
|
||||
.setOrderNo(orderId);
|
||||
scenicPayAdapter.cancelOrder(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除景区统计缓存
|
||||
* 在支付或退款回调后调用,确保下次查询时重新计算统计数据
|
||||
* @param scenicId 景区ID
|
||||
*/
|
||||
private void invalidateStatisticsCache(Long scenicId) {
|
||||
String redisKey = "statistics:tmp_cache:" + scenicId;
|
||||
Boolean deleted = redisTemplate.delete(redisKey);
|
||||
log.info("[缓存删除] 景区 {} 的统计缓存删除结果: {}", scenicId, deleted);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user