|
@@ -1,13 +1,17 @@
|
|
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.dayou.brokerage.MarketerBrokerageCalculator;
|
|
import com.dayou.brokerage.MarketerBrokerageCalculator;
|
|
import com.dayou.brokerage.constants.BrokerageBusiness;
|
|
import com.dayou.brokerage.constants.BrokerageBusiness;
|
|
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.handler.LandMarketerBrokerageHandler;
|
|
import com.dayou.common.BaseEntity;
|
|
import com.dayou.common.BaseEntity;
|
|
import com.dayou.dto.ItemDTO;
|
|
import com.dayou.dto.ItemDTO;
|
|
import com.dayou.dto.PaymentDetailDTO;
|
|
import com.dayou.dto.PaymentDetailDTO;
|
|
|
|
+import com.dayou.dto.SequenceSimpleDTO;
|
|
import com.dayou.entity.*;
|
|
import com.dayou.entity.*;
|
|
import com.dayou.mapper.ItemBrokerageSequenceMapper;
|
|
import com.dayou.mapper.ItemBrokerageSequenceMapper;
|
|
import com.dayou.service.*;
|
|
import com.dayou.service.*;
|
|
@@ -17,8 +21,11 @@ import com.dayou.vo.BrokerageSequenceDetailVO;
|
|
import com.dayou.vo.BrokerageSequenceVO;
|
|
import com.dayou.vo.BrokerageSequenceVO;
|
|
import com.google.common.cache.Cache;
|
|
import com.google.common.cache.Cache;
|
|
import com.google.common.cache.LoadingCache;
|
|
import com.google.common.cache.LoadingCache;
|
|
|
|
+import com.google.common.collect.Sets;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
+import org.checkerframework.checker.units.qual.A;
|
|
|
|
+import org.springframework.beans.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,7 +39,10 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
+import static com.dayou.brokerage.constants.BrokerageBusiness.COMPENSATION;
|
|
|
|
+import static com.dayou.brokerage.constants.BrokerageBusiness.PAYMENT_SETTLE;
|
|
import static com.dayou.brokerage.constants.BrokerageMsg.*;
|
|
import static com.dayou.brokerage.constants.BrokerageMsg.*;
|
|
|
|
+import static com.dayou.brokerage.constants.BrokerageRule.LAND_SUPERVISOR_RULE;
|
|
import static com.dayou.common.Constants.*;
|
|
import static com.dayou.common.Constants.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -66,11 +76,20 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
private MarketerBrokerageCalculator landMarketerBrokerageHandler;
|
|
private MarketerBrokerageCalculator landMarketerBrokerageHandler;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
|
+ private LandMarketerBrokerageHandler marketerBrokerageHandler;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
private IBrokerageVariableService brokerageVariableService;
|
|
private IBrokerageVariableService brokerageVariableService;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private IBrokeragePostRatioService brokeragePostRatioService;
|
|
private IBrokeragePostRatioService brokeragePostRatioService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private IUserTargetService userTargetService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private IMarketStatService marketStatService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
public Page<BrokerageSequenceVO> selectPage(Page page, BrokerageSequenceVO itemBrokerageSequence){
|
|
public Page<BrokerageSequenceVO> selectPage(Page page, BrokerageSequenceVO itemBrokerageSequence){
|
|
@@ -116,7 +135,11 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
.brokerageAmount(nonMarketerAheadAmount.getValue())
|
|
.brokerageAmount(nonMarketerAheadAmount.getValue())
|
|
.userId(nonMarketerAheadAmount.getKey())
|
|
.userId(nonMarketerAheadAmount.getKey())
|
|
.cate(BrokerageBusiness.DEFAULT_AHEAD.getCode())
|
|
.cate(BrokerageBusiness.DEFAULT_AHEAD.getCode())
|
|
- .embody(BROKERAGE_SEQUENCE_EMBODY.replace(YEARMONTH,year+"-"+(month+1))).remark(NON_MARKETER_BASE_SEQUENCE_REMARK).build();
|
|
|
|
|
|
+ .embody(BROKERAGE_SEQUENCE_EMBODY.replace(YEARMONTH,year+"-"+(month+1)))
|
|
|
|
+ .remark(NON_MARKETER_BASE_SEQUENCE_REMARK)
|
|
|
|
+ .year(year)
|
|
|
|
+ .month(month+1)
|
|
|
|
+ .build();
|
|
sequences.add(sequence);
|
|
sequences.add(sequence);
|
|
}
|
|
}
|
|
return this.saveBatch(sequences);
|
|
return this.saveBatch(sequences);
|
|
@@ -137,58 +160,45 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
.in(ItemBrokerageDetail::getGeneralId, generalIds).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
.in(ItemBrokerageDetail::getGeneralId, generalIds).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
List<ItemBrokerageDetail> toUpdateItemBrokerageDetails = new ArrayList<>();
|
|
List<ItemBrokerageDetail> toUpdateItemBrokerageDetails = new ArrayList<>();
|
|
if (CollectionUtils.isNotEmpty(settleDetails)){
|
|
if (CollectionUtils.isNotEmpty(settleDetails)){
|
|
- Set<ItemBrokerageSequenceDetail> sequenceDetails = settleDetails.stream().map(x -> {
|
|
|
|
|
|
+ Set<ItemBrokerageSequenceDetail> sequenceDetails = Sets.newHashSet();
|
|
|
|
+ for (ItemBrokerageDetail x : settleDetails){
|
|
ItemBrokerageGeneral general = idGeneral.get(x.getGeneralId());
|
|
ItemBrokerageGeneral general = idGeneral.get(x.getGeneralId());
|
|
if (general.getMarketerStatus().equals(BrokerageState.TO_PREDICTING.getCode())
|
|
if (general.getMarketerStatus().equals(BrokerageState.TO_PREDICTING.getCode())
|
|
&& x.getBrokerageMode().equals(BrokerageMode.PERSONAL.getCode())
|
|
&& x.getBrokerageMode().equals(BrokerageMode.PERSONAL.getCode())
|
|
&& x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())) {
|
|
&& x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())) {
|
|
- ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
- .brokerageDetailId(x.getId()).userId(x.getUserId()).brokerageCate(BrokerageBusiness.AHEAD.getCode()).brokerageAmount(x.getAheadAmount()).generalId(x.getGeneralId()).build();
|
|
|
|
- x.setAdvanceAmount(x.getAheadAmount());
|
|
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = getItemBrokerageSequenceDetail(x);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
- return sequenceDetail;
|
|
|
|
|
|
+ sequenceDetails.add(sequenceDetail);
|
|
}else if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode())
|
|
}else if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode())
|
|
&& x.getBrokerageMode().equals(BrokerageMode.PERSONAL.getCode())
|
|
&& x.getBrokerageMode().equals(BrokerageMode.PERSONAL.getCode())
|
|
- && x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())
|
|
|
|
- ) {
|
|
|
|
|
|
+ && x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())) {
|
|
//减去已预提金额 ,这个地方需要再次根据 [结算时间节点] 去重新计算 营销主管和营销经理的 实际提成金额,因为 回款金额等因素可能有变动。
|
|
//减去已预提金额 ,这个地方需要再次根据 [结算时间节点] 去重新计算 营销主管和营销经理的 实际提成金额,因为 回款金额等因素可能有变动。
|
|
//客户经理的实际提成金额则根据预估计算时得出的金额为准
|
|
//客户经理的实际提成金额则根据预估计算时得出的金额为准
|
|
- BigDecimal actualAmount = x.getActualAmount();
|
|
|
|
- if (general.getMarketerAdvanceBrokerageDone()) {
|
|
|
|
- actualAmount = actualAmount.subtract(x.getAheadAmount());
|
|
|
|
- }
|
|
|
|
- ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
- .brokerageDetailId(x.getId()).userId(x.getUserId()).brokerageCate(BrokerageBusiness.SETTLE.getCode()).brokerageAmount(actualAmount).generalId(x.getGeneralId()).build();
|
|
|
|
- x.setAdvanceAmount(actualAmount);
|
|
|
|
- x.setActualAmount(actualAmount);
|
|
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = getItemBrokerageSequenceDetail(x, general);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
- return sequenceDetail;
|
|
|
|
|
|
+ sequenceDetails.add(sequenceDetail);
|
|
}
|
|
}
|
|
//市场部领导的团队抽成部分,是跟具回款金额来结算,即使合同金额未完全回款,市场部领导的团队抽成部分也可以根据目前回款金额来结算。
|
|
//市场部领导的团队抽成部分,是跟具回款金额来结算,即使合同金额未完全回款,市场部领导的团队抽成部分也可以根据目前回款金额来结算。
|
|
else if( x.getBrokerageMode().equals(BrokerageMode.TEAM_SHARE.getCode())
|
|
else if( x.getBrokerageMode().equals(BrokerageMode.TEAM_SHARE.getCode())
|
|
&& (x.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())
|
|
&& (x.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())
|
|
- || x.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode()))){
|
|
|
|
-
|
|
|
|
- BigDecimal actualAmount = leaderBrokerageHandle(x);
|
|
|
|
-
|
|
|
|
- ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
- .brokerageDetailId(x.getId()).userId(x.getUserId()).brokerageCate(BrokerageBusiness.SETTLE.getCode()).brokerageAmount(actualAmount).generalId(x.getGeneralId()).build();
|
|
|
|
- x.setAdvanceAmount(actualAmount);
|
|
|
|
- x.setActualAmount(actualAmount);
|
|
|
|
|
|
+ || x.getBrokerageRule().equals(LAND_SUPERVISOR_RULE.getCode()))){
|
|
|
|
+ Map<Boolean, List<BrokerageVariable>> leaderSettles = leaderBrokerageHandle(x);
|
|
|
|
+ List<BrokerageVariable> coll = leaderSettles.get(Boolean.TRUE);
|
|
|
|
+ List<BrokerageVariable> variables = leaderSettles.get(Boolean.FALSE);
|
|
|
|
+ if (CollectionUtils.isNotEmpty(coll)){
|
|
|
|
+ compensationSettle(sequenceDetails, x, coll);
|
|
|
|
+ }
|
|
|
|
+ if (CollectionUtils.isNotEmpty(variables)){
|
|
|
|
+ newPaymentSettle(sequenceDetails, x, variables);
|
|
|
|
+ }
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
- return sequenceDetail;
|
|
|
|
}
|
|
}
|
|
else if (general.getParticipantStatus().equals(BrokerageState.NOT_SETTLE.getCode()) && x.getBrokerageRule().equals(BrokerageRule.LAND_OTHER_RULE.getCode())) {
|
|
else if (general.getParticipantStatus().equals(BrokerageState.NOT_SETTLE.getCode()) && x.getBrokerageRule().equals(BrokerageRule.LAND_OTHER_RULE.getCode())) {
|
|
- ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
- .brokerageDetailId(x.getId()).userId(x.getUserId()).brokerageCate(BrokerageBusiness.SETTLE.getCode()).brokerageAmount(x.getActualAmount()).generalId(x.getGeneralId()).build();
|
|
|
|
- x.setAdvanceAmount(x.getActualAmount());
|
|
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = otherRuleSettle(x);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
- return sequenceDetail;
|
|
|
|
|
|
+ sequenceDetails.add(sequenceDetail);
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- }).collect(Collectors.toSet());
|
|
|
|
|
|
+ }
|
|
|
|
|
|
Map<Long, List<ItemBrokerageSequenceDetail>> collect = sequenceDetails.stream().filter(x->x!=null).collect(Collectors.groupingBy(ItemBrokerageSequenceDetail::getUserId));
|
|
Map<Long, List<ItemBrokerageSequenceDetail>> collect = sequenceDetails.stream().filter(x->x!=null).collect(Collectors.groupingBy(ItemBrokerageSequenceDetail::getUserId));
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
@@ -200,8 +210,11 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
BigDecimal userTotalAmount = values.stream().map(ItemBrokerageSequenceDetail::getBrokerageAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal userTotalAmount = values.stream().map(ItemBrokerageSequenceDetail::getBrokerageAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
ItemBrokerageSequence sequence = ItemBrokerageSequence.builder().brokerageAmount(userTotalAmount).userId(userSequence.getKey())
|
|
ItemBrokerageSequence sequence = ItemBrokerageSequence.builder().brokerageAmount(userTotalAmount).userId(userSequence.getKey())
|
|
.cate(BrokerageBusiness.ITEM_SETTLE.getCode())
|
|
.cate(BrokerageBusiness.ITEM_SETTLE.getCode())
|
|
- .remark(BROKERAGE_SEQUENCE_REMARK.replace("sum",itemSize.size()+"").replace("month",(month+1)+""))
|
|
|
|
- .embody(BROKERAGE_SEQUENCE_EMBODY.replace(YEARMONTH,year+"-"+(month+1))).build();
|
|
|
|
|
|
+ .remark(BROKERAGE_SEQUENCE_REMARK.replace("sum",String.valueOf(itemSize.size())))
|
|
|
|
+ .embody(BROKERAGE_SEQUENCE_EMBODY.replace(YEARMONTH,year+"-"+(month+1)))
|
|
|
|
+ .year(year)
|
|
|
|
+ .month(month+1)
|
|
|
|
+ .build();
|
|
this.save(sequence);
|
|
this.save(sequence);
|
|
values.stream().forEach(x->{x.setSequenceId(sequence.getId());});
|
|
values.stream().forEach(x->{x.setSequenceId(sequence.getId());});
|
|
brokerageSequenceDetailService.saveBatch(values);
|
|
brokerageSequenceDetailService.saveBatch(values);
|
|
@@ -211,22 +224,9 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
Map<Long, List<ItemBrokerageSequenceDetail>> sequenceDetailByGeneral = sequenceDetails.stream().filter(x->x!=null).collect(Collectors.groupingBy(ItemBrokerageSequenceDetail::getGeneralId));
|
|
Map<Long, List<ItemBrokerageSequenceDetail>> sequenceDetailByGeneral = sequenceDetails.stream().filter(x->x!=null).collect(Collectors.groupingBy(ItemBrokerageSequenceDetail::getGeneralId));
|
|
|
|
|
|
for (Map.Entry<Long,List<ItemBrokerageSequenceDetail>> sequence : sequenceDetailByGeneral.entrySet()){
|
|
for (Map.Entry<Long,List<ItemBrokerageSequenceDetail>> sequence : sequenceDetailByGeneral.entrySet()){
|
|
- BigDecimal gAheadTotal = BigDecimal.ZERO;
|
|
|
|
- BigDecimal gAdvanceTotal = BigDecimal.ZERO;
|
|
|
|
ItemBrokerageGeneral general = idGeneral.get(sequence.getKey());
|
|
ItemBrokerageGeneral general = idGeneral.get(sequence.getKey());
|
|
- for (ItemBrokerageSequenceDetail sequenceDetail :sequence.getValue()){
|
|
|
|
- //如果预提金额不为空,且已结算金额为空
|
|
|
|
- if (general.getMarketerStatus().equals(BrokerageState.TO_PREDICTING.getCode()) && sequenceDetail.getBrokerageCate().equals(BrokerageBusiness.AHEAD.getCode())) {
|
|
|
|
- gAheadTotal = gAheadTotal.add(sequenceDetail.getBrokerageAmount());
|
|
|
|
- }else if (general.getMarketerStatus().equals(BrokerageState.PREDICTED.getCode()) && sequenceDetail.getBrokerageCate().equals(BrokerageBusiness.SETTLE.getCode())){
|
|
|
|
- gAdvanceTotal = gAdvanceTotal.add(sequenceDetail.getBrokerageAmount());
|
|
|
|
- }else if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode()) && sequenceDetail.getBrokerageCate().equals(BrokerageBusiness.SETTLE.getCode())){
|
|
|
|
- gAdvanceTotal = gAdvanceTotal.add(sequenceDetail.getBrokerageAmount());
|
|
|
|
- }else if (general.getParticipantStatus().equals(BrokerageState.NOT_SETTLE.getCode()) && sequenceDetail.getBrokerageCate().equals(BrokerageBusiness.SETTLE.getCode())){
|
|
|
|
- gAdvanceTotal = gAdvanceTotal.add(sequenceDetail.getBrokerageAmount());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- general.setBrokerageActualAmount(gAdvanceTotal.add(gAheadTotal).add(general.getBrokerageActualAmount()));
|
|
|
|
|
|
+ BigDecimal reduce = sequence.getValue().stream().map(ItemBrokerageSequenceDetail::getBrokerageAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ general.setBrokerageActualAmount(reduce.add(general.getBrokerageActualAmount()));
|
|
|
|
|
|
if (general.getMarketerStatus().equals(BrokerageState.TO_PREDICTING.getCode())){
|
|
if (general.getMarketerStatus().equals(BrokerageState.TO_PREDICTING.getCode())){
|
|
general.setMarketerStatus(BrokerageState.PREDICTED.getCode());
|
|
general.setMarketerStatus(BrokerageState.PREDICTED.getCode());
|
|
@@ -250,39 +250,170 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 处理领导的提成逻辑
|
|
|
|
|
|
+ * 参与人人员结算
|
|
|
|
+ * @param x
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private ItemBrokerageSequenceDetail otherRuleSettle(ItemBrokerageDetail x) {
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
+ .brokerageDetailId(x.getId()).unsettledAmount(BigDecimal.ZERO).userId(x.getUserId())
|
|
|
|
+ .brokerageCate(BrokerageBusiness.SETTLE.getCode()).brokerageAmount(x.getActualAmount()).generalId(x.getGeneralId()).build();
|
|
|
|
+ x.setAdvanceAmount(x.getActualAmount());
|
|
|
|
+ return sequenceDetail;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 市场部领导新增回款结算
|
|
|
|
+ * @param sequenceDetails
|
|
|
|
+ * @param x
|
|
|
|
+ * @param variables
|
|
|
|
+ */
|
|
|
|
+ private void newPaymentSettle(Set<ItemBrokerageSequenceDetail> sequenceDetails, ItemBrokerageDetail x, List<BrokerageVariable> variables) {
|
|
|
|
+ List<ItemBrokerageSequenceDetail> newPayments = variables.stream().map(v -> {
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
+ .brokerageDetailId(x.getId())
|
|
|
|
+ .userId(x.getUserId())
|
|
|
|
+ .brokerageCate(BrokerageBusiness.PAYMENT_SETTLE.getCode())
|
|
|
|
+ .brokerageAmount(v.getSettledAmount())
|
|
|
|
+ .unsettledAmount(v.getUnsettledAmount())
|
|
|
|
+ .paymentId(v.getPaymentId())
|
|
|
|
+ .generalId(x.getGeneralId()).build();
|
|
|
|
+ return sequenceDetail;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ BigDecimal reduce = variables.stream().map(BrokerageVariable::getSettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ x.setAdvanceAmount(x.getAdvanceAmount().add(reduce));
|
|
|
|
+ x.setActualAmount(x.getActualAmount().add(reduce));
|
|
|
|
+ sequenceDetails.addAll(newPayments);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 市场部领导补偿结算
|
|
|
|
+ * @param sequenceDetails
|
|
|
|
+ * @param x
|
|
|
|
+ * @param coll
|
|
|
|
+ */
|
|
|
|
+ private void compensationSettle(Set<ItemBrokerageSequenceDetail> sequenceDetails, ItemBrokerageDetail x, List<BrokerageVariable> coll) {
|
|
|
|
+ List<ItemBrokerageSequenceDetail> compensations = coll.stream().map(v -> {
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
+ .brokerageDetailId(v.getBrokerageDetailId())
|
|
|
|
+ .userId(x.getUserId())
|
|
|
|
+ .brokerageCate(BrokerageBusiness.COMPENSATION.getCode())
|
|
|
|
+ .brokerageAmount(v.getUnsettledAmount())
|
|
|
|
+ .unsettledAmount(BigDecimal.ZERO)
|
|
|
|
+ .paymentId(v.getPaymentId())
|
|
|
|
+ .generalId(x.getGeneralId()).build();
|
|
|
|
+ return sequenceDetail;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ BigDecimal reduce = coll.stream().map(BrokerageVariable::getUnsettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ x.setAdvanceAmount(x.getAdvanceAmount().add(reduce));
|
|
|
|
+ x.setActualAmount(x.getActualAmount().add(reduce));
|
|
|
|
+ sequenceDetails.addAll(compensations);
|
|
|
|
+
|
|
|
|
+ //更新补偿结算表
|
|
|
|
+ coll.stream().forEach(c->{
|
|
|
|
+ c.setUnsettledAmount(BigDecimal.ZERO);
|
|
|
|
+ c.setSettledAmount(c.getBrokerageAmount());
|
|
|
|
+ });
|
|
|
|
+ brokerageVariableService.updateBatchById(coll);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 合同状态为待结算,处理客户经理结算逻辑
|
|
|
|
+ * @param x
|
|
|
|
+ * @param general
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private ItemBrokerageSequenceDetail getItemBrokerageSequenceDetail(ItemBrokerageDetail x, ItemBrokerageGeneral general) {
|
|
|
|
+ BigDecimal actualAmount = x.getActualAmount();
|
|
|
|
+ if (general.getMarketerAdvanceBrokerageDone()) {
|
|
|
|
+ actualAmount = actualAmount.subtract(x.getAheadAmount());
|
|
|
|
+ }
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
+ .brokerageDetailId(x.getId()).userId(x.getUserId()).brokerageCate(BrokerageBusiness.SETTLE.getCode())
|
|
|
|
+ .brokerageAmount(actualAmount).unsettledAmount(BigDecimal.ZERO).generalId(x.getGeneralId()).build();
|
|
|
|
+ x.setAdvanceAmount(x.getActualAmount());
|
|
|
|
+ x.setActualAmount(x.getActualAmount());
|
|
|
|
+ return sequenceDetail;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 合同状态为待预提,处理客户经理预提逻辑
|
|
|
|
+ * @param x
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private ItemBrokerageSequenceDetail getItemBrokerageSequenceDetail(ItemBrokerageDetail x) {
|
|
|
|
+ ItemBrokerageSequenceDetail sequenceDetail = ItemBrokerageSequenceDetail.builder()
|
|
|
|
+ .brokerageDetailId(x.getId()).userId(x.getUserId()).brokerageCate(BrokerageBusiness.AHEAD.getCode()).brokerageAmount(x.getAheadAmount())
|
|
|
|
+ .unsettledAmount(x.getPredictAmount().subtract(x.getAheadAmount())).generalId(x.getGeneralId()).build();
|
|
|
|
+ x.setAdvanceAmount(x.getAheadAmount());
|
|
|
|
+ return sequenceDetail;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 处理领导的提成逻辑 (包含两部分:1由于回款目标达成的补偿结算 (True),2,新增回款的结算 (False))
|
|
* @param brokerageDetail
|
|
* @param brokerageDetail
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
- private BigDecimal leaderBrokerageHandle(ItemBrokerageDetail brokerageDetail) {
|
|
|
|
|
|
+ private Map<Boolean,List<BrokerageVariable>> leaderBrokerageHandle(ItemBrokerageDetail brokerageDetail) {
|
|
|
|
+
|
|
ItemDTO item = brokerageGeneralService.getItemByBrokerageGeneralId(brokerageDetail.getGeneralId());
|
|
ItemDTO item = brokerageGeneralService.getItemByBrokerageGeneralId(brokerageDetail.getGeneralId());
|
|
ItemBrokerageGeneral general = brokerageGeneralService.getById(brokerageDetail.getGeneralId());
|
|
ItemBrokerageGeneral general = brokerageGeneralService.getById(brokerageDetail.getGeneralId());
|
|
|
|
+ Map<Boolean,List<BrokerageVariable>> map = new HashMap<>();
|
|
|
|
+ //团队回款目标
|
|
|
|
+ BigDecimal teamPaymentTarget = BigDecimal.valueOf(userTargetService.getTeamTarget(brokerageDetail.getUserId()).getPaymentTarget());
|
|
|
|
+ BigDecimal teamCurrentYearPayment = marketStatService.currentYearTeamPayment(brokerageDetail.getUserId());
|
|
|
|
+
|
|
|
|
+ if (marketerBrokerageHandler.checkTeamMonthlyPayment(teamCurrentYearPayment, teamPaymentTarget)){
|
|
|
|
+ List<BrokerageVariable> compensations = compensationBrokerage(brokerageDetail.getUserId(),brokerageDetail.getGeneralId());
|
|
|
|
+ if (CollectionUtils.isNotEmpty(compensations)){
|
|
|
|
+ map.put(Boolean.TRUE,compensations);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
//这个方法要获取 新增的 且未被结算过的回款 。
|
|
//这个方法要获取 新增的 且未被结算过的回款 。
|
|
List<PaymentDetailDTO> list = brokerageVariableService.getPaymentDetailListByItemId(item.getId(),brokerageDetail.getUserId());
|
|
List<PaymentDetailDTO> list = brokerageVariableService.getPaymentDetailListByItemId(item.getId(),brokerageDetail.getUserId());
|
|
if (CollectionUtils.isNotEmpty(list)){
|
|
if (CollectionUtils.isNotEmpty(list)){
|
|
BrokeragePostRatio postRatio = brokeragePostRatioService.getOne(new LambdaQueryWrapper<BrokeragePostRatio>()
|
|
BrokeragePostRatio postRatio = brokeragePostRatioService.getOne(new LambdaQueryWrapper<BrokeragePostRatio>()
|
|
.eq(BrokeragePostRatio::getBrokerageRule, brokerageDetail.getBrokerageRule()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
.eq(BrokeragePostRatio::getBrokerageRule, brokerageDetail.getBrokerageRule()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
if (postRatio!=null && postRatio.getBrokerageRatio()!=null){
|
|
if (postRatio!=null && postRatio.getBrokerageRatio()!=null){
|
|
- List<BrokerageVariable> variables = list.stream().map(x->{
|
|
|
|
- if (SUPERVISOR.equals(x.getUserType())){
|
|
|
|
- return landMarketerBrokerageHandler.supervisorSettle(x.getPaymentId(), x.getPaymentAmount(), x.getUserId(), postRatio.getBrokerageRatio(), general.getBrokerageRate());
|
|
|
|
|
|
+ List<BrokerageVariable> newPayments = list.stream().map(x->{
|
|
|
|
+ if (LAND_SUPERVISOR_RULE.getCode().equals(brokerageDetail.getBrokerageRule())){
|
|
|
|
+ return landMarketerBrokerageHandler.supervisorSettle(x.getPaymentId(), x.getPaymentAmount(), brokerageDetail.getUserId(), postRatio.getBrokerageRatio(), general.getBrokerageRate());
|
|
}else{
|
|
}else{
|
|
- return landMarketerBrokerageHandler.managerSettle(x.getPaymentId(),x.getPaymentAmount(),item.getUserId(),x.getUserId(),postRatio.getBrokerageRatio());
|
|
|
|
|
|
+ return landMarketerBrokerageHandler.managerSettle(x.getPaymentId(),x.getPaymentAmount(),item.getUserId(),brokerageDetail.getUserId(),postRatio.getBrokerageRatio());
|
|
}
|
|
}
|
|
}).collect(Collectors.toList());
|
|
}).collect(Collectors.toList());
|
|
- if (CollectionUtils.isNotEmpty(variables)){
|
|
|
|
- brokerageVariableService.saveBatch(variables);
|
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(newPayments)){
|
|
|
|
+ brokerageVariableService.saveBatch(newPayments);
|
|
|
|
+ map.put(Boolean.FALSE,newPayments);
|
|
}
|
|
}
|
|
- BigDecimal sum = variables.stream().map(BrokerageVariable::getSettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
- return sum;
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return BigDecimal.ZERO;
|
|
|
|
|
|
+ return map;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 回款目标达到时,结算以前未结算的提成部分
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ private List<BrokerageVariable> compensationBrokerage(Long userId,Long generalId){
|
|
|
|
+ List<BrokerageVariable> list = brokerageVariableService.getCompensationBrokerage(userId,generalId);
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public List<BrokerageSequenceVO> deduction(BrokerageSequenceVO brokerageSequenceVO) {
|
|
public List<BrokerageSequenceVO> deduction(BrokerageSequenceVO brokerageSequenceVO) {
|
|
List<BrokerageSequenceVO> list = brokerageSequenceMapper.deduction(brokerageSequenceVO);
|
|
List<BrokerageSequenceVO> list = brokerageSequenceMapper.deduction(brokerageSequenceVO);
|
|
return list;
|
|
return list;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<BrokerageSequenceVO> xList(BrokerageSequenceVO brokerageSequenceVO) {
|
|
|
|
+ List<BrokerageSequenceVO> list = brokerageSequenceMapper.xList(brokerageSequenceVO);
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
}
|
|
}
|