|
@@ -1,10 +1,12 @@
|
|
package com.dayou.service.impl;
|
|
package com.dayou.service.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
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.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;
|
|
@@ -12,8 +14,10 @@ import com.dayou.brokerage.constants.BrokerageRule;
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
import com.dayou.brokerage.validator.BrokerageValidator;
|
|
import com.dayou.brokerage.validator.BrokerageValidator;
|
|
import com.dayou.common.BaseEntity;
|
|
import com.dayou.common.BaseEntity;
|
|
|
|
+import com.dayou.dto.ItemBrokerageGeneralDTO;
|
|
import com.dayou.dto.ItemDTO;
|
|
import com.dayou.dto.ItemDTO;
|
|
import com.dayou.dto.ParticipantSettleDTO;
|
|
import com.dayou.dto.ParticipantSettleDTO;
|
|
|
|
+import com.dayou.dto.SimplePostModel;
|
|
import com.dayou.entity.*;
|
|
import com.dayou.entity.*;
|
|
import com.dayou.exception.ErrorCode;
|
|
import com.dayou.exception.ErrorCode;
|
|
import com.dayou.mapper.*;
|
|
import com.dayou.mapper.*;
|
|
@@ -24,6 +28,7 @@ import com.dayou.vo.BrokerageGeneralVO;
|
|
import com.dayou.vo.ItemStageVO;
|
|
import com.dayou.vo.ItemStageVO;
|
|
import com.google.common.collect.Sets;
|
|
import com.google.common.collect.Sets;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.commons.beanutils.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
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;
|
|
@@ -32,6 +37,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.HashSet;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
@@ -39,7 +45,8 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import static com.dayou.common.Constants.MARKET_DEPARTMENT;
|
|
|
|
|
|
+import static com.dayou.brokerage.constants.BrokerageRule.LAND_MARKETER_RULE;
|
|
|
|
+import static com.dayou.common.Constants.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -67,7 +74,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
private IMarketStatService marketStatService;
|
|
private IMarketStatService marketStatService;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
- private IUserService userService;
|
|
|
|
|
|
+ private IUserPostService userPostService;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private ItemMapper itemMapper;
|
|
private ItemMapper itemMapper;
|
|
@@ -120,7 +127,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Transactional
|
|
@Transactional
|
|
@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(LAND_MARKETER_RULE);
|
|
Long userId = bo.getUserId();
|
|
Long userId = bo.getUserId();
|
|
UserTarget userTarget = userTargetService.getUserTarget(userId);
|
|
UserTarget userTarget = userTargetService.getUserTarget(userId);
|
|
BigDecimal currentYearPayment = marketStatService.currentYearPayment(userId);
|
|
BigDecimal currentYearPayment = marketStatService.currentYearPayment(userId);
|
|
@@ -129,8 +136,13 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
bo.setPaymentTarget(paymentTarget);
|
|
bo.setPaymentTarget(paymentTarget);
|
|
//Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(userId).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
|
|
//Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(userId).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
|
|
Set<LeaderRatioBO> leaderRatioBO = teamMemberService.getLeader(bo.getUserId(), MARKET_DEPARTMENT).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
|
|
Set<LeaderRatioBO> leaderRatioBO = teamMemberService.getLeader(bo.getUserId(), MARKET_DEPARTMENT).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
|
|
- //创建下单人(客户经理)提成记录
|
|
|
|
- bo = calculator.predictPersonalAmount(bo);
|
|
|
|
|
|
+ //创建下单人(客户经理或营销主管个人提成部分)提成记录
|
|
|
|
+ if (bo.getBrokerageRule().equals(LAND_MARKETER_RULE.getCode())){
|
|
|
|
+ bo = calculator.predictPersonalAmount(bo);
|
|
|
|
+ }
|
|
|
|
+ if (bo.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode())){
|
|
|
|
+ bo = calculator.supervisorPersonalAmount(bo);
|
|
|
|
+ }
|
|
//创建下单人领导提成记录
|
|
//创建下单人领导提成记录
|
|
Set<ItemBrokerageDetail> brokerageLeaderDetailBOS = calculator.predictTeamShareAmount(bo, leaderRatioBO);
|
|
Set<ItemBrokerageDetail> brokerageLeaderDetailBOS = calculator.predictTeamShareAmount(bo, leaderRatioBO);
|
|
BigDecimal leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
@@ -155,9 +167,19 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Override
|
|
@Override
|
|
public void addMarketerBrokerage(Long id) {
|
|
public void addMarketerBrokerage(Long id) {
|
|
Item item = itemMapper.selectById(id);
|
|
Item item = itemMapper.selectById(id);
|
|
|
|
+ //下单人id
|
|
|
|
+ Long userId = item.getUserId();
|
|
|
|
+ SimplePostModel postModel = userPostService.getMarketPostList(userId);
|
|
|
|
+ String brokerageRule = LAND_MARKETER_RULE.getCode();
|
|
|
|
+ if (postModel.getName().equals(SUPERVISOR)){
|
|
|
|
+ brokerageRule = BrokerageRule.LAND_SUPERVISOR_RULE.getCode();
|
|
|
|
+ }
|
|
|
|
+ if (postModel.getName().equals(MARKET_MANAGER)){
|
|
|
|
+ brokerageRule = BrokerageRule.LAND_MANAGER_RULE.getCode();
|
|
|
|
+ }
|
|
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);
|
|
brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
|
|
brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
|
|
@@ -174,14 +196,14 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Transactional
|
|
@Transactional
|
|
@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 = brokerageGeneralMapper.getByItemId(itemDTO.getId());
|
|
ItemBrokerageDetail marketerDetail = iItemBrokerageDetailService.getOne(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId, general.getId())
|
|
ItemBrokerageDetail marketerDetail = iItemBrokerageDetailService.getOne(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId, general.getId())
|
|
- .eq(BaseEntity::getDeleted, Boolean.FALSE).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode()).eq(ItemBrokerageDetail::getBrokerageRule,BrokerageRule.LAND_MARKETER_RULE.getCode()));
|
|
|
|
|
|
+ .eq(BaseEntity::getDeleted, Boolean.FALSE).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode()));
|
|
if (general == null || marketerDetail == null){
|
|
if (general == null || marketerDetail == null){
|
|
log.info("更新项目信息时发现未创建提成总表和明细表记录,更新提成信息逻辑终止。");
|
|
log.info("更新项目信息时发现未创建提成总表和明细表记录,更新提成信息逻辑终止。");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
|
|
|
|
+ MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(LAND_MARKETER_RULE);
|
|
//更新客户经理的提成记录
|
|
//更新客户经理的提成记录
|
|
UserTarget userTarget = userTargetService.getUserTarget(marketerDetail.getUserId());
|
|
UserTarget userTarget = userTargetService.getUserTarget(marketerDetail.getUserId());
|
|
BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
|
|
BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
|
|
@@ -191,7 +213,14 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
brokerageDetailBO.setId(marketerDetail.getId());
|
|
brokerageDetailBO.setId(marketerDetail.getId());
|
|
brokerageDetailBO.setGeneralId(general.getId());
|
|
brokerageDetailBO.setGeneralId(general.getId());
|
|
brokerageDetailBO.setMarketerStatus(general.getMarketerStatus());
|
|
brokerageDetailBO.setMarketerStatus(general.getMarketerStatus());
|
|
- brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
|
|
|
|
+ brokerageDetailBO.setBrokerageRule(marketerDetail.getBrokerageRule());
|
|
|
|
+ //创建下单人(客户经理或营销主管个人提成部分)提成记录
|
|
|
|
+ if (brokerageDetailBO.getBrokerageRule().equals(LAND_MARKETER_RULE.getCode())){
|
|
|
|
+ brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
|
|
+ }
|
|
|
|
+ if (brokerageDetailBO.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode())){
|
|
|
|
+ brokerageDetailBO = calculator.supervisorPersonalAmount(brokerageDetailBO);
|
|
|
|
+ }
|
|
iItemBrokerageDetailService.update(brokerageDetailBO);
|
|
iItemBrokerageDetailService.update(brokerageDetailBO);
|
|
|
|
|
|
|
|
|
|
@@ -213,7 +242,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Transactional
|
|
@Transactional
|
|
@Override
|
|
@Override
|
|
public void removeMarketerBrokerage(Long itemId) {
|
|
public void removeMarketerBrokerage(Long itemId) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemId));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemId);
|
|
this.removeById(general.getId());
|
|
this.removeById(general.getId());
|
|
iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId,general.getId()));
|
|
iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId,general.getId()));
|
|
}
|
|
}
|
|
@@ -224,7 +253,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
Item item = itemMapper.selectById(itemStageVO.getItemId());
|
|
Item item = itemMapper.selectById(itemStageVO.getItemId());
|
|
if (item.getAmount()!=null){
|
|
if (item.getAmount()!=null){
|
|
NonMarketerMarketerBrokerageCalculator calculator = (NonMarketerMarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_OTHER_RULE);
|
|
NonMarketerMarketerBrokerageCalculator calculator = (NonMarketerMarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_OTHER_RULE);
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStageVO.getItemId()));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemStageVO.getItemId());
|
|
Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
|
|
Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
|
|
Set<ItemBrokerageDetail> participatorBrokerageDetails = participators.stream().filter(s->s.getWeight()!=null).map(x -> {
|
|
Set<ItemBrokerageDetail> participatorBrokerageDetails = participators.stream().filter(s->s.getWeight()!=null).map(x -> {
|
|
BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().build();
|
|
BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().build();
|
|
@@ -270,7 +299,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
List<ItemBrokerageDetail> list = iItemBrokerageDetailService.list(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getBrokerageStageId, itemStageVO.getId()));
|
|
List<ItemBrokerageDetail> list = iItemBrokerageDetailService.list(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getBrokerageStageId, itemStageVO.getId()));
|
|
BigDecimal predictAmounts = list.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal predictAmounts = list.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal actualAmounts = list.stream().map(ItemBrokerageDetail::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal actualAmounts = list.stream().map(ItemBrokerageDetail::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStageVO.getItemId()));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemStageVO.getItemId());
|
|
general.setParticipantPredictBrokerageAmount(general.getParticipantPredictBrokerageAmount().subtract(predictAmounts));
|
|
general.setParticipantPredictBrokerageAmount(general.getParticipantPredictBrokerageAmount().subtract(predictAmounts));
|
|
general.setParticipantActualBrokerageAmount(general.getParticipantActualBrokerageAmount().subtract(actualAmounts));
|
|
general.setParticipantActualBrokerageAmount(general.getParticipantActualBrokerageAmount().subtract(actualAmounts));
|
|
general.setBrokeragePredictAmount(general.getBrokeragePredictAmount().subtract(predictAmounts));
|
|
general.setBrokeragePredictAmount(general.getBrokeragePredictAmount().subtract(predictAmounts));
|
|
@@ -307,7 +336,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Transactional
|
|
@Transactional
|
|
@Override
|
|
@Override
|
|
public void toSettleParticipatorBrokerage(Long itemId) {
|
|
public void toSettleParticipatorBrokerage(Long itemId) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemId).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemId);
|
|
List<ItemStage> stages = itemStageMapper.selectList(new LambdaQueryWrapper<ItemStage>().eq(ItemStage::getItemId, itemId));
|
|
List<ItemStage> stages = itemStageMapper.selectList(new LambdaQueryWrapper<ItemStage>().eq(ItemStage::getItemId, itemId));
|
|
ItemEvaluate settle = itemEvaluateMapper.selectOne(new LambdaQueryWrapper<ItemEvaluate>().eq(ItemEvaluate::getItemId, itemId).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
ItemEvaluate settle = itemEvaluateMapper.selectOne(new LambdaQueryWrapper<ItemEvaluate>().eq(ItemEvaluate::getItemId, itemId).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
if (general!=null && CollectionUtils.isNotEmpty(stages) && settle!=null && settle.getWeight()!=null){
|
|
if (general!=null && CollectionUtils.isNotEmpty(stages) && settle!=null && settle.getWeight()!=null){
|
|
@@ -331,7 +360,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Transactional
|
|
@Transactional
|
|
@Override
|
|
@Override
|
|
public void toSettleMarketerBrokerage(PaymentCollection payment) {
|
|
public void toSettleMarketerBrokerage(PaymentCollection payment) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, payment.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(payment.getItemId());
|
|
if (general!=null){
|
|
if (general!=null){
|
|
Item item = itemMapper.selectById(payment.getItemId());
|
|
Item item = itemMapper.selectById(payment.getItemId());
|
|
List<PaymentCollection> paymentList = paymentCollectionMapper.selectList(new LambdaQueryWrapper<PaymentCollection>()
|
|
List<PaymentCollection> paymentList = paymentCollectionMapper.selectList(new LambdaQueryWrapper<PaymentCollection>()
|
|
@@ -344,6 +373,58 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
Long userId = itemMapper.selectById(payment.getItemId()).getUserId();
|
|
Long userId = itemMapper.selectById(payment.getItemId()).getUserId();
|
|
BigDecimal currentYearPaymentAmount = marketStatService.currentYearPayment(userId);
|
|
BigDecimal currentYearPaymentAmount = marketStatService.currentYearPayment(userId);
|
|
BigDecimal userTarget = new BigDecimal(userTargetService.getUserTarget(userId).getPaymentTarget());
|
|
BigDecimal userTarget = new BigDecimal(userTargetService.getUserTarget(userId).getPaymentTarget());
|
|
|
|
+
|
|
|
|
+ //////////
|
|
|
|
+ //当某个客户经理达成当月回款目标后,需校验团队和部门是否达到当月回款目标。若达到则需重新就算 营销主管和营销经理的项目预计提成金额
|
|
|
|
+ Set<LeaderRatioBO> leader = teamMemberService.getLeader(userId, MARKET_DEPARTMENT);
|
|
|
|
+ MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(LAND_MARKETER_RULE);
|
|
|
|
+ Set<ItemBrokerageGeneralDTO> lastMonthTeamBrokerages = Sets.newHashSet();
|
|
|
|
+ //找到当前回款订单的客户经理的领导,然后获取领导们的上月可提成的项目,由于营销主管和营销经理的项目存在重复,所以这里做了并集处理
|
|
|
|
+ leader.stream().forEach(x->{
|
|
|
|
+ BigDecimal teamPaymentTarget = BigDecimal.valueOf(userTargetService.getTeamTarget(x.getUserId()).getPaymentTarget());
|
|
|
|
+ BigDecimal teamCurrentYearPayment = marketStatService.currentYearTeamPayment(x.getUserId());
|
|
|
|
+ if (brokerageCalculateSupport.checkTeamMonthlyPayment(teamCurrentYearPayment, teamPaymentTarget)){
|
|
|
|
+ //获取团队或部门上月签单的提成记录
|
|
|
|
+ Set<Long> juniorUserIds = teamMemberService.getJuniorUserIds(x.getUserId());
|
|
|
|
+ Set<ItemBrokerageGeneralDTO> xItemBrokerageGeneral = itemMapper.getLastMonthTeamItems(DateUtils.getLastMonth23(LocalDate.now().getYear(),
|
|
|
|
+ LocalDate.now().getMonthValue() - 1),juniorUserIds);
|
|
|
|
+ lastMonthTeamBrokerages.addAll(xItemBrokerageGeneral);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ lastMonthTeamBrokerages.stream().forEach(oGeneral->{
|
|
|
|
+ Set<LeaderRatioBO> xLeader = teamMemberService.getLeader(oGeneral.getUserId(), MARKET_DEPARTMENT);
|
|
|
|
+ Set<LeaderRatioBO> leaderRatioBO = xLeader.stream().filter(y->y.getRatio()!=null).collect(Collectors.toSet());
|
|
|
|
+ BrokerageDetailBO brokerageDetailBO = buildBrokerageDetailBO(oGeneral);
|
|
|
|
+ //本人的其他项目需计算预提金额
|
|
|
|
+ Set<ItemBrokerageDetail> itemBrokerageDetails = Sets.newHashSet();
|
|
|
|
+ String postName = userPostService.getMarketPostList(item.getUserId()).getName();
|
|
|
|
+ if (postName.equals(CUSTOMER_MANAGER) && ( oGeneral.getItemId().equals(payment.getItemId()) || item.getUserId().equals(oGeneral.getUserId()))){
|
|
|
|
+ brokerageDetailBO.setCurrentPayment(currentYearPaymentAmount);
|
|
|
|
+ brokerageDetailBO.setPaymentTarget(userTarget);
|
|
|
|
+ BrokerageDetailBO xBrokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
|
|
+ itemBrokerageDetails.add(xBrokerageDetailBO);
|
|
|
|
+ iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId,oGeneral.getId())
|
|
|
|
+ .eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode())
|
|
|
|
+ .eq(ItemBrokerageDetail::getBrokerageRule, LAND_MARKETER_RULE.getCode()));
|
|
|
|
+ }
|
|
|
|
+ //更新领导的预计提成
|
|
|
|
+ Set<ItemBrokerageDetail> itemBrokerageLeaderDetails = calculator.predictTeamShareAmount(brokerageDetailBO, leaderRatioBO);
|
|
|
|
+ itemBrokerageDetails.addAll(itemBrokerageLeaderDetails);
|
|
|
|
+ iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>()
|
|
|
|
+ .eq(ItemBrokerageDetail::getGeneralId,oGeneral.getId()).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.TEAM_SHARE.getCode()));
|
|
|
|
+ iItemBrokerageDetailService.saveBatch(itemBrokerageDetails);
|
|
|
|
+
|
|
|
|
+ BigDecimal leaderPredictTotalAmount = itemBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ oGeneral.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount().add(leaderPredictTotalAmount));
|
|
|
|
+ oGeneral.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
|
|
|
|
+ oGeneral.setBrokerageRate(brokerageDetailBO.getRate());
|
|
|
|
+ oGeneral.setBrokeragePredictAmount(brokerageDetailBO.getPredictAmount().add(oGeneral.getParticipantPredictBrokerageAmount()).add(leaderPredictTotalAmount));
|
|
|
|
+ ItemBrokerageGeneral original = ItemBrokerageGeneral.builder().build();
|
|
|
|
+ BeanUtil.copyProperties(oGeneral,original);
|
|
|
|
+ this.update(original);
|
|
|
|
+ });
|
|
|
|
+
|
|
if (brokerageCalculateSupport.checkMarketerPredictBrokerage(currentYearPaymentAmount, userTarget)){
|
|
if (brokerageCalculateSupport.checkMarketerPredictBrokerage(currentYearPaymentAmount, userTarget)){
|
|
//则需要将上月签订的合同的预提状态改为 可预提
|
|
//则需要将上月签订的合同的预提状态改为 可预提
|
|
List<ItemBrokerageGeneral> lastMonthItemsBrokerages = itemMapper.getLastMonthItems(DateUtils.getLastMonth23(LocalDate.now().getYear(), LocalDate.now().getMonthValue() - 1),userId,BrokerageState.NOT_PAYMENT.getCode());
|
|
List<ItemBrokerageGeneral> lastMonthItemsBrokerages = itemMapper.getLastMonthItems(DateUtils.getLastMonth23(LocalDate.now().getYear(), LocalDate.now().getMonthValue() - 1),userId,BrokerageState.NOT_PAYMENT.getCode());
|
|
@@ -355,6 +436,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
this.updateBatchById(lastMonthItemsBrokerages);
|
|
this.updateBatchById(lastMonthItemsBrokerages);
|
|
log.info("更新了客户经理预提状态待预提");
|
|
log.info("更新了客户经理预提状态待预提");
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
if (item.getAmount()!=null && item.getAmount().compareTo(payDone)==0){
|
|
if (item.getAmount()!=null && item.getAmount().compareTo(payDone)==0){
|
|
general.setMarketerStatus(BrokerageState.NOT_SETTLE.getCode());
|
|
general.setMarketerStatus(BrokerageState.NOT_SETTLE.getCode());
|
|
@@ -368,6 +450,22 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private BrokerageDetailBO buildBrokerageDetailBO(ItemBrokerageGeneralDTO oGeneral) {
|
|
|
|
+ BrokerageDetailBO bo = BrokerageDetailBO.builder().amount(oGeneral.getAmount()).marketerStatus(BrokerageState.NOT_PAYMENT.getCode()).build();
|
|
|
|
+ bo.setGeneralId(oGeneral.getId());
|
|
|
|
+ bo.setUserId(oGeneral.getUserId());
|
|
|
|
+ bo.setBrokerageRule(LAND_MARKETER_RULE.getCode());
|
|
|
|
+ bo.setMarketerStatus(BrokerageState.NOT_PAYMENT.getCode());
|
|
|
|
+ bo.setRate(oGeneral.getBrokerageRate());
|
|
|
|
+ bo.setAdvanceAmount(BigDecimal.ZERO);
|
|
|
|
+ bo.setPredictAmount(BigDecimal.ZERO);
|
|
|
|
+ bo.setActualAmount(BigDecimal.ZERO);
|
|
|
|
+ bo.setAheadAmount(BigDecimal.ZERO);
|
|
|
|
+ //客户经理预提金额
|
|
|
|
+ bo.setPredictAmount(oGeneral.getAmount().multiply(oGeneral.getBrokerageRate()).divide(HUNDRED));
|
|
|
|
+ return bo;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 获取计算提成的项目 (待预提,待结算)
|
|
* 获取计算提成的项目 (待预提,待结算)
|
|
* @return
|
|
* @return
|
|
@@ -390,7 +488,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void beforeToSettleParticipatorBrokerage(Long itemId) {
|
|
public void beforeToSettleParticipatorBrokerage(Long itemId) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemId).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemId);
|
|
if (general!=null && general.getParticipantStatus().equals(BrokerageState.CLOSED.getCode())){
|
|
if (general!=null && general.getParticipantStatus().equals(BrokerageState.CLOSED.getCode())){
|
|
ErrorCode.throwBusinessException(ErrorCode.BROKERAGE_ITEM_STATE_ERROR1);
|
|
ErrorCode.throwBusinessException(ErrorCode.BROKERAGE_ITEM_STATE_ERROR1);
|
|
}
|
|
}
|
|
@@ -398,7 +496,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void beforeToSettleMarketerBrokerage(PaymentCollection payment) {
|
|
public void beforeToSettleMarketerBrokerage(PaymentCollection payment) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, payment.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(payment.getItemId());
|
|
if (general!=null && general.getMarketerStatus().equals(BrokerageState.CLOSED.getCode())){
|
|
if (general!=null && general.getMarketerStatus().equals(BrokerageState.CLOSED.getCode())){
|
|
ErrorCode.throwBusinessException(ErrorCode.BROKERAGE_ITEM_STATE_ERROR1);
|
|
ErrorCode.throwBusinessException(ErrorCode.BROKERAGE_ITEM_STATE_ERROR1);
|
|
}
|
|
}
|
|
@@ -406,7 +504,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void beforeEditMarketerBrokerage(ItemDTO itemDTO) {
|
|
public void beforeEditMarketerBrokerage(ItemDTO itemDTO) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemDTO.getId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemDTO.getId());
|
|
if (general == null){
|
|
if (general == null){
|
|
addMarketerBrokerage(itemDTO.getId());
|
|
addMarketerBrokerage(itemDTO.getId());
|
|
log.info("更新项目信息时创建了相关的提成记录");
|
|
log.info("更新项目信息时创建了相关的提成记录");
|
|
@@ -419,7 +517,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void beforeAddParticipatorBrokerage(ItemStageVO itemStageVO) {
|
|
public void beforeAddParticipatorBrokerage(ItemStageVO itemStageVO) {
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStageVO.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemStageVO.getItemId());
|
|
if (general == null){
|
|
if (general == null){
|
|
addMarketerBrokerage(itemStageVO.getItemId());
|
|
addMarketerBrokerage(itemStageVO.getItemId());
|
|
addParticipatorBrokerage(itemStageVO,itemStageVO.getId());
|
|
addParticipatorBrokerage(itemStageVO,itemStageVO.getId());
|
|
@@ -434,7 +532,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
@Override
|
|
@Override
|
|
public void beforeRemoveParticipatorBrokerage(Long itemStageId) {
|
|
public void beforeRemoveParticipatorBrokerage(Long itemStageId) {
|
|
ItemStage itemStage = itemStageMapper.selectById(itemStageId);
|
|
ItemStage itemStage = itemStageMapper.selectById(itemStageId);
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStage.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(itemStage.getItemId());
|
|
if (general!=null && general.getParticipantStatus().equals(BrokerageState.CLOSED.getCode())){
|
|
if (general!=null && general.getParticipantStatus().equals(BrokerageState.CLOSED.getCode())){
|
|
ErrorCode.throwBusinessException(ErrorCode.BROKERAGE_ITEM_STATE_ERROR1);
|
|
ErrorCode.throwBusinessException(ErrorCode.BROKERAGE_ITEM_STATE_ERROR1);
|
|
}
|
|
}
|
|
@@ -468,8 +566,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
log.info("更新了客户经理预提状态为回款中");
|
|
log.info("更新了客户经理预提状态为回款中");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, payment.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralMapper.getByItemId(payment.getItemId());
|
|
if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode())){
|
|
if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode())){
|
|
general.setMarketerStatus(BrokerageState.NOT_PAYMENT.getCode());
|
|
general.setMarketerStatus(BrokerageState.NOT_PAYMENT.getCode());
|
|
this.updateById(general);
|
|
this.updateById(general);
|