feat(shopping): 优化购物价格调整逻辑并添加差价计算

- 在QuotationPriceUpdateItemPartRequest中新增spread属性,计算差价
- 购物控制器中批量查询购物车项,避免多次查询
- 更新购物车标准价格为新价格
- 计算并累加购物车附加费用中的差价部分
- 创建购物订单调整项时包含详细价格变更数据
This commit is contained in:
曹鹏飞 2026-05-25 15:24:57 +08:00
parent e8c816e44a
commit a80015986f
2 changed files with 35 additions and 11 deletions

View File

@ -1052,19 +1052,34 @@ public class ShoppingController extends ControllerBase {
order.setActualFee(request.getActualFee());
order.setDiscount(order.getTotalFee().subtract(request.getActualFee()));
List<QuotationShoppingOrderAdjustItem> adjustItems = new ArrayList<>();
List<QuotationShoppingCart> carts = shoppingCartService.listByIds(request.getItems()
.stream()
.map(QuotationPriceUpdateItemRequest::getCartId)
.collect(Collectors.toList())
);
request.getItems().forEach(item -> {
if (Objects.nonNull(item.getNewStandardFee())) {
adjustItems.add(
new QuotationShoppingOrderAdjustItem()
.setAdjustId(adjust.getId())
.setOrderId(order.getId())
.setCartId(item.getCartId())
.setConfigItemId(0L)
.setOldFee(item.getOldStandardFee())
.setNewFee(item.getNewStandardFee())
);
}
QuotationShoppingCart cart = carts.stream()
.filter(c -> Objects.equals(c.getId(), item.getCartId()))
.findFirst()
.get();
cart.setStandardFee(item.getNewStandardFee());
adjustItems.add(
new QuotationShoppingOrderAdjustItem()
.setAdjustId(adjust.getId())
.setOrderId(order.getId())
.setCartId(item.getCartId())
.setConfigItemId(0L)
.setOldFee(item.getOldStandardFee())
.setNewFee(item.getNewStandardFee())
);
if (CollectionUtil.isNotEmpty(item.getParts())) {
cart.setOptionalFee(cart.getOptionalFee()
.add(item.getParts()
.stream()
.map(QuotationPriceUpdateItemPartRequest::getSpread)
.reduce(BigDecimal.ZERO, BigDecimal::add)
)
);
item.getParts().forEach(part -> {
adjustItems.add(
new QuotationShoppingOrderAdjustItem()

View File

@ -25,4 +25,13 @@ public class QuotationPriceUpdateItemPartRequest {
*/
@NotNull(message = "标准配置调价后价格不能为空")
private BigDecimal newStandardFee;
/**
* 差价
*/
private BigDecimal spread;
public BigDecimal getSpread() {
return newStandardFee.subtract(oldStandardFee);
}
}