From be9f0443216de264a214e8c4015f2eb890ffdfd8 Mon Sep 17 00:00:00 2001
From: Cui Zhi Feng <7426394+wuxixiaocui@user.noreply.gitee.com>
Date: 星期二, 03 九月 2024 10:25:06 +0800
Subject: [PATCH] 直接退款金额计算

---
 src/main/java/com/mzl/flower/service/BaseService.java |   51 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/mzl/flower/service/BaseService.java b/src/main/java/com/mzl/flower/service/BaseService.java
index f6cca5b..b796271 100644
--- a/src/main/java/com/mzl/flower/service/BaseService.java
+++ b/src/main/java/com/mzl/flower/service/BaseService.java
@@ -10,6 +10,7 @@
 import com.mzl.flower.dto.response.payment.OrderSalesItemChargeDTO;
 import com.mzl.flower.entity.customer.Customer;
 import com.mzl.flower.entity.flower.*;
+import com.mzl.flower.entity.menber.Member;
 import com.mzl.flower.entity.partner.Partner;
 import com.mzl.flower.entity.payment.FeeService;
 import com.mzl.flower.entity.payment.OrderItemSales;
@@ -17,6 +18,7 @@
 import com.mzl.flower.entity.supplier.Supplier;
 import com.mzl.flower.mapper.customer.CustomerMapper;
 import com.mzl.flower.mapper.flower.FlowerCategoryMapper;
+import com.mzl.flower.mapper.member.MemberMapper;
 import com.mzl.flower.mapper.partner.PartnerMapper;
 import com.mzl.flower.mapper.supplier.SupplierMapper;
 import com.mzl.flower.mapper.system.UserMapper;
@@ -25,6 +27,7 @@
 import org.springframework.data.redis.core.RedisTemplate;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -56,6 +59,13 @@
 
     @Autowired
     private FlowerCategoryMapper flowerCategoryMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    protected Member getMember(Long levelId){
+        return memberMapper.selectById(levelId);
+    }
 
     protected double getServiceFeeRate(List<FeeService> fees, Integer saleCount){
         int sc = saleCount == null ? 0 : saleCount;
@@ -113,10 +123,10 @@
         }
 
         if (platformSalesMap != null) {
-            BigDecimal feePlatform = s.getFeePlatform();
-            BigDecimal feePlatformPack = s.getFeePlatformPack();
-            BigDecimal feePlatformCheck = s.getFeePlatformCheck();
-            BigDecimal feePlatformTransport = s.getFeePlatformTransport();
+            BigDecimal feePlatform = getAmount(s.getFeePlatform());
+            BigDecimal feePlatformPack = getAmount(s.getFeePlatformPack());
+            BigDecimal feePlatformCheck = getAmount(s.getFeePlatformCheck());
+            BigDecimal feePlatformTransport = getAmount(s.getFeePlatformTransport());
 
             BigDecimal b = platformSalesMap.get(orderItemId);
             if (b == null) {
@@ -125,6 +135,10 @@
             b = b.add(feePlatform).add(feePlatformPack).add(feePlatformCheck).add(feePlatformTransport);
             platformSalesMap.put(orderItemId, b);
         }
+    }
+
+    protected BigDecimal getAmount(BigDecimal amount){
+        return amount == null ? new BigDecimal(0) : amount;
     }
 
     protected void prepareSalesAmount(OrderSalesItem s
@@ -459,6 +473,35 @@
         return p;
     }
 
+    /**
+     * 计算会员单价
+     *
+     * @param price
+     * @param member
+     * @return
+     */
+    protected BigDecimal calculateMemberPrice(BigDecimal price, Member member){
+        if(price == null || member == null){
+            return price;
+        }
+        BigDecimal r = price;
+
+        String discountType = member.getDiscountType();
+        if(Constants.DISCOUNT_TYPE.ratio.name().equals(discountType)){
+            BigDecimal discountRatio = getAmount(member.getDiscountRatio());
+            r = price.multiply(discountRatio).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
+        } else if (Constants.DISCOUNT_TYPE.amount.name().equals(discountType)){
+            BigDecimal discountAmount = getAmount(member.getDiscountAmount());
+            r = price.subtract(discountAmount);
+        }
+
+        if(r.doubleValue() < 0){
+            r = new BigDecimal(0);
+        }
+
+        return r;
+    }
+
     protected Customer getCustomerByUserId(String userId){
         Customer p = customerMapper.selectOne(new QueryWrapper<Customer>()
                 .eq("user_id", userId));

--
Gitblit v1.9.3