mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-08-20 13:11:52 +08:00
【代码优化】商城:价格计算相关逻辑
This commit is contained in:
@@ -18,15 +18,8 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static cn.hutool.core.collection.CollUtil.intersectionDistinct;
|
||||
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.LocalDateTimeUtils.addTime;
|
||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
|
||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
|
||||
@@ -34,8 +27,6 @@ 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.randomPojo;
|
||||
import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.REWARD_ACTIVITY_NOT_EXISTS;
|
||||
import static com.google.common.primitives.Longs.asList;
|
||||
import static java.util.Collections.singletonList;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
@@ -176,90 +167,91 @@ public class RewardActivityServiceImplTest extends BaseMockitoUnitTest {
|
||||
assertPojoEquals(dbRewardActivity, pageResult.getList().get(0), "rules");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRewardActivities_all() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// mock 数据
|
||||
RewardActivityDO allActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
.setProductScope(PromotionProductScopeEnum.ALL.getScope()).setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
rewardActivityMapper.insert(allActivity);
|
||||
RewardActivityDO productActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
.setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(asList(1L, 2L))
|
||||
.setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
rewardActivityMapper.insert(productActivity);
|
||||
// 准备参数
|
||||
Set<Long> spuIds = asSet(1L, 2L);
|
||||
|
||||
// 调用
|
||||
List<RewardActivityDO> activityList = rewardActivityServiceImpl.getRewardActivityListByStatusAndDateTimeLt(
|
||||
CommonStatusEnum.ENABLE.getStatus(), now);
|
||||
List<RewardActivityDO> matchRewardActivityList = filterMatchActivity(spuIds, activityList);
|
||||
// 断言
|
||||
assertEquals(matchRewardActivityList.size(), 1);
|
||||
matchRewardActivityList.forEach((activity) -> {
|
||||
if (activity.getId().equals(productActivity.getId())) {
|
||||
assertPojoEquals(activity, productActivity);
|
||||
assertEquals(activity.getProductScopeValues(), asList(1L, 2L));
|
||||
} else {
|
||||
fail();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRewardActivities_product() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// mock 数据
|
||||
RewardActivityDO productActivity01 = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
.setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(asList(1L, 2L))
|
||||
.setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
rewardActivityMapper.insert(productActivity01);
|
||||
RewardActivityDO productActivity02 = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
.setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(singletonList(3L))
|
||||
.setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
rewardActivityMapper.insert(productActivity02);
|
||||
// 准备参数
|
||||
Set<Long> spuIds = asSet(1L, 2L, 3L);
|
||||
|
||||
List<RewardActivityDO> activityList = rewardActivityServiceImpl.getRewardActivityListByStatusAndDateTimeLt(
|
||||
CommonStatusEnum.ENABLE.getStatus(), now);
|
||||
List<RewardActivityDO> matchRewardActivityList = filterMatchActivity(spuIds, activityList);
|
||||
// 断言
|
||||
assertEquals(matchRewardActivityList.size(), 2);
|
||||
matchRewardActivityList.forEach((activity) -> {
|
||||
if (activity.getId().equals(productActivity01.getId())) {
|
||||
assertPojoEquals(activity, productActivity01);
|
||||
assertEquals(activity.getProductScopeValues(), asList(1L, 2L));
|
||||
} else if (activity.getId().equals(productActivity02.getId())) {
|
||||
assertPojoEquals(activity, productActivity02);
|
||||
assertEquals(activity.getProductScopeValues(), singletonList(3L));
|
||||
} else {
|
||||
fail();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得满减送的订单项(商品)列表
|
||||
*
|
||||
* @param spuIds 商品编号
|
||||
* @param activityList 活动列表
|
||||
* @return 订单项(商品)列表
|
||||
*/
|
||||
private List<RewardActivityDO> filterMatchActivity(Collection<Long> spuIds, List<RewardActivityDO> activityList) {
|
||||
List<RewardActivityDO> resultActivityList = new ArrayList<>();
|
||||
for (RewardActivityDO activity : activityList) {
|
||||
// 情况一:全部商品都可以参与
|
||||
if (PromotionProductScopeEnum.isAll(activity.getProductScope())) {
|
||||
resultActivityList.add(activity);
|
||||
}
|
||||
// 情况二:指定商品参与
|
||||
if (PromotionProductScopeEnum.isSpu(activity.getProductScope()) &&
|
||||
!intersectionDistinct(activity.getProductScopeValues(), spuIds).isEmpty()) {
|
||||
resultActivityList.add(activity);
|
||||
}
|
||||
}
|
||||
return resultActivityList;
|
||||
}
|
||||
// TODO 芋艿:后续完善单测
|
||||
// @Test
|
||||
// public void testGetRewardActivities_all() {
|
||||
// LocalDateTime now = LocalDateTime.now();
|
||||
// // mock 数据
|
||||
// RewardActivityDO allActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
// .setProductScope(PromotionProductScopeEnum.ALL.getScope()).setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
// rewardActivityMapper.insert(allActivity);
|
||||
// RewardActivityDO productActivity = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
// .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(asList(1L, 2L))
|
||||
// .setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
// rewardActivityMapper.insert(productActivity);
|
||||
// // 准备参数
|
||||
// Set<Long> spuIds = asSet(1L, 2L);
|
||||
//
|
||||
// // 调用
|
||||
// List<RewardActivityDO> activityList = rewardActivityServiceImpl.getRewardActivityListByStatusAndDateTimeLt(
|
||||
// CommonStatusEnum.ENABLE.getStatus(), now);
|
||||
// List<RewardActivityDO> matchRewardActivityList = filterMatchActivity(spuIds, activityList);
|
||||
// // 断言
|
||||
// assertEquals(matchRewardActivityList.size(), 1);
|
||||
// matchRewardActivityList.forEach((activity) -> {
|
||||
// if (activity.getId().equals(productActivity.getId())) {
|
||||
// assertPojoEquals(activity, productActivity);
|
||||
// assertEquals(activity.getProductScopeValues(), asList(1L, 2L));
|
||||
// } else {
|
||||
// fail();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void testGetRewardActivities_product() {
|
||||
// LocalDateTime now = LocalDateTime.now();
|
||||
// // mock 数据
|
||||
// RewardActivityDO productActivity01 = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
// .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(asList(1L, 2L))
|
||||
// .setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
// rewardActivityMapper.insert(productActivity01);
|
||||
// RewardActivityDO productActivity02 = randomPojo(RewardActivityDO.class, o -> o.setStatus(CommonStatusEnum.ENABLE.getStatus())
|
||||
// .setProductScope(PromotionProductScopeEnum.SPU.getScope()).setProductScopeValues(singletonList(3L))
|
||||
// .setStartTime(now.minusDays(1)).setEndTime(now.plusDays(1)));
|
||||
// rewardActivityMapper.insert(productActivity02);
|
||||
// // 准备参数
|
||||
// Set<Long> spuIds = asSet(1L, 2L, 3L);
|
||||
//
|
||||
// List<RewardActivityDO> activityList = rewardActivityServiceImpl.getRewardActivityListByStatusAndDateTimeLt(
|
||||
// CommonStatusEnum.ENABLE.getStatus(), now);
|
||||
// List<RewardActivityDO> matchRewardActivityList = filterMatchActivity(spuIds, activityList);
|
||||
// // 断言
|
||||
// assertEquals(matchRewardActivityList.size(), 2);
|
||||
// matchRewardActivityList.forEach((activity) -> {
|
||||
// if (activity.getId().equals(productActivity01.getId())) {
|
||||
// assertPojoEquals(activity, productActivity01);
|
||||
// assertEquals(activity.getProductScopeValues(), asList(1L, 2L));
|
||||
// } else if (activity.getId().equals(productActivity02.getId())) {
|
||||
// assertPojoEquals(activity, productActivity02);
|
||||
// assertEquals(activity.getProductScopeValues(), singletonList(3L));
|
||||
// } else {
|
||||
// fail();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 获得满减送的订单项(商品)列表
|
||||
// *
|
||||
// * @param spuIds 商品编号
|
||||
// * @param activityList 活动列表
|
||||
// * @return 订单项(商品)列表
|
||||
// */
|
||||
// private List<RewardActivityDO> filterMatchActivity(Collection<Long> spuIds, List<RewardActivityDO> activityList) {
|
||||
// List<RewardActivityDO> resultActivityList = new ArrayList<>();
|
||||
// for (RewardActivityDO activity : activityList) {
|
||||
// // 情况一:全部商品都可以参与
|
||||
// if (PromotionProductScopeEnum.isAll(activity.getProductScope())) {
|
||||
// resultActivityList.add(activity);
|
||||
// }
|
||||
// // 情况二:指定商品参与
|
||||
// if (PromotionProductScopeEnum.isSpu(activity.getProductScope()) &&
|
||||
// !intersectionDistinct(activity.getProductScopeValues(), spuIds).isEmpty()) {
|
||||
// resultActivityList.add(activity);
|
||||
// }
|
||||
// }
|
||||
// return resultActivityList;
|
||||
// }
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user