|
@@ -3,41 +3,33 @@ package com.dayou.service.impl;
|
|
|
import com.dayou.bo.BrokerageDetailBO;
|
|
|
import com.dayou.brokerage.BrokerageCalculateSupport;
|
|
|
import com.dayou.brokerage.BrokerageCalculator;
|
|
|
+import com.dayou.brokerage.MarketerBrokerageCalculator;
|
|
|
+import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
|
|
|
+import com.dayou.brokerage.constants.BrokerageMode;
|
|
|
import com.dayou.brokerage.constants.BrokerageRule;
|
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
|
-import com.dayou.entity.ItemBrokerageGeneral;
|
|
|
-import com.dayou.entity.PaymentCollection;
|
|
|
-import com.dayou.entity.UserTarget;
|
|
|
-import com.dayou.exception.BusinessException;
|
|
|
+import com.dayou.brokerage.factory.BrokerageCalculateFactory;
|
|
|
+import com.dayou.common.BaseEntity;
|
|
|
+import com.dayou.dto.ItemDTO;
|
|
|
+import com.dayou.entity.*;
|
|
|
import com.dayou.mapper.ItemBrokerageGeneralMapper;
|
|
|
-import com.dayou.service.IItemBrokerageDetailService;
|
|
|
-import com.dayou.service.IItemBrokerageGeneralService;
|
|
|
+import com.dayou.mapper.ItemMapper;
|
|
|
+import com.dayou.service.*;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.dayou.service.IMarketStatService;
|
|
|
-import com.dayou.service.IUserTargetService;
|
|
|
+import com.dayou.vo.ItemStageVO;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
-import com.dayou.utils.ExcelUtil;
|
|
|
-import org.apache.poi.ss.usermodel.Cell;
|
|
|
-import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
-import org.apache.poi.ss.usermodel.Row;
|
|
|
-import org.apache.poi.ss.usermodel.Sheet;
|
|
|
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.List;
|
|
|
-import java.util.ArrayList;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
-import com.dayou.enums.BatchTaskTypeEnum;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -53,7 +45,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
- private BrokerageCalculator brokerageCalculator;
|
|
|
+ private BrokerageCalculateSupport brokerageCalculateSupport;
|
|
|
|
|
|
@Autowired
|
|
|
private IUserTargetService userTargetService;
|
|
@@ -64,6 +56,9 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
@Autowired
|
|
|
private IMarketStatService marketStatService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ItemMapper itemMapper;
|
|
|
+
|
|
|
@Override
|
|
|
@SuppressWarnings("unchecked")
|
|
|
public Page<ItemBrokerageGeneral> selectPage(Page page,ItemBrokerageGeneral itemBrokerageGeneral){
|
|
@@ -94,26 +89,18 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void doCreateBrokerageGeneral(BrokerageDetailBO bo) {
|
|
|
- BrokerageCalculator calculator = brokerageCalculator.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
|
-
|
|
|
+ public void doCreateBrokerageGeneralAndDetail(BrokerageDetailBO bo) {
|
|
|
+ MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
|
|
|
Long userId = bo.getUserId();
|
|
|
- UserTarget userTarget = userTargetService.getOne(new LambdaQueryWrapper<UserTarget>().eq(UserTarget::getUserId,userId));
|
|
|
- if (userTarget==null || userTarget.getPaymentTarget()==null){
|
|
|
- userTarget = new UserTarget();
|
|
|
- userTarget.setPaymentTarget(0d);
|
|
|
- log.info("客户经理id[{}]未设置年回款目标。",userId);
|
|
|
- }
|
|
|
-
|
|
|
+ UserTarget userTarget = getUserTarget(userId);
|
|
|
BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(userId);
|
|
|
BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
|
|
|
bo.setCurrentPayment(currentMonthPayment);
|
|
|
bo.setPaymentTarget(paymentTarget);
|
|
|
bo.setItemBrokerageStatus(BrokerageState.NOT_START.getCode());
|
|
|
-
|
|
|
- bo = calculator.predictAmount(bo);
|
|
|
+ bo = calculator.predictPersonalAmount(bo);
|
|
|
ItemBrokerageGeneral general = ItemBrokerageGeneral.builder()
|
|
|
- .itemId(bo.getId())
|
|
|
+ .itemId(bo.getItemId())
|
|
|
.marketerBrokerageAmount(bo.getPredictAmount())
|
|
|
.marketerAdvanceBrokerageAble(bo.getMarketerAdvanceBrokerageAble())
|
|
|
.brokeragePredictAmount(bo.getPredictAmount())
|
|
@@ -123,4 +110,105 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
|
|
|
bo.setGeneralId(general.getId());
|
|
|
iItemBrokerageDetailService.save(bo);
|
|
|
}
|
|
|
+ @Override
|
|
|
+ public void addMarketerBrokerage(Long id) {
|
|
|
+ Item item = itemMapper.selectById(id);
|
|
|
+ BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
|
|
|
+ brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
|
|
|
+ brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
|
|
|
+ brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
|
|
|
+ brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
|
|
|
+ brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
|
|
|
+ brokerageDetailBO.setUserId(item.getUserId());
|
|
|
+ this.doCreateBrokerageGeneralAndDetail(brokerageDetailBO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void editMarketerBrokerage(ItemDTO itemDTO) {
|
|
|
+ ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemDTO.getId()).eq(BaseEntity::getDeleted,Boolean.FALSE));
|
|
|
+ if (general == null){
|
|
|
+ addMarketerBrokerage(itemDTO.getId());
|
|
|
+ log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
|
|
|
+ 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);
|
|
|
+ UserTarget userTarget = 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.setUserId(marketerDetail.getUserId());
|
|
|
+ brokerageDetailBO.setId(marketerDetail.getId());
|
|
|
+ brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
|
|
|
+ iItemBrokerageDetailService.update(brokerageDetailBO);
|
|
|
+ general.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount());
|
|
|
+ general.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
|
|
|
+ general.setBrokerageRate(brokerageDetailBO.getRate());
|
|
|
+ general.setBrokeragePredictAmount(brokerageDetailBO.getPredictAmount().add(general.getParticipantPredictBrokerageAmount()));
|
|
|
+ this.update(general);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void removeMarketerBrokerage(Long itemId) {
|
|
|
+ ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemId));
|
|
|
+ this.removeById(general.getId());
|
|
|
+ iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId,general.getId()));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ @Override
|
|
|
+ public void addParticipatorBrokerage(ItemStageVO itemStageVO,Long brokerageStageId) {
|
|
|
+ NonMarketerMarketerBrokerageCalculator calculator = (NonMarketerMarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_OTHER_RULE);
|
|
|
+ ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStageVO.getItemId()));
|
|
|
+ if (general == null){
|
|
|
+ addMarketerBrokerage(itemStageVO.getItemId());
|
|
|
+ addParticipatorBrokerage(itemStageVO,brokerageStageId);
|
|
|
+ log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
|
|
|
+ Set<ItemBrokerageDetail> participatorBrokerageDetails = participators.stream().map(x -> {
|
|
|
+ BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().build();
|
|
|
+ brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_OTHER_RULE.getCode());
|
|
|
+ brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
|
|
|
+ brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
|
|
|
+ brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
|
|
|
+ brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
|
|
|
+ brokerageDetailBO.setUserId(x.getUserId());
|
|
|
+ brokerageDetailBO.setGeneralId(general.getId());
|
|
|
+ brokerageDetailBO.setBrokerageStageId(brokerageStageId);
|
|
|
+ ItemBrokerageDetail itemBrokerageDetail = calculator.predictAmount(brokerageDetailBO);
|
|
|
+ return itemBrokerageDetail;
|
|
|
+ }).collect(Collectors.toSet());
|
|
|
+ BigDecimal participatorPredictTotalAmount = participatorBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ //创建参与人的项目提成详情
|
|
|
+ iItemBrokerageDetailService.saveBatch(participatorBrokerageDetails);
|
|
|
+ //更新项目提成总表信息
|
|
|
+ general.setParticipantPredictBrokerageAmount(participatorPredictTotalAmount);
|
|
|
+ general.setParticipantAdvanceStatus(Boolean.TRUE);
|
|
|
+ general.setBrokeragePredictAmount(general.getBrokeragePredictAmount().add(participatorPredictTotalAmount));
|
|
|
+ general.setStatus(BrokerageState.PREDICTING.getCode());
|
|
|
+
|
|
|
+ this.updateById(general);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取客户经理年回款目标
|
|
|
+ * @param userId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private UserTarget getUserTarget(Long userId) {
|
|
|
+ UserTarget userTarget = userTargetService.getOne(new LambdaQueryWrapper<UserTarget>().eq(UserTarget::getUserId, userId));
|
|
|
+ if (userTarget==null || userTarget.getPaymentTarget()==null){
|
|
|
+ userTarget = new UserTarget();
|
|
|
+ userTarget.setPaymentTarget(0d);
|
|
|
+ log.info("客户经理id[{}]未设置年回款目标。", userId);
|
|
|
+ }
|
|
|
+ return userTarget;
|
|
|
+ }
|
|
|
}
|