【性能优化】循环中减少不必要的查询 update r/yudao/module/promotion/service/coupon/CouponServiceImpl.java.

Signed-off-by: 山野羡民 <liyujiang_tk@yeah.net>
This commit is contained in:
山野羡民 2025-02-20 02:39:48 +00:00 committed by Gitee
parent 3c10dcf392
commit 12170402e2
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with 6 additions and 2 deletions

View File

@ -121,6 +121,10 @@ public class CouponServiceImpl implements CouponService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Map<Long, List<Long>> takeCoupon(Long templateId, Set<Long> userIds, CouponTakeTypeEnum takeType) { public Map<Long, List<Long>> takeCoupon(Long templateId, Set<Long> userIds, CouponTakeTypeEnum takeType) {
CouponTemplateDO template = couponTemplateService.getCouponTemplate(templateId); CouponTemplateDO template = couponTemplateService.getCouponTemplate(templateId);
return takeCoupon(template, userIds, takeType);
}
private Map<Long, List<Long>> takeCoupon(CouponTemplateDO template, Set<Long> userIds, CouponTakeTypeEnum takeType) {
// 1. 过滤掉达到领取限制的用户 // 1. 过滤掉达到领取限制的用户
removeTakeLimitUser(userIds, template); removeTakeLimitUser(userIds, template);
// 2. 校验优惠劵是否可以领取 // 2. 校验优惠劵是否可以领取
@ -131,7 +135,7 @@ public class CouponServiceImpl implements CouponService {
couponMapper.insertBatch(couponList); couponMapper.insertBatch(couponList);
// 4. 增加优惠劵模板的领取数量 // 4. 增加优惠劵模板的领取数量
couponTemplateService.updateCouponTemplateTakeCount(templateId, userIds.size()); couponTemplateService.updateCouponTemplateTakeCount(template.getId(), userIds.size());
return convertMultiMap(couponList, CouponDO::getUserId, CouponDO::getId); return convertMultiMap(couponList, CouponDO::getUserId, CouponDO::getId);
} }
@ -208,7 +212,7 @@ public class CouponServiceImpl implements CouponService {
public void takeCouponByRegister(Long userId) { public void takeCouponByRegister(Long userId) {
List<CouponTemplateDO> templates = couponTemplateService.getCouponTemplateListByTakeType(CouponTakeTypeEnum.REGISTER); List<CouponTemplateDO> templates = couponTemplateService.getCouponTemplateListByTakeType(CouponTakeTypeEnum.REGISTER);
for (CouponTemplateDO template : templates) { for (CouponTemplateDO template : templates) {
takeCoupon(template.getId(), CollUtil.newHashSet(userId), CouponTakeTypeEnum.REGISTER); takeCoupon(template, CollUtil.newHashSet(userId), CouponTakeTypeEnum.REGISTER);
} }
} }