You've already forked FrameTour-BE
推客
This commit is contained in:
120
src/main/java/com/ycwl/basic/biz/BrokerBiz.java
Normal file
120
src/main/java/com/ycwl/basic/biz/BrokerBiz.java
Normal file
@ -0,0 +1,120 @@
|
||||
package com.ycwl.basic.biz;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.ycwl.basic.mapper.BrokerMapper;
|
||||
import com.ycwl.basic.mapper.BrokerRecordMapper;
|
||||
import com.ycwl.basic.mapper.StatisticsMapper;
|
||||
import com.ycwl.basic.model.pc.broker.entity.BrokerRecord;
|
||||
import com.ycwl.basic.model.pc.broker.resp.BrokerRespVO;
|
||||
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
|
||||
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
|
||||
import com.ycwl.basic.repository.OrderRepository;
|
||||
import com.ycwl.basic.repository.ScenicRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class BrokerBiz {
|
||||
@Autowired
|
||||
private BrokerMapper brokerMapper;
|
||||
@Autowired
|
||||
private BrokerRecordMapper brokerRecordMapper;
|
||||
@Autowired
|
||||
private OrderRepository orderRepository;
|
||||
@Autowired
|
||||
private ScenicRepository scenicRepository;
|
||||
@Autowired
|
||||
private StatisticsMapper statisticsMapper;
|
||||
|
||||
public void processOrder(Long orderId) {
|
||||
OrderEntity order = orderRepository.getOrder(orderId);
|
||||
if (order == null) {
|
||||
return;
|
||||
}
|
||||
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(order.getScenicId());
|
||||
if (scenicConfig == null) {
|
||||
return;
|
||||
}
|
||||
int expireDay = 3;
|
||||
if (scenicConfig.getSampleStoreDay() != null) {
|
||||
expireDay = scenicConfig.getSampleStoreDay();
|
||||
}
|
||||
List<Long> brokerIdList = statisticsMapper.getBrokerIdListForUser(order.getMemberId(), DateUtil.offsetDay(DateUtil.beginOfDay(order.getCreateAt()), -expireDay), order.getCreateAt());
|
||||
List<BrokerRespVO> brokerInfoList = brokerIdList.stream().map(brokerId -> {
|
||||
BrokerRespVO broker = brokerMapper.getById(brokerId);
|
||||
if (broker == null) {
|
||||
return null;
|
||||
}
|
||||
if (Integer.valueOf(0).equals(broker.getStatus())) {
|
||||
return null;
|
||||
}
|
||||
if (Integer.valueOf(0).equals(broker.getBrokerEnable())) {
|
||||
return null;
|
||||
}
|
||||
return broker;
|
||||
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
if (brokerInfoList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
List<BrokerRecord> brokerRecordList = new ArrayList<>();
|
||||
if (brokerInfoList.size() == 1) {
|
||||
// 直接算佣金
|
||||
String reason = "单人提成:";
|
||||
BrokerRespVO broker = brokerInfoList.get(0);
|
||||
BrokerRecord brokerRecord = new BrokerRecord();
|
||||
brokerRecord.setBrokerId(broker.getId());
|
||||
brokerRecord.setOrderId(orderId);
|
||||
if (broker.getBrokerRate() == null) {
|
||||
reason += "提成比例为空!";
|
||||
brokerRecord.setBrokerRate(BigDecimal.ZERO);
|
||||
}
|
||||
brokerRecord.setOrderPrice(order.getPayPrice());
|
||||
brokerRecord.setBrokerRate(broker.getBrokerRate());
|
||||
BigDecimal brokerRate = brokerRecord.getBrokerRate();
|
||||
BigDecimal brokerPrice = order.getPayPrice().multiply(brokerRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN);
|
||||
brokerRecord.setBrokerPrice(brokerPrice);
|
||||
reason += "金额:" + order.getPayPrice() + "元,提成比例:" + brokerRate + ",提成金额:" + brokerPrice + "元";
|
||||
brokerRecord.setReason(reason);
|
||||
brokerRecordList.add(brokerRecord);
|
||||
} else {
|
||||
BigDecimal totalRate = brokerInfoList.stream().map(BrokerRespVO::getBrokerRate).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
BrokerRespVO broker = brokerInfoList.get(0);
|
||||
BigDecimal firstRate = broker.getBrokerRate();
|
||||
BigDecimal brokerPrice = order.getPayPrice().multiply(firstRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN);
|
||||
brokerInfoList.forEach(item -> {
|
||||
String reason = "多人提成:支付金额:" + order.getPayPrice() + "元,可提成比例:" + firstRate + ",可提成金额:" + brokerPrice + ":";
|
||||
BrokerRecord brokerRecord = new BrokerRecord();
|
||||
brokerRecord.setBrokerId(item.getId());
|
||||
brokerRecord.setOrderId(orderId);
|
||||
if (item.getBrokerRate() == null) {
|
||||
reason += "提成比例为空!";
|
||||
brokerRecord.setBrokerRate(BigDecimal.ZERO);
|
||||
}
|
||||
brokerRecord.setOrderPrice(order.getPayPrice());
|
||||
BigDecimal interBrokerRate = item.getBrokerRate().divide(totalRate, 2, RoundingMode.HALF_DOWN);
|
||||
brokerRecord.setBrokerRate(interBrokerRate);
|
||||
BigDecimal interBrokerPrice = order.getPayPrice().multiply(interBrokerRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_DOWN);
|
||||
brokerRecord.setBrokerPrice(interBrokerPrice);
|
||||
reason += "提成比例:" + item.getBrokerRate() + ",实际提成比例:" + interBrokerRate + ",提成金额:" + interBrokerPrice + "元";
|
||||
brokerRecord.setReason(reason);
|
||||
brokerRecordList.add(brokerRecord);
|
||||
});
|
||||
}
|
||||
revokeOrder(orderId);
|
||||
brokerRecordList.forEach(brokerRecord -> {
|
||||
brokerRecordMapper.add(brokerRecord);
|
||||
});
|
||||
}
|
||||
|
||||
public void revokeOrder(Long orderId) {
|
||||
brokerRecordMapper.deleteByOrderId(orderId);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user