Sfoglia il codice sorgente

用户自定义延迟上架倍率

wuyi 2 anni fa
parent
commit
874ce4e4ee

+ 18 - 0
src/main/java/com/izouma/awesomeAdmin/dto/DelayShelvingRateDto.java

@@ -0,0 +1,18 @@
+package com.izouma.awesomeAdmin.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class DelayShelvingRateDto {
+
+    private Long time;
+
+    private Long rate;
+
+}

+ 36 - 10
src/main/java/com/izouma/awesomeAdmin/service/DelegationService.java

@@ -1,7 +1,9 @@
 package com.izouma.awesomeAdmin.service;
 package com.izouma.awesomeAdmin.service;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.izouma.awesomeAdmin.config.Constants;
 import com.izouma.awesomeAdmin.config.Constants;
 import com.izouma.awesomeAdmin.domain.*;
 import com.izouma.awesomeAdmin.domain.*;
+import com.izouma.awesomeAdmin.dto.DelayShelvingRateDto;
 import com.izouma.awesomeAdmin.enums.OrderStatus;
 import com.izouma.awesomeAdmin.enums.OrderStatus;
 import com.izouma.awesomeAdmin.enums.ProductStatus;
 import com.izouma.awesomeAdmin.enums.ProductStatus;
 import com.izouma.awesomeAdmin.exception.BusinessException;
 import com.izouma.awesomeAdmin.exception.BusinessException;
