|
@@ -1,16 +1,15 @@
|
|
package com.dayou.service.impl;
|
|
package com.dayou.service.impl;
|
|
|
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
import com.dayou.bo.BrokerageDetailBO;
|
|
import com.dayou.bo.BrokerageDetailBO;
|
|
|
|
+import com.dayou.bo.LeaderRatioBO;
|
|
import com.dayou.brokerage.BrokerageCalculateSupport;
|
|
import com.dayou.brokerage.BrokerageCalculateSupport;
|
|
-import com.dayou.brokerage.BrokerageCalculator;
|
|
|
|
import com.dayou.brokerage.MarketerBrokerageCalculator;
|
|
import com.dayou.brokerage.MarketerBrokerageCalculator;
|
|
import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
|
|
import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
|
|
import com.dayou.brokerage.constants.BrokerageMode;
|
|
import com.dayou.brokerage.constants.BrokerageMode;
|
|
import com.dayou.brokerage.constants.BrokerageRule;
|
|
import com.dayou.brokerage.constants.BrokerageRule;
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
-import com.dayou.brokerage.factory.BrokerageCalculateFactory;
|
|
|
|
import com.dayou.common.BaseEntity;
|
|
import com.dayou.common.BaseEntity;
|
|
import com.dayou.dto.ItemDTO;
|
|
import com.dayou.dto.ItemDTO;
|
|
import com.dayou.entity.*;
|
|
import com.dayou.entity.*;
|
|
@@ -20,8 +19,8 @@ import com.dayou.service.*;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.dayou.vo.ItemStageVO;
|
|
import com.dayou.vo.ItemStageVO;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
-import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
@@ -62,6 +61,9 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Autowired
|
|
@Autowired
|
|
private ItemMapper itemMapper;
|
|
private ItemMapper itemMapper;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IUserService userService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
public Page<ItemBrokerageGeneral> selectPage(Page page,ItemBrokerageGeneral itemBrokerageGeneral){
|
|
public Page<ItemBrokerageGeneral> selectPage(Page page,ItemBrokerageGeneral itemBrokerageGeneral){
|
|
@@ -94,32 +96,40 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Override
|
|
@Override
|
|
public void doCreateBrokerageGeneralAndDetail(BrokerageDetailBO bo) {
|
|
public void doCreateBrokerageGeneralAndDetail(BrokerageDetailBO bo) {
|
|
MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
- Long userId = bo.getUserId();
|
|
|
|
|
|
+ Long userId = bo.getUserId();
|
|
UserTarget userTarget = getUserTarget(userId);
|
|
UserTarget userTarget = getUserTarget(userId);
|
|
BigDecimal currentMonthPayment = marketStatService.currentYearPayment(userId);
|
|
BigDecimal currentMonthPayment = marketStatService.currentYearPayment(userId);
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
bo.setCurrentPayment(currentMonthPayment);
|
|
bo.setCurrentPayment(currentMonthPayment);
|
|
bo.setPaymentTarget(paymentTarget);
|
|
bo.setPaymentTarget(paymentTarget);
|
|
bo.setItemBrokerageStatus(BrokerageState.NOT_START.getCode());
|
|
bo.setItemBrokerageStatus(BrokerageState.NOT_START.getCode());
|
|
|
|
+ Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(userId).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
|
|
bo = calculator.predictPersonalAmount(bo);
|
|
bo = calculator.predictPersonalAmount(bo);
|
|
|
|
+ //创建下单人领导提成记录
|
|
|
|
+ Set<ItemBrokerageDetail> brokerageLeaderDetailBOS = calculator.predictTeamShareAmount(bo, leaderRatioBO);
|
|
|
|
+ BigDecimal leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ //构建提成总表对象
|
|
ItemBrokerageGeneral general = ItemBrokerageGeneral.builder()
|
|
ItemBrokerageGeneral general = ItemBrokerageGeneral.builder()
|
|
.itemId(bo.getItemId())
|
|
.itemId(bo.getItemId())
|
|
- .marketerBrokerageAmount(bo.getPredictAmount())
|
|
|
|
|
|
+ .marketerBrokerageAmount(bo.getPredictAmount().add(leaderPredictTotalAmount))
|
|
.marketerAdvanceBrokerageAble(bo.getMarketerAdvanceBrokerageAble())
|
|
.marketerAdvanceBrokerageAble(bo.getMarketerAdvanceBrokerageAble())
|
|
- .brokeragePredictAmount(bo.getPredictAmount())
|
|
|
|
|
|
+ .participantActualBrokerageAmount(BigDecimal.ZERO)
|
|
|
|
+ .participantPredictBrokerageAmount(BigDecimal.ZERO)
|
|
|
|
+ .brokeragePredictAmount(bo.getPredictAmount().add(leaderPredictTotalAmount))
|
|
.brokerageActualAmount(BigDecimal.ZERO)
|
|
.brokerageActualAmount(BigDecimal.ZERO)
|
|
.brokerageRate(bo.getRate()).build();
|
|
.brokerageRate(bo.getRate()).build();
|
|
this.save(general);
|
|
this.save(general);
|
|
- bo.setGeneralId(general.getId());
|
|
|
|
- iItemBrokerageDetailService.save(bo);
|
|
|
|
|
|
+ brokerageLeaderDetailBOS.add(bo);
|
|
|
|
+ brokerageLeaderDetailBOS.stream().forEach(x->{ x.setGeneralId(general.getId());});
|
|
|
|
+ iItemBrokerageDetailService.saveBatch(brokerageLeaderDetailBOS);
|
|
}
|
|
}
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public void addMarketerBrokerage(Long id) {
|
|
public void addMarketerBrokerage(Long id) {
|
|
Item item = itemMapper.selectById(id);
|
|
Item item = itemMapper.selectById(id);
|
|
if (item.getAmount()!=null){
|
|
if (item.getAmount()!=null){
|
|
BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
|
|
BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
|
|
brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
|
|
brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
|
|
- brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
|
|
|
|
brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
|
|
@@ -136,25 +146,38 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Override
|
|
@Override
|
|
public void editMarketerBrokerage(ItemDTO itemDTO) {
|
|
public void editMarketerBrokerage(ItemDTO itemDTO) {
|
|
ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemDTO.getId()).eq(BaseEntity::getDeleted,Boolean.FALSE));
|
|
ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemDTO.getId()).eq(BaseEntity::getDeleted,Boolean.FALSE));
|
|
- if (general == null){
|
|
|
|
|
|
+ ItemBrokerageDetail marketerDetail = iItemBrokerageDetailService.getOne(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId, general.getId()).eq(BaseEntity::getDeleted, Boolean.FALSE).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode()));
|
|
|
|
+ if (general == null || marketerDetail == null){
|
|
addMarketerBrokerage(itemDTO.getId());
|
|
addMarketerBrokerage(itemDTO.getId());
|
|
log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
|
|
log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- ItemBrokerageDetail marketerDetail = iItemBrokerageDetailService.getOne(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId, general.getId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+
|
|
MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
|
|
+ //更新客户经理的提成记录
|
|
UserTarget userTarget = getUserTarget(marketerDetail.getUserId());
|
|
UserTarget userTarget = getUserTarget(marketerDetail.getUserId());
|
|
BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
|
|
BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(itemDTO.getAmount()).cate(itemDTO.getCate()).businessSource(itemDTO.getBusinessSource()).itemId(itemDTO.getId()).paymentTarget(paymentTarget).currentPayment(currentMonthPayment).build();
|
|
BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(itemDTO.getAmount()).cate(itemDTO.getCate()).businessSource(itemDTO.getBusinessSource()).itemId(itemDTO.getId()).paymentTarget(paymentTarget).currentPayment(currentMonthPayment).build();
|
|
brokerageDetailBO.setUserId(marketerDetail.getUserId());
|
|
brokerageDetailBO.setUserId(marketerDetail.getUserId());
|
|
brokerageDetailBO.setId(marketerDetail.getId());
|
|
brokerageDetailBO.setId(marketerDetail.getId());
|
|
|
|
+ brokerageDetailBO.setGeneralId(general.getId());
|
|
brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
iItemBrokerageDetailService.update(brokerageDetailBO);
|
|
iItemBrokerageDetailService.update(brokerageDetailBO);
|
|
- general.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount());
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //更新领导提成记录
|
|
|
|
+ Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(marketerDetail.getUserId()).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
|
|
|
|
+ Set<ItemBrokerageDetail> itemBrokerageDetails = calculator.predictTeamShareAmount(brokerageDetailBO, leaderRatioBO);
|
|
|
|
+ iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId,general.getId()).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.TEAM_SHARE.getCode()));
|
|
|
|
+ iItemBrokerageDetailService.saveBatch(itemBrokerageDetails);
|
|
|
|
+
|
|
|
|
+ //更新总表
|
|
|
|
+ BigDecimal leaderPredictTotalAmount = itemBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ general.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount().add(leaderPredictTotalAmount));
|
|
general.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
|
|
general.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
|
|
general.setBrokerageRate(brokerageDetailBO.getRate());
|
|
general.setBrokerageRate(brokerageDetailBO.getRate());
|
|
- general.setBrokeragePredictAmount(brokerageDetailBO.getPredictAmount().add(general.getParticipantPredictBrokerageAmount()));
|
|
|
|
|
|
+ general.setBrokeragePredictAmount(brokerageDetailBO.getPredictAmount().add(general.getParticipantPredictBrokerageAmount()).add(leaderPredictTotalAmount));
|
|
this.update(general);
|
|
this.update(general);
|
|
}
|
|
}
|
|
|
|
|