BUGFIX: 优惠券的佣金计算,统计时间边界问题优化
This commit is contained in:
@@ -33,6 +33,7 @@ import javax.annotation.Resource;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -344,7 +345,7 @@ public class AffiliateServiceImpl extends ServiceImpl<AffiliateMapper, Affiliate
|
|||||||
return baseMapper.selectOne(queryWrapper);
|
return baseMapper.selectOne(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void calcCouponsCommission() {
|
/*public void calcCouponsCommission() {
|
||||||
String lastTime = redisUtil.getFromString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME);
|
String lastTime = redisUtil.getFromString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME);
|
||||||
log.info("优惠券佣金计算,上次执行时间:{}", lastTime);
|
log.info("优惠券佣金计算,上次执行时间:{}", lastTime);
|
||||||
String currentTime = LocalDateTime.now().toString();
|
String currentTime = LocalDateTime.now().toString();
|
||||||
@@ -380,6 +381,48 @@ public class AffiliateServiceImpl extends ServiceImpl<AffiliateMapper, Affiliate
|
|||||||
|
|
||||||
// 4. 更新最后执行时间
|
// 4. 更新最后执行时间
|
||||||
redisUtil.addToString(RedisUtil.PAYMENT_INFO_LAST_SCAN_TIME, currentTime);
|
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