@@ -38,15 +40,15 @@ public class DelegationService {
     private final RedisTemplate<String, Object> redisTemplate;
     private final RedisTemplate<String, Object> redisTemplate;
     private final SaleBatchExtensionService     extensionService;
     private final SaleBatchExtensionService     extensionService;
 
 
-    public Delegation payDelegationBalance(Long userId, Long orderId) {
+    public Delegation payDelegationBalance(Long userId, Long orderId, Long delayTime) {
         SecurityUtils.checkBanned();
         SecurityUtils.checkBanned();
-        BigDecimal serviceCharge = checkPayDelegation(userId, orderId);
+        BigDecimal serviceCharge = checkPayDelegation(userId, orderId, delayTime);
         userBalanceService.modify(userId, null, serviceCharge.negate(), Constants.BalanceRemark.PAY,
         userBalanceService.modify(userId, null, serviceCharge.negate(), Constants.BalanceRemark.PAY,
                 null, null, null, null);
                 null, null, null, null);
-        return createDelegation(userId, orderId);
+        return createDelegation(userId, orderId, delayTime);
     }
     }
 
 
-    private BigDecimal checkPayDelegation(Long userId, Long orderId) {
+    private BigDecimal checkPayDelegation(Long userId, Long orderId, Long delayTime) {
         Order sellerOrder = orderRepo.findById(orderId)
         Order sellerOrder = orderRepo.findById(orderId)
                                      .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
                                      .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
         if (!userId.equals(sellerOrder.getUserId())) {
         if (!userId.equals(sellerOrder.getUserId())) {
@@ -63,13 +65,29 @@ public class DelegationService {
         Product product = productRepo.findById(sellerOrder.getProductId())
         Product product = productRepo.findById(sellerOrder.getProductId())
                                      .orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
                                      .orElseThrow(new BusinessException(Translator.toLocale("product.not_found")));
         SalesBatchExtension extension = extensionService.getDetailByBathIdAndPrice(saleBatch.getId(), product.getCurrentPrice());
         SalesBatchExtension extension = extensionService.getDetailByBathIdAndPrice(saleBatch.getId(), product.getCurrentPrice());
+        BigDecimal serviceCharge = extension.getServiceCharge();
+
+        if (!sysConfigService.getBigDecimal("delay_shelving_rate_enable").equals(BigDecimal.ZERO) && delayTime != null) {
+            serviceCharge = serviceCharge.multiply(getDelayShelvingRate(delayTime));
+        }
         //.multiply(saleBatch.getServiceCharge())
         //.multiply(saleBatch.getServiceCharge())
         return sellerOrder.getTotalPrice()
         return sellerOrder.getTotalPrice()
-                          .multiply(extension.getServiceCharge())
+                          .multiply(serviceCharge)
                           .setScale(2, RoundingMode.HALF_UP);
                           .setScale(2, RoundingMode.HALF_UP);
     }
     }
 
 
-    synchronized public Delegation createDelegation(Long userId, Long orderId) {
+    private BigDecimal getDelayShelvingRate(Long delayTime) {
+        List<DelayShelvingRateDto> list = JSONArray.parseArray(sysConfigService.getString("delay_shelving_rate")).toJavaList(DelayShelvingRateDto.class);
+
+        Long rate = list.stream().filter(c -> delayTime <= c.getTime())
+                        .min(Comparator.comparing(DelayShelvingRateDto::getTime))
+                        .map(DelayShelvingRateDto::getRate)
+                        .orElse(1L);
+
+        return new BigDecimal(rate);
+    }
+
+    synchronized public Delegation createDelegation(Long userId, Long orderId, Long delayTime) {
         SecurityUtils.checkBanned();
         SecurityUtils.checkBanned();
         BigDecimal maxPrice = sysConfigService.getBigDecimal(Constants.MAX_PRICE);
         BigDecimal maxPrice = sysConfigService.getBigDecimal(Constants.MAX_PRICE);
         BigDecimal splitPrice = sysConfigService.getBigDecimal(Constants.SPLIT_PRICE);
         BigDecimal splitPrice = sysConfigService.getBigDecimal(Constants.SPLIT_PRICE);
@@ -85,14 +103,22 @@ public class DelegationService {
                                            .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
                                            .orElseThrow(new BusinessException(Translator.toLocale("record.not_found")));
 
 
         SalesBatchExtension extension = extensionService.getDetailByBathIdAndPrice(saleBatch.getId(), product.getCurrentPrice());
         SalesBatchExtension extension = extensionService.getDetailByBathIdAndPrice(saleBatch.getId(), product.getCurrentPrice());
-
-        //BigDecimal riseRate = saleBatch.getRiseRate();
+        BigDecimal extensionServiceCharge = extension.getServiceCharge();
+        BigDecimal commissionRate = extension.getCommissionRate();
         BigDecimal riseRate = extension.getRiseRate();
         BigDecimal riseRate = extension.getRiseRate();
+        //BigDecimal riseRate = saleBatch.getRiseRate();
+
+        if (!sysConfigService.getBigDecimal("delay_shelving_rate_enable").equals(BigDecimal.ZERO) && delayTime != null) {
+            BigDecimal delayShelvingRate = getDelayShelvingRate(delayTime);
+            extensionServiceCharge = extensionServiceCharge.multiply(delayShelvingRate);
+            commissionRate = commissionRate.multiply(delayShelvingRate);
+            riseRate = riseRate.multiply(delayShelvingRate);
+        }
 
 
         BigDecimal finalPrice = sellerOrder.getTotalPrice().multiply(riseRate).add(sellerOrder.getTotalPrice())
         BigDecimal finalPrice = sellerOrder.getTotalPrice().multiply(riseRate).add(sellerOrder.getTotalPrice())
                                            .setScale(2, RoundingMode.HALF_UP);
                                            .setScale(2, RoundingMode.HALF_UP);
         BigDecimal serviceCharge = sellerOrder.getTotalPrice()
         BigDecimal serviceCharge = sellerOrder.getTotalPrice()
-                                              .multiply(extension.getServiceCharge())
+                                              .multiply(extensionServiceCharge)
                                               .setScale(2, RoundingMode.HALF_UP);
                                               .setScale(2, RoundingMode.HALF_UP);
         //.multiply(saleBatch.getServiceCharge())
         //.multiply(saleBatch.getServiceCharge())
         Delegation delegation = delegationRepo.findBySellerOrderId(orderId).orElse(null);
         Delegation delegation = delegationRepo.findBySellerOrderId(orderId).orElse(null);
@@ -174,7 +200,7 @@ public class DelegationService {
         orderRepo.save(sellerOrder);
         orderRepo.save(sellerOrder);
 
 
         //commissionService.doCommission(userId, sellerOrder, saleBatch.getCommissionRate());
         //commissionService.doCommission(userId, sellerOrder, saleBatch.getCommissionRate());
-        commissionService.doCommission(userId, sellerOrder, extension.getCommissionRate());
+        commissionService.doCommission(userId, sellerOrder, commissionRate);
 
 
         sellerOrder.setStatus(OrderStatus.SELLING);
         sellerOrder.setStatus(OrderStatus.SELLING);
         sellerOrder.setDelegateTime(LocalDateTime.now());
         sellerOrder.setDelegateTime(LocalDateTime.now());

+ 1 - 1
src/main/java/com/izouma/awesomeAdmin/service/VipAsyncService.java

@@ -38,7 +38,7 @@ public class VipAsyncService {
         log.info("🚚 increase used limit, userId: {}, left: {}", userId, userVip.getDailyLimit() - userVip.getTodayUsed() - 1);
         log.info("🚚 increase used limit, userId: {}, left: {}", userId, userVip.getDailyLimit() - userVip.getTodayUsed() - 1);
 
 
         log.info("🚚 pay delegation start, userId: {}, productId: {}", userId, product.getId());
         log.info("🚚 pay delegation start, userId: {}, productId: {}", userId, product.getId());
-        delegationService.payDelegationBalance(userId, order.getId());
+        delegationService.payDelegationBalance(userId, order.getId(), null);
         log.info("🚚 pay delegation success, userId: {}, productId: {}", userId, product.getId());
         log.info("🚚 pay delegation success, userId: {}, productId: {}", userId, product.getId());
     }
     }
 }
 }

+ 1 - 1
src/main/java/com/izouma/awesomeAdmin/web/DelegationController.java

@@ -85,7 +85,7 @@ public class DelegationController extends BaseController {
 
 
     @GetMapping("/createDelegation")
     @GetMapping("/createDelegation")
     public void createDelegation(@RequestParam Long userId, @RequestParam Long orderId) {
     public void createDelegation(@RequestParam Long userId, @RequestParam Long orderId) {
-        delegationService.createDelegation(userId, orderId);
+        delegationService.createDelegation(userId, orderId, null);
     }
     }
 
 
     @GetMapping("/getSummary")
     @GetMapping("/getSummary")

+ 2 - 2
src/main/java/com/izouma/awesomeAdmin/web/PayDelegationController.java

@@ -30,7 +30,7 @@ public class PayDelegationController {
 
 
     @RequestMapping(value = "/balance", method = RequestMethod.POST)
     @RequestMapping(value = "/balance", method = RequestMethod.POST)
     @ResponseBody
     @ResponseBody
-    public Delegation payDelegationBalance(@RequestParam Long orderId) {
-        return delegationService.payDelegationBalance(SecurityUtils.getAuthenticatedUser().getId(), orderId);
+    public Delegation payDelegationBalance(@RequestParam Long orderId, Long delayTime) {
+        return delegationService.payDelegationBalance(SecurityUtils.getAuthenticatedUser().getId(), orderId, delayTime);
     }
     }
 }
 }