mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-26 17:21:53 +08:00
promotion:RewardActivityServiceImpl 的 getMatchRewardActivities 逻辑
This commit is contained in:
parent
941782fb10
commit
c87bc084e6
@ -29,4 +29,10 @@ public interface RewardActivityMapper extends BaseMapperX<RewardActivityDO> {
|
|||||||
return selectList(RewardActivityDO::getStatus, statuses);
|
return selectList(RewardActivityDO::getStatus, statuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default List<RewardActivityDO> selectListByProductScopeAndStatus(Integer productScope, Integer status) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<RewardActivityDO>()
|
||||||
|
.eq(RewardActivityDO::getProductScope, productScope)
|
||||||
|
.eq(RewardActivityDO::getStatus, status));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,6 @@ public class PriceServiceImpl implements PriceService {
|
|||||||
calculatePriceForOrderLevel(calculateReqDTO.getUserId(), priceCalculate);
|
calculatePriceForOrderLevel(calculateReqDTO.getUserId(), priceCalculate);
|
||||||
// 计算优惠劵级别的价格
|
// 计算优惠劵级别的价格
|
||||||
calculatePriceForCouponLevel(calculateReqDTO.getUserId(), calculateReqDTO.getCouponId(), priceCalculate);
|
calculatePriceForCouponLevel(calculateReqDTO.getUserId(), calculateReqDTO.getCouponId(), priceCalculate);
|
||||||
// 计算【优惠劵】促销 TODO 待实现
|
|
||||||
return priceCalculate;
|
return priceCalculate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.promotion.service.reward;
|
package cn.iocoder.yudao.module.promotion.service.reward;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityCreateReqVO;
|
||||||
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
|
import cn.iocoder.yudao.module.promotion.controller.admin.reward.vo.RewardActivityPageReqVO;
|
||||||
@ -9,16 +10,23 @@ import cn.iocoder.yudao.module.promotion.convert.reward.RewardActivityConvert;
|
|||||||
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.reward.RewardActivityDO;
|
||||||
import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper;
|
import cn.iocoder.yudao.module.promotion.dal.mysql.reward.RewardActivityMapper;
|
||||||
import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum;
|
import cn.iocoder.yudao.module.promotion.enums.common.PromotionActivityStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum;
|
||||||
import cn.iocoder.yudao.module.promotion.util.PromotionUtils;
|
import cn.iocoder.yudao.module.promotion.util.PromotionUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static cn.hutool.core.collection.CollUtil.intersectionDistinct;
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||||
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*;
|
||||||
import static java.util.Arrays.asList;
|
import static java.util.Arrays.asList;
|
||||||
|
import static java.util.Collections.singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 满减送活动 Service 实现类
|
* 满减送活动 Service 实现类
|
||||||
@ -144,8 +152,18 @@ public class RewardActivityServiceImpl implements RewardActivityService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<RewardActivityDO, Set<Long>> getMatchRewardActivities(Set<Long> spuIds) {
|
public Map<RewardActivityDO, Set<Long>> getMatchRewardActivities(Set<Long> spuIds) {
|
||||||
// TODO 芋艿:待实现
|
// 如果有全局活动,则直接选择它
|
||||||
return null;
|
List<RewardActivityDO> allActivities = rewardActivityMapper.selectListByProductScopeAndStatus(
|
||||||
|
PromotionProductScopeEnum.ALL.getScope(), PromotionActivityStatusEnum.RUN.getStatus());
|
||||||
|
if (CollUtil.isNotEmpty(allActivities)) {
|
||||||
|
return MapUtil.builder(allActivities.get(0), spuIds).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询某个活动参加的活动
|
||||||
|
List<RewardActivityDO> productActivityList = getRewardActivityListBySpuIds(spuIds,
|
||||||
|
singleton(PromotionActivityStatusEnum.RUN.getStatus()));
|
||||||
|
return convertMap(productActivityList, activity -> activity,
|
||||||
|
rewardActivityDO -> intersectionDistinct(rewardActivityDO.getProductSpuIds(), spuIds)); // 求交集返回
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,11 @@ import org.springframework.context.annotation.Import;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static cn.hutool.core.util.RandomUtil.randomEle;
|
import static cn.hutool.core.util.RandomUtil.randomEle;
|
||||||
|
import static cn.iocoder.yudao.framework.common.util.collection.SetUtils.asSet;
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.addTime;
|
||||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||||
@ -24,6 +27,8 @@ import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServic
|
|||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId;
|
||||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo;
|
||||||
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.REWARD_ACTIVITY_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.REWARD_ACTIVITY_NOT_EXISTS;
|
||||||
|
import static java.util.Arrays.asList;
|
||||||
|
import static java.util.Collections.singletonList;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -160,4 +165,54 @@ public class RewardActivityServiceImplTest extends BaseDbUnitTest {
|
|||||||
assertPojoEquals(dbRewardActivity, pageResult.getList().get(0), "rules");
|
assertPojoEquals(dbRewardActivity, pageResult.getList().get(0), "rules");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetRewardActivities_all() {
|
||||||
|
// mock 数据
|
||||||
|
RewardActivityDO allActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus())
|
||||||
|
.setProductScope(PromotionProductScopeEnum.ALL.getScope()));
|
||||||
|
rewardActivityMapper.insert(allActivity);
|
||||||
|
RewardActivityDO productActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus())
|
||||||
|
.setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductSpuIds(asList(1L, 2L)));
|
||||||
|
rewardActivityMapper.insert(productActivity);
|
||||||
|
// 准备参数
|
||||||
|
Set<Long> spuIds = asSet(1L, 2L);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
Map<RewardActivityDO, Set<Long>> matchRewardActivities = rewardActivityService.getMatchRewardActivities(spuIds);
|
||||||
|
// 断言
|
||||||
|
assertEquals(matchRewardActivities.size(), 1);
|
||||||
|
Map.Entry<RewardActivityDO, Set<Long>> next = matchRewardActivities.entrySet().iterator().next();
|
||||||
|
assertPojoEquals(next.getKey(), allActivity);
|
||||||
|
assertEquals(next.getValue(), spuIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetRewardActivities_product() {
|
||||||
|
// mock 数据
|
||||||
|
RewardActivityDO productActivity01 = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus())
|
||||||
|
.setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductSpuIds(asList(1L, 2L)));
|
||||||
|
rewardActivityMapper.insert(productActivity01);
|
||||||
|
RewardActivityDO productActivity02 = randomPojo(RewardActivityDO.class, o -> o.setStatus(PromotionActivityStatusEnum.RUN.getStatus())
|
||||||
|
.setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductSpuIds(singletonList(3L)));
|
||||||
|
rewardActivityMapper.insert(productActivity02);
|
||||||
|
// 准备参数
|
||||||
|
Set<Long> spuIds = asSet(1L, 2L, 3L);
|
||||||
|
|
||||||
|
// 调用
|
||||||
|
Map<RewardActivityDO, Set<Long>> matchRewardActivities = rewardActivityService.getMatchRewardActivities(spuIds);
|
||||||
|
// 断言
|
||||||
|
assertEquals(matchRewardActivities.size(), 2);
|
||||||
|
matchRewardActivities.forEach((activity, activitySpuIds) -> {
|
||||||
|
if (activity.getId().equals(productActivity01.getId())) {
|
||||||
|
assertPojoEquals(activity, productActivity01);
|
||||||
|
assertEquals(activitySpuIds, asSet(1L, 2L));
|
||||||
|
} else if (activity.getId().equals(productActivity02.getId())) {
|
||||||
|
assertPojoEquals(activity, productActivity02);
|
||||||
|
assertEquals(activitySpuIds, asSet(3L));
|
||||||
|
} else {
|
||||||
|
fail();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user