|
@@ -134,18 +134,25 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
|
bo.setCurrentPayment(currentYearPayment);
|
|
|
bo.setPaymentTarget(paymentTarget);
|
|
|
- //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<ItemBrokerageDetail> brokerageLeaderDetailBOS = Sets.newHashSet();
|
|
|
+ BigDecimal leaderPredictTotalAmount = BigDecimal.ZERO;
|
|
|
//创建下单人(客户经理或营销主管个人提成部分)提成记录
|
|
|
if (bo.getBrokerageRule().equals(LAND_MARKETER_RULE.getCode())){
|
|
|
bo = calculator.predictPersonalAmount(bo);
|
|
|
+ brokerageLeaderDetailBOS.addAll(calculator.predictTeamShareAmount(bo, leaderRatioBO));
|
|
|
+ leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
}
|
|
|
if (bo.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode())){
|
|
|
bo = calculator.supervisorPersonalAmount(bo);
|
|
|
+ brokerageLeaderDetailBOS.addAll(calculator.predictTeamShareAmount(bo, leaderRatioBO));
|
|
|
+ leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ if (bo.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())){
|
|
|
+ bo = calculator.managerPersonalAmount(bo);
|
|
|
}
|
|
|
- //创建下单人领导提成记录
|
|
|
- Set<ItemBrokerageDetail> brokerageLeaderDetailBOS = calculator.predictTeamShareAmount(bo, leaderRatioBO);
|
|
|
- BigDecimal leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
//构建提成总表对象
|
|
|
ItemBrokerageGeneral general = ItemBrokerageGeneral.builder()
|
|
|
.itemId(bo.getItemId())
|
|
@@ -205,33 +212,42 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
}
|
|
|
MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(LAND_MARKETER_RULE);
|
|
|
//更新客户经理的提成记录
|
|
|
- UserTarget userTarget = userTargetService.getUserTarget(marketerDetail.getUserId());
|
|
|
- BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
|
|
|
- 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()).build();
|
|
|
brokerageDetailBO.setUserId(marketerDetail.getUserId());
|
|
|
brokerageDetailBO.setId(marketerDetail.getId());
|
|
|
brokerageDetailBO.setGeneralId(general.getId());
|
|
|
brokerageDetailBO.setMarketerStatus(general.getMarketerStatus());
|
|
|
brokerageDetailBO.setBrokerageRule(marketerDetail.getBrokerageRule());
|
|
|
- //创建下单人(客户经理或营销主管个人提成部分)提成记录
|
|
|
+ //创建下单人提成记录
|
|
|
if (brokerageDetailBO.getBrokerageRule().equals(LAND_MARKETER_RULE.getCode())){
|
|
|
+ UserTarget userTarget = userTargetService.getUserTarget(marketerDetail.getUserId());
|
|
|
+ BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
|
|
|
+ BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
|
+ brokerageDetailBO.setPaymentTarget(paymentTarget);
|
|
|
+ brokerageDetailBO.setCurrentPayment(currentMonthPayment);
|
|
|
brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
|
}
|
|
|
if (brokerageDetailBO.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode())){
|
|
|
brokerageDetailBO = calculator.supervisorPersonalAmount(brokerageDetailBO);
|
|
|
}
|
|
|
+ if (brokerageDetailBO.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())){
|
|
|
+ brokerageDetailBO = calculator.managerPersonalAmount(brokerageDetailBO);
|
|
|
+ }
|
|
|
iItemBrokerageDetailService.update(brokerageDetailBO);
|
|
|
|
|
|
|
|
|
- //更新领导提成记录
|
|
|
- Set<LeaderRatioBO> leaderRatioBO = teamMemberService.getLeader(marketerDetail.getUserId(), MARKET_DEPARTMENT).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 = BigDecimal.ZERO;
|
|
|
+ if (!brokerageDetailBO.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())){
|
|
|
+ //更新领导提成记录
|
|
|
+ Set<LeaderRatioBO> leaderRatioBO = teamMemberService.getLeader(marketerDetail.getUserId(), MARKET_DEPARTMENT).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);
|
|
|
+ leaderPredictTotalAmount = itemBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
|
|
|
//更新总表
|
|
|
- BigDecimal leaderPredictTotalAmount = itemBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
general.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount().add(leaderPredictTotalAmount));
|
|
|
general.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
|
|
|
general.setBrokerageRate(brokerageDetailBO.getRate());
|
|
@@ -374,56 +390,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
BigDecimal currentYearPaymentAmount = marketStatService.currentYearPayment(userId);
|
|
|
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);
|
|
|
- });
|
|
|
+ checkReturnPayment(payment, item, userId, currentYearPaymentAmount, userTarget);
|
|
|
|
|
|
if (brokerageCalculateSupport.checkMarketerPredictBrokerage(currentYearPaymentAmount, userTarget)){
|
|
|
//则需要将上月签订的合同的预提状态改为 可预提
|
|
@@ -450,6 +417,134 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 回款目标变动后,需重新计算客户经理的预提状态,和营销主管,营销经理的预提金额
|
|
|
+ * @param userId
|
|
|
+ * @param currentYearPaymentAmount
|
|
|
+ * @param userTarget
|
|
|
+ */
|
|
|
+ private void checkUserTarget(Long userId,BigDecimal currentYearPaymentAmount, BigDecimal userTarget){
|
|
|
+ Set<ItemBrokerageGeneralDTO> lastMonthTeamBrokerages = getLeaderBrokerageDetailsByCustomerManagerId(userId);
|
|
|
+ MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(LAND_MARKETER_RULE);
|
|
|
+ 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(userId).getName();
|
|
|
+ //如果该比提成总表显示客户经理 已预提,则不需要再次计算个人提成。
|
|
|
+ if (postName.equals(CUSTOMER_MANAGER) && (userId.equals(oGeneral.getUserId())) && !oGeneral.getMarketerAdvanceBrokerageDone()){
|
|
|
+ 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()));
|
|
|
+ }
|
|
|
+ //如果这些单子中下单人是营销经理
|
|
|
+ if (userPostService.getMarketPostList(oGeneral.getUserId()).getName().equals(MARKET_MANAGER)){
|
|
|
+ iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>()
|
|
|
+ .eq(ItemBrokerageDetail::getGeneralId,oGeneral.getId()).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode()));
|
|
|
+ brokerageDetailBO = calculator.managerPersonalAmount(brokerageDetailBO);
|
|
|
+ iItemBrokerageDetailService.save(brokerageDetailBO);
|
|
|
+ }else {
|
|
|
+ //更新领导的预计提成
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 回款金额变动,需校验客户经理,营销主管,营销经理的回款目标是否达成,若达成需修改其他合同的预估提成金额
|
|
|
+ * @param payment
|
|
|
+ * @param item
|
|
|
+ * @param userId
|
|
|
+ * @param currentYearPaymentAmount
|
|
|
+ * @param userTarget
|
|
|
+ */
|
|
|
+ private void checkReturnPayment(PaymentCollection payment, Item item, Long userId, BigDecimal currentYearPaymentAmount, BigDecimal userTarget) {
|
|
|
+
|
|
|
+ Set<ItemBrokerageGeneralDTO> lastMonthTeamBrokerages = getLeaderBrokerageDetailsByCustomerManagerId(userId);
|
|
|
+ MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(LAND_MARKETER_RULE);
|
|
|
+ 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.getMarketerAdvanceBrokerageDone() && ( 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()));
|
|
|
+ }
|
|
|
+ //如果这些单子中下单人是营销经理
|
|
|
+ if (userPostService.getMarketPostList(oGeneral.getUserId()).getName().equals(MARKET_MANAGER)){
|
|
|
+ iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>()
|
|
|
+ .eq(ItemBrokerageDetail::getGeneralId,oGeneral.getId()).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode()));
|
|
|
+ brokerageDetailBO = calculator.managerPersonalAmount(brokerageDetailBO);
|
|
|
+ iItemBrokerageDetailService.save(brokerageDetailBO);
|
|
|
+ }else {
|
|
|
+ //更新领导的预计提成
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 根据客户经理或营销主管的id获取其上级领导在上个月所生成的提成详情记录
|
|
|
+ * @param userId 客户经理或营销主管的id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Set<ItemBrokerageGeneralDTO> getLeaderBrokerageDetailsByCustomerManagerId(Long userId) {
|
|
|
+ //当某个客户经理达成当月回款目标后,需校验团队和部门是否达到当月回款目标。若达到则需重新就算 营销主管和营销经理的项目预计提成金额
|
|
|
+ Set<LeaderRatioBO> leader = teamMemberService.getLeader(userId, MARKET_DEPARTMENT);
|
|
|
+ Set<ItemBrokerageGeneralDTO> lastMonthTeamBrokerages = Sets.newHashSet();
|
|
|
+ //找到当前回款订单的客户经理的领导,然后获取领导们的上月可提成的项目,由于营销主管和营销经理的项目存在重复,所以这里做了并集处理
|
|
|
+ leader.stream().forEach(x->{
|
|
|
+ //获取团队或部门上月签单的提成记录
|
|
|
+ Set<Long> juniorUserIds = teamMemberService.getJuniorUserIds(x.getUserId());
|
|
|
+ // 需要加上营销经理的userId,因为营销经理也可能下单
|
|
|
+ juniorUserIds.add(x.getUserId());
|
|
|
+ Set<ItemBrokerageGeneralDTO> xItemBrokerageGeneral = itemMapper.getLastMonthTeamItems(DateUtils.getLastMonth23(LocalDate.now().getYear(),
|
|
|
+ LocalDate.now().getMonthValue() - 1),juniorUserIds);
|
|
|
+ lastMonthTeamBrokerages.addAll(xItemBrokerageGeneral);
|
|
|
+ });
|
|
|
+ return lastMonthTeamBrokerages;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
private BrokerageDetailBO buildBrokerageDetailBO(ItemBrokerageGeneralDTO oGeneral) {
|
|
|
BrokerageDetailBO bo = BrokerageDetailBO.builder().amount(oGeneral.getAmount()).marketerStatus(BrokerageState.NOT_PAYMENT.getCode()).build();
|
|
|
bo.setGeneralId(oGeneral.getId());
|
|
@@ -577,6 +672,9 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
public void updateAheadStatus(Long userId) {
|
|
|
BigDecimal currentYearPaymentAmount = marketStatService.currentYearPayment(userId);
|
|
|
BigDecimal userTarget = new BigDecimal(userTargetService.getUserTarget(userId).getPaymentTarget());
|
|
|
+
|
|
|
+ checkUserTarget(userId,currentYearPaymentAmount,userTarget);
|
|
|
+
|
|
|
List<ItemBrokerageGeneral> lastMonthItemsBrokerages = itemMapper.getLastMonthItemsInStatus(DateUtils.getLastMonth23(LocalDate.now().getYear(), LocalDate.now().getMonthValue() - 1),userId);
|
|
|
if (brokerageCalculateSupport.checkMarketerPredictBrokerage(currentYearPaymentAmount, userTarget) && CollectionUtils.isNotEmpty(lastMonthItemsBrokerages)){
|
|
|
lastMonthItemsBrokerages.stream().forEach(
|