diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 35e8fa0..4e506b7 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -17,29 +17,29 @@ 2026.03-SNAPSHOT 1.7.2 - 3.5.9 + 3.5.14 - 2.8.14 + 2.8.17 4.5.0 - 1.2.27 + 1.2.28 3.5.19 - 3.5.15 - 1.5.5 + 3.5.16 + 1.5.7 4.5.0 3.0.6 3.52.0 8.1.3.140 - 8.6.0 - 5.1.0 - 3.7.9 + 9.0.1.jre7 + 7.0.0-RC3-og + 3.8.3 2.3.5 2.2.7 - 9.5.0 - 3.5.6 + 9.6.0 + 3.5.8 0.33.0 8.0.2.RELEASE @@ -49,36 +49,36 @@ 7.2.0 1.4.0 - 1.21.2 - 1.18.42 + 1.22.2 + 1.18.46 1.6.3 - 5.8.42 + 5.8.44 6.0.0-M22 1.3.0 2.4.1 1.2.83 - 33.5.0-jre + 33.6.0-jre 2.14.5 - 3.12.0 + 3.13.0 3.20.0 - 2.27.7 - 3.2.3 + 2.28.2 + 3.3.0 2.7.0 3.0.6 - 4.2.9.Final + 4.2.12.Final 1.2.5 - 4.5.22 + 4.5.26 4.12.0 - 3.12.0 - 3.2.1 + 3.14.0 + 3.3.0 - 2.40.15 + 2.44.0 1.16.7 1.4.0 - 2.1.3 - 2.3.0 + 2.3.2 + 2.3.2 4.7.9-20251224.161447 - 4.40.607.ALL + 4.40.771.ALL @@ -665,7 +665,7 @@ org.jeecgframework.jimureport - jimureport-spring-boot3-starter-fastjson2 + jimureport-spring-boot3-starter ${jimureport.version} diff --git a/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeBargainActivityPriceCalculatorTest.java b/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeBargainActivityPriceCalculatorTest.java new file mode 100644 index 0000000..01ebc6f --- /dev/null +++ b/yudao-module-mall/yudao-module-trade/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeBargainActivityPriceCalculatorTest.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.trade.service.price.calculator; + +import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; +import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi; +import cn.iocoder.yudao.module.promotion.api.bargain.dto.BargainValidateJoinRespDTO; +import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import java.util.ArrayList; + +import static java.util.Collections.singletonList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +/** + * {@link TradeBargainActivityPriceCalculator} 的单元测试 + * + * @author 芋道源码 + */ +public class TradeBargainActivityPriceCalculatorTest extends BaseMockitoUnitTest { + + @InjectMocks + private TradeBargainActivityPriceCalculator tradeBargainActivityPriceCalculator; + + @Mock + private BargainRecordApi bargainRecordApi; + + @Test + public void testCalculate_match() { + // 准备参数:砍价订单,单 SKU、数量 1 + TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() + .setUserId(1L).setBargainRecordId(2L) + .setItems(singletonList( + new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(1).setSelected(true) + )); + TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() + .setType(TradeOrderTypeEnum.BARGAIN.getType()) + .setPrice(new TradePriceCalculateRespBO.Price()) + .setPromotions(new ArrayList<>()) + .setItems(singletonList( + new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(1).setSelected(true) + .setPrice(100).setSpuId(1L).setGivePoint(0) + )); + TradePriceCalculatorHelper.recountPayPrice(result.getItems()); + TradePriceCalculatorHelper.recountAllPrice(result); + + // mock 方法:砍价后单价 30 分 + when(bargainRecordApi.validateJoinBargain(eq(1L), eq(2L), eq(10L))).thenReturn( + new BargainValidateJoinRespDTO().setActivityId(1000L).setName("砍价 1000 号").setBargainPrice(30)); + + // 调用:100 - 30 * 1 = 70 优惠 + tradeBargainActivityPriceCalculator.calculate(param, result); + + // 断言:订单价格 + TradePriceCalculateRespBO.Price price = result.getPrice(); + assertEquals(price.getTotalPrice(), 100); + assertEquals(price.getDiscountPrice(), 70); + assertEquals(price.getPayPrice(), 30); + assertEquals(result.getBargainActivityId(), 1000L); + + // 断言:促销明细的 id 来自砍价活动而非秒杀活动 + assertEquals(result.getPromotions().size(), 1); + TradePriceCalculateRespBO.Promotion promotion = result.getPromotions().get(0); + assertEquals(promotion.getId(), 1000L); + assertEquals(promotion.getName(), "砍价 1000 号"); + assertEquals(promotion.getType(), PromotionTypeEnum.BARGAIN_ACTIVITY.getType()); + assertEquals(promotion.getDiscountPrice(), 70); + assertTrue(promotion.getMatch()); + assertEquals(promotion.getDescription(), "砍价活动:省 0.70 元"); + } + + @Test + public void testCalculate_skipNonBargainOrder() { + // 准备参数:普通订单 + TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() + .setItems(singletonList( + new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(1).setSelected(true) + )); + TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() + .setType(TradeOrderTypeEnum.NORMAL.getType()) + .setPrice(new TradePriceCalculateRespBO.Price()) + .setPromotions(new ArrayList<>()) + .setItems(singletonList( + new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(1).setSelected(true) + .setPrice(100).setSpuId(1L) + )); + TradePriceCalculatorHelper.recountPayPrice(result.getItems()); + TradePriceCalculatorHelper.recountAllPrice(result); + + // 调用:非砍价订单,直接跳过,不会调用 API + tradeBargainActivityPriceCalculator.calculate(param, result); + + // 断言:未产生促销 + assertEquals(result.getPromotions().size(), 0); + } + +} diff --git a/yudao-module-report/pom.xml b/yudao-module-report/pom.xml index 8f65121..e5fba72 100644 --- a/yudao-module-report/pom.xml +++ b/yudao-module-report/pom.xml @@ -56,7 +56,7 @@ org.jeecgframework.jimureport - jimureport-spring-boot3-starter-fastjson2 + jimureport-spring-boot3-starter org.jeecgframework.jimureport