|
@@ -6,10 +6,9 @@ import com.dayou.brokerage.constants.BrokerageMode;
|
|
|
import com.dayou.brokerage.constants.BrokerageRule;
|
|
|
import com.dayou.brokerage.constants.BrokerageState;
|
|
|
import com.dayou.common.BaseEntity;
|
|
|
-import com.dayou.entity.ItemBrokerageDetail;
|
|
|
-import com.dayou.entity.ItemBrokerageGeneral;
|
|
|
-import com.dayou.entity.ItemBrokerageSequence;
|
|
|
-import com.dayou.entity.ItemBrokerageSequenceDetail;
|
|
|
+import com.dayou.dto.ItemDTO;
|
|
|
+import com.dayou.dto.PaymentDetailDTO;
|
|
|
+import com.dayou.entity.*;
|
|
|
import com.dayou.mapper.ItemBrokerageSequenceMapper;
|
|
|
import com.dayou.service.*;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
@@ -34,7 +33,7 @@ import java.util.stream.Collectors;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import static com.dayou.brokerage.constants.BrokerageMsg.*;
|
|
|
-import static com.dayou.common.Constants.YEARMONTH;
|
|
|
+import static com.dayou.common.Constants.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -66,6 +65,12 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
|
@Autowired
|
|
|
private MarketerBrokerageCalculator landMarketerBrokerageHandler;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IBrokerageVariableService brokerageVariableService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IBrokeragePostRatioService brokeragePostRatioService;
|
|
|
+
|
|
|
@Override
|
|
|
@SuppressWarnings("unchecked")
|
|
|
public Page<BrokerageSequenceVO> selectPage(Page page, BrokerageSequenceVO itemBrokerageSequence){
|
|
@@ -143,15 +148,12 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
|
return sequenceDetail;
|
|
|
}else if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode())
|
|
|
- && (x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())
|
|
|
- || x.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())
|
|
|
- || x.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode()))) {
|
|
|
+ && x.getBrokerageMode().equals(BrokerageMode.PERSONAL.getCode())
|
|
|
+ && x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())
|
|
|
+ ) {
|
|
|
//减去已预提金额 ,这个地方需要再次根据 [结算时间节点] 去重新计算 营销主管和营销经理的 实际提成金额,因为 回款金额等因素可能有变动。
|
|
|
//客户经理的实际提成金额则根据预估计算时得出的金额为准
|
|
|
BigDecimal actualAmount = x.getActualAmount();
|
|
|
- if (x.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode()) || x.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode())){
|
|
|
- actualAmount = landMarketerBrokerageHandler.actualTeamShareAmount(x);
|
|
|
- }
|
|
|
if (general.getMarketerAdvanceBrokerageDone()) {
|
|
|
actualAmount = actualAmount.subtract(x.getAheadAmount());
|
|
|
}
|
|
@@ -161,7 +163,22 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
|
x.setActualAmount(actualAmount);
|
|
|
toUpdateItemBrokerageDetails.add(x);
|
|
|
return sequenceDetail;
|
|
|
- } else if (general.getParticipantStatus().equals(BrokerageState.NOT_SETTLE.getCode()) && x.getBrokerageRule().equals(BrokerageRule.LAND_OTHER_RULE.getCode())) {
|
|
|
+ }
|
|
|
+ //市场部领导的团队抽成部分,是跟具回款金额来结算,即使合同金额未完全回款,市场部领导的团队抽成部分也可以根据目前回款金额来结算。
|
|
|
+ else if( x.getBrokerageMode().equals(BrokerageMode.TEAM_SHARE.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);
|
|
|
+ toUpdateItemBrokerageDetails.add(x);
|
|
|
+ return sequenceDetail;
|
|
|
+ }
|
|
|
+ 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());
|
|
@@ -232,6 +249,37 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
|
|
|
return Boolean.FALSE;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 处理领导的提成逻辑
|
|
|
+ * @param brokerageDetail
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private BigDecimal leaderBrokerageHandle(ItemBrokerageDetail brokerageDetail) {
|
|
|
+ ItemDTO item = brokerageGeneralService.getItemByBrokerageGeneralId(brokerageDetail.getGeneralId());
|
|
|
+ ItemBrokerageGeneral general = brokerageGeneralService.getById(brokerageDetail.getGeneralId());
|
|
|
+ //这个方法要获取 新增的 且未被结算过的回款 。
|
|
|
+ List<PaymentDetailDTO> list = brokerageVariableService.getPaymentDetailListByItemId(item.getId(),brokerageDetail.getUserId());
|
|
|
+ if (CollectionUtils.isNotEmpty(list)){
|
|
|
+ BrokeragePostRatio postRatio = brokeragePostRatioService.getOne(new LambdaQueryWrapper<BrokeragePostRatio>()
|
|
|
+ .eq(BrokeragePostRatio::getBrokerageRule, brokerageDetail.getBrokerageRule()).eq(BaseEntity::getDeleted, Boolean.FALSE));
|
|
|
+ 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());
|
|
|
+ }else{
|
|
|
+ return landMarketerBrokerageHandler.managerSettle(x.getPaymentId(),x.getPaymentAmount(),item.getUserId(),x.getUserId(),postRatio.getBrokerageRatio());
|
|
|
+ }
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(variables)){
|
|
|
+ brokerageVariableService.saveBatch(variables);
|
|
|
+ }
|
|
|
+ BigDecimal sum = variables.stream().map(BrokerageVariable::getSettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ return sum;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<BrokerageSequenceVO> deduction(BrokerageSequenceVO brokerageSequenceVO) {
|
|
|
List<BrokerageSequenceVO> list = brokerageSequenceMapper.deduction(brokerageSequenceVO);
|