Browse Source

修改虚拟商品的金额精度

Yangzw 9 months ago
parent
commit
450ff9170d

+ 4 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java

@@ -13,6 +13,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -191,6 +192,9 @@ public class TradeOrderItemDO extends BaseDO {
      */
     private Integer afterSaleStatus;
 
+    @TableField(exist = false)
+    private BigDecimal highPrecisionPrice;
+
     /**
      * 商品属性
      */

+ 23 - 4
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -233,7 +233,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
         //如果是虚拟商品,则用自己的编写的程序返回
         if (Objects.equals(settlementReqVO.getDeliveryType(), VIRTUAL_PRODUCT.getType())) {
-            return getSettlement(address,settlementReqVO.getItems());
+            return getSettlement(address, settlementReqVO.getItems());
         }
 
         // add by Ben 20240314
@@ -452,8 +452,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             shopRespVOMap.put(shopId, respVO2);
             shopCalculateRespBO.setVirtualPayPrice(sku.getHighPrecisionPrice().doubleValue() * orderItems.get(0).getCount());
             shopCalculateRespBO.setVirtualTotalPrice(sku.getHighPrecisionPrice().doubleValue() * orderItems.get(0).getCount());
-            shopCalculateRespBO.setPayPrice((int)sku.getHighPrecisionPrice().doubleValue() * orderItems.get(0).getCount());
-            shopCalculateRespBO.setTotalPrice((int)sku.getHighPrecisionPrice().doubleValue() * orderItems.get(0).getCount());
+            shopCalculateRespBO.setPayPrice((int) sku.getHighPrecisionPrice().doubleValue() * orderItems.get(0).getCount());
+            shopCalculateRespBO.setTotalPrice((int) sku.getHighPrecisionPrice().doubleValue() * orderItems.get(0).getCount());
         }
 
         //把重复的收货地址置为空
@@ -678,6 +678,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             TradeOrderDO order = buildTradeOrder(userId, shopCreateReqVO, calculateRespBO);
             List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO);
 
+            for (TradeOrderItemDO orderItem : orderItems) {
+                ProductSkuDO productSkuDO = productSkuMapper.selectById(orderItem.getSkuId());
+                orderItem.setHighPrecisionPrice(productSkuDO.getHighPrecisionPrice());
+            }
+
             // 2. 订单创建前的逻辑
             //修改sku库存
             tradeProductSkuOrderHandler.beforeOrderCreate(order, orderItems);
@@ -696,7 +701,20 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
                 Long skuId = orderItem.getSkuId();
                 TradePriceCalculateRespBO.OrderItem orderItemTmp = itemPayPointsMap.get(skuId);
                 orderItem.setPayIntegral(orderItemTmp.getPayPoints()); //本商品使用积分
-                Integer payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币
+                Integer payRmb;
+                if (orderItem.getHighPrecisionPrice() == null) {
+                    payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币
+                } else {
+                    double rmb = (orderItem.getHighPrecisionPrice().doubleValue() * orderItem.getCount()) - integral2Money(orderItemTmp.getPayPoints());
+                    if (rmb > 0 && rmb < 1) {
+                        payRmb = 1;
+                    }else{
+                        double multiplied = rmb * 10;
+                        // 对乘以10后的数使用 Math.ceil() 向上取整
+                        double roundedUp = Math.ceil(multiplied);
+                        payRmb = (int)(roundedUp/10.0);
+                    }
+                }
                 orderItem.setPayRmb(payRmb);//本商品实付人民币
                 orderItem.setPayPrice(payRmb);//本商品实付人民币
 
@@ -839,6 +857,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 
     /**
      * 把商品的推广费总额,转换为消费者本人(直推人)、或消费者的推荐人 获得的冻结积分
+     *
      * @param promotionExpenses 商品的推广费总额
      * @param grossProfitPerc   推荐人/消费者本人额度 百分比
      * @return 输入推广费,对应的直推人获得的冻结积分