|
@@ -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());
|