BUGFIX: 优惠券的佣金计算,统计时间边界问题优化
This commit is contained in:
@@ -33,6 +33,7 @@ import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -344,7 +345,7 @@ public class AffiliateServiceImpl extends ServiceImpl<AffiliateMapper, Affiliate
|
||||
return baseMapper.selectOne(queryWrapper);
|
||||
}
|
||||
|
||||
public void calcCouponsCommission() {
|
||||
/*public void calcCouponsCommission() {
|
||||
String lastTime = redisUtil.getFromString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME);
|
||||
log.info("优惠券佣金计算,上次执行时间:{}", lastTime);
|
||||
String currentTime = LocalDateTime.now().toString();
|
||||
@@ -380,6 +381,48 @@ public class AffiliateServiceImpl extends ServiceImpl<AffiliateMapper, Affiliate
|
||||
|
||||
// 4. 更新最后执行时间
|
||||
redisUtil.addToString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME, currentTime);
|
||||
}*/
|
||||
|
||||
public void calcCouponsCommission() {
|
||||
// 1. 获取并格式化时间
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
String lastTime = redisUtil.getFromString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME);
|
||||
log.info("优惠券佣金计算,上次执行时间:{}", lastTime);
|
||||
|
||||
// 2. 查询新增订单(使用>=和<)
|
||||
QueryWrapper<PaymentInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("trade_state", "paid")
|
||||
.isNotNull("promotion_code");
|
||||
|
||||
if (!StringUtils.isNullOrEmpty(lastTime)) {
|
||||
queryWrapper.ge("create_time", lastTime); // 关键修复:>=代替>
|
||||
}
|
||||
queryWrapper.lt("create_time", LocalDateTime.now().format(formatter));
|
||||
|
||||
List<PaymentInfo> paymentInfos = paymentInfoService.list(queryWrapper);
|
||||
log.info("扫描时间范围: {} - {}, 新增订单数: {}",
|
||||
lastTime, LocalDateTime.now().format(formatter), paymentInfos.size());
|
||||
|
||||
// 3. 按推广码汇总支付金额
|
||||
Map<String, BigDecimal> codeAmount = paymentInfos.stream()
|
||||
.collect(Collectors.toMap(
|
||||
PaymentInfo::getPromotionCode,
|
||||
payment -> new BigDecimal(payment.getPayerTotal()),
|
||||
BigDecimal::add
|
||||
));
|
||||
|
||||
// 4. 更新佣金数据
|
||||
codeAmount.forEach((promotionCode, amount) -> {
|
||||
ProductCoupons coupon = stripeService.getProductCoupon(promotionCode, null);
|
||||
if (coupon != null) {
|
||||
updateCouponCommission(coupon, amount);
|
||||
productCouponsMapper.updateById(coupon);
|
||||
}
|
||||
});
|
||||
|
||||
// 5. 结束时更新Redis时间
|
||||
String newLastTime = LocalDateTime.now().format(formatter);
|
||||
redisUtil.addToString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME, newLastTime);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user