Browse Source

修改计算利润的方式

gaohp 10 months ago
parent
commit
ec04e1bd4d

+ 16 - 0
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/mq/message/order/DistriOrderMessage.java

@@ -5,6 +5,8 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.Objects;
+
 @Data
 @Builder
 @NoArgsConstructor
@@ -67,4 +69,18 @@ public class DistriOrderMessage {
      */
     private Long orderId;
 
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        DistriOrderMessage item = (DistriOrderMessage) o;
+        return orderId.equals(item.orderId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(orderId);
+    }
+
 }

+ 4 - 5
feifan-module-distri/feifan-module-distri-biz/src/main/java/cn/newfeifan/mall/module/distri/service/ordercalc/OrderCalcServiceImpl.java

@@ -198,22 +198,21 @@ public class OrderCalcServiceImpl implements OrderCalcService {
 
             // 计算
             // 计算利润: (价格 - 成本价格) * 产品数量
-            BigDecimal profit = new BigDecimal("0");
+            final BigDecimal[] profit = {new BigDecimal("0")};
             k.getOrderItemMessages().forEach(j -> {
-                // 计算该订单的利润
                 BigDecimal onePrice = new BigDecimal(j.getPrice());
                 BigDecimal oneCostPrice = new BigDecimal(j.getCostPrice());
                 BigDecimal productCount = new BigDecimal(j.getCount());
                 BigDecimal oneGrossProfit = onePrice.subtract(oneCostPrice).multiply(productCount);
-                profit.add(oneGrossProfit);
+                profit[0] = profit[0].add(oneGrossProfit);  // 注意这里的改动
             });
 
 
             // 计算毛利: 利润 * 0.38
-            BigDecimal grossProfit = profit.multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
+            BigDecimal grossProfit = profit[0].multiply(new BigDecimal(orderPercentageDO.getGrossProfitPerc())).setScale(4, RoundingMode.DOWN);
 
             // 计算平台收益
-            BigDecimal grossProfitAfterBonus = profit.multiply(oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitPerc()))).setScale(4, RoundingMode.DOWN);
+            BigDecimal grossProfitAfterBonus = profit[0].multiply(oneHundred.subtract(new BigDecimal(orderPercentageDO.getGrossProfitPerc()))).setScale(4, RoundingMode.DOWN);
 
             if (otherOneHundred.compareTo(new BigDecimal(BigInteger.ZERO)) > 0) {
                 grossProfitAfterBonus = grossProfitAfterBonus.add(grossProfit.multiply(otherOneHundred).setScale(4, RoundingMode.DOWN));

+ 6 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java

@@ -259,16 +259,21 @@ public class TradeOrderController {
                         .productCount(k.getProductCount())
                         .costPrice(k.getCostPrice())
                         .orderId(k.getOrderId())
+                        .count(k.getCount())
                         .totalPrice(k.getTotalPrice()).build())
                 .collect(Collectors.groupingBy(OrderItemMessage::getOrderId));
 
-        List<OrderCalcMessage> orderCalcMessages = appTradeOrderDetailRespVos.stream().map(k -> {
+
+
+
+        List<OrderCalcMessage> orderCalcMessages = appTradeOrderDetailRespVos.stream().distinct().map(k -> {
             OrderCalcMessage orderCalcMessage = OrderCalcMessage.builder()
                     .orderId(k.getOrderId())
                     .name(k.getName())
                     .nickName(k.getNickName())
                     .no(k.getNo())
                     .merchantId(k.getMerchantId())
+                    .productCount(k.getProductCount())
                     .shopId(k.getShopId())
                     .userId(k.getUserId()).build();
             List<OrderItemMessage> orderItemMessages = orderItemMessageGroupBy.get(k.getOrderId());

+ 3 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/job/order/TradeOrderAutoCalcJob.java

@@ -39,16 +39,18 @@ public class TradeOrderAutoCalcJob implements JobHandler {
                         .productCount(k.getProductCount())
                         .costPrice(k.getCostPrice())
                         .orderId(k.getOrderId())
+                        .count(k.getCount())
                         .totalPrice(k.getTotalPrice()).build())
                 .collect(Collectors.groupingBy(OrderItemMessage::getOrderId));
 
-        List<OrderCalcMessage> orderCalcMessages = appTradeOrderDetailRespVos.stream().map(k -> {
+        List<OrderCalcMessage> orderCalcMessages = appTradeOrderDetailRespVos.stream().distinct().map(k -> {
             OrderCalcMessage orderCalcMessage = OrderCalcMessage.builder()
                     .orderId(k.getOrderId())
                     .name(k.getName())
                     .nickName(k.getNickName())
                     .no(k.getNo())
                     .merchantId(k.getMerchantId())
+                    .productCount(k.getProductCount())
                     .shopId(k.getShopId())
                     .userId(k.getUserId()).build();
             List<OrderItemMessage> orderItemMessages = orderItemMessageGroupBy.get(k.getOrderId());

+ 2 - 1
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/order/BrokerageUserMapper.xml

@@ -59,7 +59,8 @@
         ps.shop_id as shopId,
         ps.shop_id as shopId,
         mu.`name` as name,
-        mu.nickname as nickname
+        mu.nickname as nickname,
+        toi.count as `count`
         from trade_order tor
         LEFT JOIN member_user mu
         ON tor.user_id = mu.id