|
@@ -1,6 +1,5 @@
|
|
|
package com.dayou.service.impl;
|
|
|
|
|
|
-import cn.hutool.core.bean.BeanUtil;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.dayou.bo.BrokerageDetailBO;
|
|
|
import com.dayou.bo.LeaderRatioBO;
|
|
@@ -12,21 +11,25 @@ import com.dayou.brokerage.constants.BrokerageRule;
|
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
|
import com.dayou.common.BaseEntity;
|
|
|
import com.dayou.dto.ItemDTO;
|
|
|
+import com.dayou.dto.ParticipantSettleDTO;
|
|
|
import com.dayou.entity.*;
|
|
|
+import com.dayou.exception.ErrorCode;
|
|
|
import com.dayou.mapper.ItemBrokerageGeneralMapper;
|
|
|
import com.dayou.mapper.ItemMapper;
|
|
|
import com.dayou.service.*;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.dayou.vo.ItemStageVO;
|
|
|
+import com.google.common.collect.Sets;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
|
+import java.awt.geom.Rectangle2D;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Set;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -62,8 +65,20 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
private ItemMapper itemMapper;
|
|
|
|
|
|
@Autowired
|
|
|
+ private IItemService iItemService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
private IUserService userService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IItemStageService itemStageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IItemEvaluateService iItemEvaluateService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPaymentCollectionService paymentCollectionService;
|
|
|
+
|
|
|
@Override
|
|
|
@SuppressWarnings("unchecked")
|
|
|
public Page<ItemBrokerageGeneral> selectPage(Page page,ItemBrokerageGeneral itemBrokerageGeneral){
|
|
@@ -102,7 +117,6 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
|
bo.setCurrentPayment(currentMonthPayment);
|
|
|
bo.setPaymentTarget(paymentTarget);
|
|
|
- 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);
|
|
|
//创建下单人领导提成记录
|
|
@@ -149,7 +163,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
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());
|
|
|
- log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
|
|
|
+ log.info("更新项目信息时创建了相关的提成记录");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -199,7 +213,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
if (general == null){
|
|
|
addMarketerBrokerage(itemStageVO.getItemId());
|
|
|
addParticipatorBrokerage(itemStageVO,brokerageStageId);
|
|
|
- log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
|
|
|
+ log.info("更新项目信息时创建了相关的提成记录");
|
|
|
return;
|
|
|
}
|
|
|
Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
|
|
@@ -265,6 +279,68 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getBrokerageStageId,itemStageId));
|
|
|
}
|
|
|
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void settleParticipatorBrokerage(Long itemId) {
|
|
|
+ ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemId).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
+ List<ItemStage> stages = itemStageService.list(new LambdaQueryWrapper<ItemStage>().eq(ItemStage::getItemId, itemId));
|
|
|
+ ItemEvaluate settle = iItemEvaluateService.getOne(new LambdaQueryWrapper<ItemEvaluate>().eq(ItemEvaluate::getItemId, itemId).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
+ if (general!=null && CollectionUtils.isNotEmpty(stages) && settle!=null && settle.getWeight()!=null){
|
|
|
+ NonMarketerMarketerBrokerageCalculator calculator = (NonMarketerMarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_OTHER_RULE);
|
|
|
+ ParticipantSettleDTO participantSettle = ParticipantSettleDTO.builder().generalId(general.getId()).stages(stages).brokerageState(general.getStatus()).weight(settle.getWeight()).build();
|
|
|
+ List<ItemBrokerageDetail> itemBrokerageDetails = calculator.actualAmount(participantSettle);
|
|
|
+ iItemBrokerageDetailService.updateBatchById(itemBrokerageDetails);
|
|
|
+ //结算后更新总表参与人提成总金额
|
|
|
+ BigDecimal participatorActualTotalAmount = itemBrokerageDetails.stream().map(ItemBrokerageDetail::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ general.setParticipantActualBrokerageAmount(participatorActualTotalAmount);
|
|
|
+ general.setParticipantAdvanceStatus(Boolean.FALSE);
|
|
|
+ general.setBrokerageActualAmount(participatorActualTotalAmount.add(general.getBrokerageActualAmount()));
|
|
|
+ if (general.getStatus().equals(BrokerageState.MARKETER_SETTLE.getCode())){
|
|
|
+ general.setStatus(BrokerageState.CLOSED.getCode());
|
|
|
+ }else {
|
|
|
+ general.setStatus(BrokerageState.PARTICIPANT_SETTLE.getCode());
|
|
|
+ }
|
|
|
+ this.updateById(general);
|
|
|
+ }else {
|
|
|
+ log.info(ErrorCode.BROKERAGE_SETTLE_FAILED.getErrorMsg()+"项目id:[{}]",itemId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void settleMarketerBrokerage(PaymentCollection payment) {
|
|
|
+ ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, payment.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
+ Item item = iItemService.getById(payment.getItemId());
|
|
|
+ List<PaymentCollection> paymentList = paymentCollectionService.list(new LambdaQueryWrapper<PaymentCollection>()
|
|
|
+ .eq(PaymentCollection::getItemId, payment.getItemId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
+ BigDecimal payDone = BigDecimal.valueOf(paymentList.stream().mapToDouble(PaymentCollection::getAmount).sum());
|
|
|
+ brokerageCalculateSupport.checkItemBrokerageStatusOnMarketerSettle(general.getStatus());
|
|
|
+ if (item.getAmount()!=null && item.getAmount().compareTo(payDone)==0){
|
|
|
+ if (general.getStatus().equals(BrokerageState.PARTICIPANT_SETTLE.getCode())){
|
|
|
+ general.setStatus(BrokerageState.CLOSED.getCode());
|
|
|
+ }else {
|
|
|
+ general.setStatus(BrokerageState.MARKETER_SETTLE.getCode());
|
|
|
+ }
|
|
|
+ this.updateById(general);
|
|
|
+ }
|
|
|
+ log.info("还有未回款项,暂不执行客户经理提成结算。");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当月可结算提成的项目
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<ItemBrokerageGeneral> settleAbleList() {
|
|
|
+ // 获取当前时间节点项目提成状态为已结算的项目 ,包括 市场人和参与人员已结算和项目已结算
|
|
|
+ HashSet<String> status = Sets.newHashSet();
|
|
|
+ status.add(BrokerageState.MARKETER_SETTLE.getCode());
|
|
|
+ status.add(BrokerageState.PARTICIPANT_SETTLE.getCode());
|
|
|
+ status.add(BrokerageState.ITEM_SETTLE.getCode());
|
|
|
+ List<ItemBrokerageGeneral> ableSettleList = this.list(new LambdaQueryWrapper<ItemBrokerageGeneral>().in(ItemBrokerageGeneral::getStatus,status).eq(BaseEntity::getDeleted,Boolean.FALSE));
|
|
|
+ return ableSettleList;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取客户经理年回款目标
|
|
|
* @param userId
|