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