@@ -3,6 +3,7 @@ package com.buy507.mall.portal.service.impl;
import java.io.ByteArrayOutputStream ;
import java.io.InputStream ;
import java.math.BigDecimal ;
import java.math.RoundingMode ;
import java.net.URI ;
import java.nio.charset.Charset ;
import java.text.SimpleDateFormat ;
@@ -22,6 +23,7 @@ import com.buy507.mall.mapper.*;
import com.buy507.mall.model.* ;
import com.buy507.mall.portal.domain.* ;
import com.buy507.mall.portal.service.* ;
import lombok.extern.java.Log ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import org.springframework.beans.BeanUtils ;
@@ -1171,7 +1173,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
. andMemberIdEqualTo ( relationTree . getHigherLevelId ( ) ) ;
List < UmsMemberOrderQueue > upQueueList = umsMemberOrderQueueMapper . selectByExample ( orderQueueExample ) ;
//更新五连单中的上级订单,修改装备 为继续排队, 数量减去1
//更新五连单中的上级订单,修改订单 为继续排队, 数量减去1
if ( ! upQueueList . isEmpty ( ) ) {
UmsMemberOrderQueue upQueue = upQueueList . get ( 0 ) ;
upQueue . setQuitQueueMark ( UmsMemberOrderQueue . QUEUE_STATUS_WAIT ) ;
@@ -1305,6 +1307,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
history . setNote ( " 完成确认收货 " ) ;
orderOperateHistoryMapper . insert ( history ) ;
//更新会员为队列中
currentMember . setOrderStatus ( 1 ) ;
memberMapper . updateByPrimaryKeySelective ( currentMember ) ;
/**
* 开始计算会员提成比例
*/
@@ -1735,56 +1741,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
}
@Value ( " ${alipay.alipayPublicKey} " )
private String alipayPublicKey ;
@Value ( " ${alipay.charset} " )
private String charset ;
@Value ( " ${alipay.signType} " )
private String signType ;
@Value ( " ${becomeVipAmount} " )
private String becomeVipAmount ;
@Override
public void alipayCallback ( Map < String , String > params ) {
LOGGER . info ( " ============开始处理支付宝的支付异步通知 接收到参数 {} " , JSONUtil . toJsonStr ( params ) ) ;
// 验证签名
boolean verifyResult ;
try {
verifyResult = AlipaySignature . rsaCheckV1 ( params , alipayPublicKey , charset , signType ) ;
if ( verifyResult ) {
// 签名验证通过
String tradeStatus = params . get ( " trade_status " ) ;
String outTradeNo = params . get ( " out_trade_no " ) ;
if ( " TRADE_SUCCESS " . equals ( tradeStatus ) | | " TRADE_FINISHED " . equals ( tradeStatus ) ) {
// 处理支付成功的业务逻辑
OmsOrderExample example = new OmsOrderExample ( ) ;
example . createCriteria ( ) . andOrderSnEqualTo ( outTradeNo ) ;
List < OmsOrder > list = orderMapper . selectByExample ( example ) ;
if ( list ! = null & & list . size ( ) > 0 ) {
OmsOrder order = list . get ( 0 ) ;
//订单状态: 0->待付款; 1->待发货; 2->已发货; 3->已完成; 4->已关闭; 5->无效订单
if ( order ! = null & & order . getStatus ( ) = = 0 ) {
// 更新订单状态
this . updateOderAndMemberInfo ( order ) ;
}
}
}
}
} catch ( AlipayApiException e ) {
e . printStackTrace ( ) ;
}
}
/**
* 线程池处理逻辑
*/
@Override
public CommonResult accelerateOrder ( Long orderId ) {
OmsOrder order = orderMapper . selectByPrimaryKey ( orderId ) ;
@@ -1812,16 +1768,66 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
moq . setQueueType ( UmsMemberOrderQueue . QUEUE_TYPE_FAST ) ;
umsMemberOrderQueueMapper . updateByPrimaryKeySelective ( moq ) ;
}
//五单加速单验证
this . fiveQuickQueueBusiness ( currentMember ) ;
} ) ;
}
return CommonResult . success ( null ) ;
}
@Value ( " ${alipay.alipayPublicKey} " )
private String alipayPublicKey ;
@Value ( " ${alipay.charset} " )
private String charset ;
@Value ( " ${alipay.signType} " )
private String signType ;
@Value ( " ${becomeVipAmount} " )
private String becomeVipAmount ;
@Autowired
private UmsMemberLevelMapper umsMemberLevelMapper ;
@Override
public void alipayCallback ( Map < String , String > params ) {
LOGGER . info ( " ============开始处理支付宝的支付异步通知 接收到参数 {} " , JSONUtil . toJsonStr ( params ) ) ;
// 验证签名
boolean verifyResult ;
try {
verifyResult = AlipaySignature . rsaCheckV1 ( params , alipayPublicKey , charset , signType ) ;
if ( verifyResult ) {
// 签名验证通过
String tradeStatus = params . get ( " trade_status " ) ;
String outTradeNo = params . get ( " out_trade_no " ) ;
if ( " TRADE_SUCCESS " . equals ( tradeStatus ) | | " TRADE_FINISHED " . equals ( tradeStatus ) ) {
// 处理支付成功的业务逻辑
OmsOrderExample example = new OmsOrderExample ( ) ;
example . createCriteria ( ) . andOrderSnEqualTo ( outTradeNo ) ;
List < OmsOrder > list = orderMapper . selectByExample ( example ) ;
if ( list ! = null & & list . size ( ) > 0 ) {
OmsOrder order = list . get ( 0 ) ;
//订单状态: 0->待付款; 1->待发货; 2->已发货; 3->已完成; 4->已关闭; 5->无效订单
if ( order ! = null & & order . getStatus ( ) = = 0 ) {
/**
* 线程池处理逻辑
*/
executorService . submit ( ( ) - > {
// 更新订单状态及预计算分润
this . updateOderAndMemberInfo ( order ) ;
} ) ;
}
}
}
}
} catch ( AlipayApiException e ) {
e . printStackTrace ( ) ;
}
}
private void updateOderAndMemberInfo ( OmsOrder order ) {
@@ -1838,54 +1844,90 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
order . setPaymentTime ( date ) ;
orderMapper . updateByPrimaryKey ( order ) ;
//新增用户位普通用户, 订单支付成功后满一定金额, 成为vip普通会员
UmsMember member = memberMapper . selectByPrimaryKey ( order . getMemberId ( ) ) ;
//普通用户
if ( member . getMemberLevel ( ) . equals ( M emberLevel . Member ) ) {
/**
* 当前订单金额 大于等于 vip门槛金额
*/
if ( order . getPayAmount ( ) . compareTo ( new BigDecimal ( becomeVipAmount ) ) > = 0 ) {
member . setMemberLevel ( Memb erLevel. Consum er) ;
memberMapper . updateByPrimaryKey ( member ) ;
//订单加入队列
UmsMemberOrderQueueExample example = new UmsMemberOrderQueueExample ( ) ;
example . createCriteria ( ) . andQuitQueueMarkEqualTo ( UmsMemberOrderQueue . QUEUE_STATUS_WAIT )
. andQueueTypeEqualTo ( UmsMemberOrderQueue . QUEUE_TYPE_ORDINARY ) ;
long allQueue = umsMemberOrderQueueMapper . countByExample ( example ) ;
UmsMemberOrderQueue record = new UmsMemberOrderQueue ( ) ;
record . setOrderId ( order . getId ( ) ) ;
record . setMemberId ( member . getId ( ) ) ;
record . setOrderAmount ( order . getPayAmount ( ) ) ;
record . setQuitQueueMark ( UmsMemberOrderQueue . QUEUE_STATUS_WAIT ) ;
record . setQueueType ( UmsMemberOrderQueue . QUEUE_TYPE_ORDINARY ) ;
record . setQueueIndex ( + + allQueue ) ;
umsMemberOrderQueueMapper . insert ( record ) ;
}
//找到上级会员
UmsMember higherLevelMember = this . findInOrderQueueMember ( m ember. getId ( ) ) ; ;
/**
* 先验证该订单是否是五联单加速,如果不是则普通计算上级提成
* 如果是提成,则全额给上级
*/
boolean splitForFiveQueue = fiveQuickQueueBusiness ( high erLevelMemb er) ;
//未进行满5联单分润, 开始进行普通分润流程
if ( ! splitForFiveQueue & & higherLevelMember ! = null ) {
//进行订单分润
this . splitProfitFroMember ( member , higherLevelMember , order ) ;
}
}
/**
* 为订单上级进行分润
* @param member
* @param higherLevelMember
* @param order
*/
private void splitProfitFroMember ( UmsMember member , UmsMember higherLevelMember , OmsOrder order ) {
//新订单及直属上级分润,返回的分润金额
BigDecimal revenueAmount = this . newMemberSplitProfit ( member , higherLevelMember , order ) ;
UmsMember moreHigherMember ;
//如果上级是vip会员
if ( higherLevelMember . getMemberLevel ( ) . equals ( MemberLevel . Consumer ) ) {
moreHigherMember = this . findNextHigherLevelMemberByType ( higherLevelMember . getId ( ) , MemberLevel . Consumer ) ;
} else {
moreHigherMember = this . findInOrderQueueMember ( higherLevelMember . getId ( ) ) ;
}
//没有上级退出分润
if ( moreHigherMember = = null ) {
return ;
}
//给三个级别代理分润
this . threeLevelSplitProfit ( higherLevelMember , moreHigherMember , order , revenueAmount ) ;
this . fourLevelSplitProfit ( higherLevelMember , moreHigherMember , order , revenueAmount ) ;
this . fiveLevelSplitProfit ( higherLevelMember , moreHigherMember , order , revenueAmount ) ;
}
/**
* 查询到下一个级别的上级会员
* @param id
* @param consumer
* @return
*/
private UmsMember findNextHigherLevelMemberByType ( Long id , MemberLevel consumer ) {
//找到上级
UmsMember moreHigherMember = this . findInOrderQueueMember ( id ) ;
if ( moreHigherMember = = null ) {
return null ;
} else {
while ( moreHigherMember . getMemberLevel ( ) . equals ( consumer ) ) {
moreHigherMember = this . findInOrderQueueMember ( moreHigherMember . getId ( ) ) ;
if ( moreHigherMember = = null ) {
return null ;
}
}
}
return moreHigherMember ;
}
/***
* 五联单排队分红逻辑,该订单支付后处理
**/
private void fiveQuickQueueBusiness ( UmsMember current Member) {
//查看该订单所属上级是否开启了加速5连单
UmsMemberRelationTreeExample relationTreeExample = new UmsMemberRelationTreeExample ( ) ;
relationTreeExample . createCriteria ( ) . andMemberIdEqualTo ( currentMember . getId ( ) ) ;
List < UmsMemberRelationTree > relationTreeList = umsMemberRelationTreeMapper . selectByExample ( relationTreeExample ) ;
if ( ! relationTreeList . isEmpty ( ) ) {
//找到上级关系
UmsMemberRelationTree relationTree = relationTreeList . get ( 0 ) ;
private boolean fiveQuickQueueBusiness ( UmsMember higherLevel Member) {
//分润标识
boolean splitMark = false ;
if ( higherLevelMember ! = null ) {
//订单加入队列
UmsMemberOrderQueueExample orderQueueExample = new UmsMemberOrderQueueExample ( ) ;
orderQueueExample . createCriteria ( )
. andQuitQueueMarkEqualTo ( UmsMemberOrderQueue . QUEUE_STATUS_WAIT )
. andQueueTypeEqualTo ( UmsMemberOrderQueue . QUEUE_TYPE_FAST )
. andMemberIdEqualTo ( relationTree . getHigherLevel Id( ) ) ;
. andMemberIdEqualTo ( higherLevelMember . get Id( ) ) ;
List < UmsMemberOrderQueue > orderQueueList = umsMemberOrderQueueMapper . selectByExample ( orderQueueExample ) ;
//上级订单队列中是否有加速5联单
@@ -1895,17 +1937,18 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
//没有加速满5单
umoq . setRemainNumber ( 1 + umoq . getRemainNumber ( ) ) ;
umsMemberOrderQueueMapper . updateByPrimaryKeySelective ( umoq ) ;
} else {
//设置本单待退出, 且5单满24小时未退款
umoq . setQuitQueueMark ( UmsMemberOrderQueue . QUEUE_PREPARE_QUIT ) ;
//冻结上级会费的冻结金额
UmsMember higherMember = memberMapper . selectByPrimaryKey ( umoq . getMemberId ( ) ) ;
//订单金额加入冻结余额
BigDecimal freeze = higherMember . getFreeze ( ) ;
BigDecimal freeze = higherLevel Member . getFreeze ( ) ;
BigDecimal orderAmount = umoq . getOrderAmount ( ) ;
higherMember . setFreeze ( freeze . add ( orderAmount ) ) ;
higherLevel Member . setFreeze ( freeze . add ( orderAmount ) ) ;
//更新数据库
memberMapper . updateByPrimaryKeySelective ( higherMember ) ;
memberMapper . updateByPrimaryKeySelective ( higherLevel Member ) ;
umsMemberOrderQueueMapper . updateByPrimaryKeySelective ( umoq ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
@@ -1916,12 +1959,302 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
splitMark = true ;
}
}
}
return splitMark ;
}
/**
* 会员分润
* @param currentMember
* @param higherLevelMember
* @param order
*/
private BigDecimal newMemberSplitProfit ( UmsMember currentMember , UmsMember higherLevelMember , OmsOrder order ) {
/**
* 新增用户位普通用户, 订单支付成功后满一定金额, 成为vip普通会员
* 当前订单金额 大于等于 vip门槛金额
*/
if ( currentMember . getMemberLevel ( ) . equals ( MemberLevel . Member ) & &
order . getPayAmount ( ) . compareTo ( new BigDecimal ( becomeVipAmount ) ) > = 0 ) {
LOGGER . info ( " new order member {} " , JSONUtil . toJsonStr ( currentMember ) ) ;
currentMember . setMemberLevel ( MemberLevel . Consumer ) ;
memberMapper . updateByPrimaryKey ( currentMember ) ;
//订单加入队列
UmsMemberOrderQueueExample example = new UmsMemberOrderQueueExample ( ) ;
example . createCriteria ( ) . andQuitQueueMarkEqualTo ( UmsMemberOrderQueue . QUEUE_STATUS_WAIT )
. andQueueTypeEqualTo ( UmsMemberOrderQueue . QUEUE_TYPE_ORDINARY ) ;
long allQueue = umsMemberOrderQueueMapper . countByExample ( example ) ;
UmsMemberOrderQueue record = new UmsMemberOrderQueue ( ) ;
record . setOrderId ( order . getId ( ) ) ;
record . setMemberId ( currentMember . getId ( ) ) ;
record . setOrderAmount ( order . getPayAmount ( ) ) ;
record . setQuitQueueMark ( UmsMemberOrderQueue . QUEUE_STATUS_WAIT ) ;
record . setQueueType ( UmsMemberOrderQueue . QUEUE_TYPE_ORDINARY ) ;
record . setQueueIndex ( + + allQueue ) ;
umsMemberOrderQueueMapper . insert ( record ) ;
LOGGER . info ( " new Order Queue {} " , JSONUtil . toJsonStr ( record ) ) ;
}
UmsMemberLevel higherLevel = umsMemberLevelMapper . selectByPrimaryKey ( higherLevelMember . getMemberLevelId ( ) ) ;
//直推会员分润
String ratio = " 0. " + higherLevel . getCommissionRatio ( ) ;
BigDecimal revenueAmount = order . getPayAmount ( ) . multiply ( new BigDecimal ( ratio ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( 10 ) ;
accountTransaction . setMemberId ( higherLevelMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 直推会员分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( revenueAmount ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
LOGGER . info ( " new Account Transaction {} " , JSONUtil . toJsonStr ( accountTransaction ) ) ;
return revenueAmount ;
}
/**
* 三级店长分润
* @param lowerMember
* @param higherMember
* @param order
*/
private void threeLevelSplitProfit ( UmsMember lowerMember , UmsMember higherMember , OmsOrder order ,
BigDecimal revenueAmount ) {
if ( higherMember . getMemberLevel ( ) . equals ( MemberLevel . Partner ) ) {
//上下级关系
if ( higherMember . getMemberLevel ( ) . getValue ( ) > lowerMember . getMemberLevel ( ) . getValue ( ) ) {
UmsMemberLevel lowerLevel = umsMemberLevelMapper . selectByPrimaryKey ( lowerMember . getMemberLevelId ( ) ) ;
UmsMemberLevel higherLevel = umsMemberLevelMapper . selectByPrimaryKey ( higherMember . getMemberLevelId ( ) ) ;
Integer profitRatio = 0 ;
if ( higherLevel . getCommissionRatio ( ) ! = null & & lowerLevel . getCommissionRatio ( ) ! = null ) {
profitRatio = higherLevel . getCommissionRatio ( ) - lowerLevel . getCommissionRatio ( ) ;
}
//查看上级的分润比例
BigDecimal tenPercent = order . getPayAmount ( ) . multiply ( new BigDecimal ( " 0. " + profitRatio ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( profitRatio ) ;
accountTransaction . setMemberId ( higherMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 三级店长上级分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( tenPercent ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
//查询上级
UmsMember next = this . findInOrderQueueMember ( higherMember . getId ( ) ) ;
if ( next ! = null ) {
if ( next . getMemberLevel ( ) . equals ( higherMember . getMemberLevel ( ) ) ) {
threeLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
} else {
fourLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
}
}
//平级关系
} else if ( lowerMember . getMemberLevel ( ) . equals ( lowerMember . getMemberLevel ( ) ) ) {
BigDecimal tenPercent = revenueAmount . multiply ( new BigDecimal ( " 0.10 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( 10 ) ;
accountTransaction . setMemberId ( higherMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 三级店长平级分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( tenPercent ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
UmsMember next = this . findNextHigherLevelMemberByType ( higherMember . getId ( ) , MemberLevel . Diamond ) ;
if ( next ! = null ) {
fourLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
}
}
}
}
/**
* 四级代理分润
* @param lowerMember
* @param higherMember
* @param order
*/
private void fourLevelSplitProfit ( UmsMember lowerMember , UmsMember higherMember , OmsOrder order , BigDecimal revenueAmount ) {
if ( higherMember . getMemberLevel ( ) . equals ( MemberLevel . Diamond ) ) {
//上下级关系
if ( higherMember . getMemberLevel ( ) . getValue ( ) > lowerMember . getMemberLevel ( ) . getValue ( ) ) {
UmsMemberLevel lowerLevel = umsMemberLevelMapper . selectByPrimaryKey ( lowerMember . getMemberLevelId ( ) ) ;
UmsMemberLevel higherLevel = umsMemberLevelMapper . selectByPrimaryKey ( higherMember . getMemberLevelId ( ) ) ;
Integer profitRatio = 0 ;
if ( higherLevel . getCommissionRatio ( ) ! = null & & lowerLevel . getCommissionRatio ( ) ! = null ) {
profitRatio = higherLevel . getCommissionRatio ( ) - lowerLevel . getCommissionRatio ( ) ;
}
//查看上级的分润比例
BigDecimal tenPercent = order . getPayAmount ( ) . multiply ( new BigDecimal ( " 0. " + profitRatio ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( profitRatio ) ;
accountTransaction . setMemberId ( higherMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 四级代理分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( tenPercent ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
//查询上级
UmsMember next = this . findInOrderQueueMember ( higherMember . getId ( ) ) ;
if ( next ! = null ) {
if ( next . getMemberLevel ( ) . equals ( higherMember . getMemberLevel ( ) ) ) {
fourLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
} else {
fiveLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
}
}
//平级关系
} else if ( lowerMember . getMemberLevel ( ) . equals ( lowerMember . getMemberLevel ( ) ) ) {
BigDecimal tenPercent = revenueAmount . multiply ( new BigDecimal ( " 0.10 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( 10 ) ;
accountTransaction . setMemberId ( higherMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 三级店长平级分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( tenPercent ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
UmsMember next = this . findNextHigherLevelMemberByType ( higherMember . getId ( ) , MemberLevel . OneDiamond ) ;
if ( next ! = null ) {
fiveLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
}
}
}
}
/**
* 五级市代分润
* @param lowerMember
* @param higherMember
* @param order
*/
private void fiveLevelSplitProfit ( UmsMember lowerMember , UmsMember higherMember , OmsOrder order , BigDecimal revenueAmount ) {
if ( higherMember . getMemberLevel ( ) . equals ( MemberLevel . OneDiamond ) ) {
//上下级关系
if ( higherMember . getMemberLevel ( ) . getValue ( ) > lowerMember . getMemberLevel ( ) . getValue ( ) ) {
UmsMemberLevel lowerLevel = umsMemberLevelMapper . selectByPrimaryKey ( lowerMember . getMemberLevelId ( ) ) ;
UmsMemberLevel higherLevel = umsMemberLevelMapper . selectByPrimaryKey ( higherMember . getMemberLevelId ( ) ) ;
Integer profitRatio = 0 ;
if ( higherLevel . getCommissionRatio ( ) ! = null & & lowerLevel . getCommissionRatio ( ) ! = null ) {
profitRatio = higherLevel . getCommissionRatio ( ) - lowerLevel . getCommissionRatio ( ) ;
}
//查看上级的分润比例
BigDecimal tenPercent = order . getPayAmount ( ) . multiply ( new BigDecimal ( " 0. " + profitRatio ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( profitRatio ) ;
accountTransaction . setMemberId ( higherMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 四级代理分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( tenPercent ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
//查询上级
UmsMember next = this . findInOrderQueueMember ( higherMember . getId ( ) ) ;
if ( next ! = null & & next . getMemberLevel ( ) . equals ( higherMember . getMemberLevel ( ) ) ) {
fiveLevelSplitProfit ( higherMember , next , order , revenueAmount ) ;
}
//平级关系
} else if ( lowerMember . getMemberLevel ( ) . equals ( lowerMember . getMemberLevel ( ) ) ) {
BigDecimal tenPercent = revenueAmount . multiply ( new BigDecimal ( " 0.10 " ) ) . setScale ( 2 , RoundingMode . HALF_UP ) ;
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction ( ) ;
accountTransaction . setCommissionRatio ( 10 ) ;
accountTransaction . setMemberId ( higherMember . getId ( ) ) ;
accountTransaction . setOrderId ( order . getId ( ) ) ;
accountTransaction . setRemarks ( " 三级店长平级分润 " ) ;
accountTransaction . setTransactionState ( UmsMemberAccountTransaction . TRANSACTION_STATE_NO ) ;
accountTransaction . setRevenueAmount ( tenPercent ) ;
//24小时后到账
accountTransaction . setTransferPaymentTime ( DateUtil . tomorrow ( ) ) ;
umsMemberAccountTransactionMapper . insert ( accountTransaction ) ;
}
}
}
/**
* 寻找上级且在队列中,未在队列且返回null
*/
private UmsMember findInOrderQueueMember ( Long id ) {
UmsMemberRelationTree relationTree = this . getUpLevelRelationTreeById ( id ) ;
UmsMember higherMember = memberMapper . selectByPrimaryKey ( relationTree . getMemberId ( ) ) ;
if ( higherMember = = null ) {
return null ;
}
if ( higherMember . getOrderStatus ( ) = = 0 ) {
UmsMember nextMember = this . findInOrderQueueMember ( higherMember . getId ( ) ) ;
if ( nextMember ! = null ) {
return nextMember ;
}
} else if ( higherMember . getOrderStatus ( ) = = 1 ) {
return higherMember ;
}
return null ;
}
private UmsMemberRelationTree getUpLevelRelationTreeById ( Long id ) {
UmsMemberRelationTree relationTree = null ;
UmsMemberRelationTreeExample relationTreeExample = new UmsMemberRelationTreeExample ( ) ;
relationTreeExample . createCriteria ( ) . andMemberIdEqualTo ( id ) ;
List < UmsMemberRelationTree > relationTreeList = umsMemberRelationTreeMapper . selectByExample ( relationTreeExample ) ;
if ( ! relationTreeList . isEmpty ( ) ) {
//找到上级关系
relationTree = relationTreeList . get ( 0 ) ;
}
return relationTree ;
}
}