Merge remote-tracking branch 'origin/main-zhb'
# Conflicts: # mall-portal/src/main/java/com/buy507/mall/portal/service/impl/OmsPortalOrderServiceImpl.java
This commit is contained in:
@@ -13,4 +13,6 @@ public interface UmsMemberLevelService {
|
||||
* @param defaultStatus 是否为默认会员
|
||||
*/
|
||||
List<UmsMemberLevel> list(Integer defaultStatus);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.buy507.mall.model.UmsMemberRelationTree;
|
||||
import com.buy507.mall.model.UmsMemberRelationTreeExample;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
public interface UmsMemberRelationTreeMapper {
|
||||
long countByExample(UmsMemberRelationTreeExample example);
|
||||
@@ -27,4 +28,7 @@ public interface UmsMemberRelationTreeMapper {
|
||||
int updateByPrimaryKeySelective(UmsMemberRelationTree record);
|
||||
|
||||
int updateByPrimaryKey(UmsMemberRelationTree record);
|
||||
|
||||
@Select("select * from ums_member_relation_tree where member_id = #{currentUserId}")
|
||||
UmsMemberRelationTree findByMemberId(Long currentUserId);
|
||||
}
|
||||
@@ -7,15 +7,16 @@ package com.buy507.mall.model;
|
||||
*/
|
||||
public enum MemberLevel {
|
||||
/**普通用户**/
|
||||
Member(0),
|
||||
Member(1),
|
||||
/**vip会员**/
|
||||
Consumer(1),
|
||||
Consumer(2),
|
||||
/**店长**/
|
||||
Partner(2),
|
||||
Partner(3),
|
||||
/**代理**/
|
||||
Diamond(3),
|
||||
Diamond(4),
|
||||
/** 市代 **/
|
||||
OneDiamond(4),
|
||||
OneDiamond(5),
|
||||
|
||||
TwoDiamond(6), //中级合作商
|
||||
ThreeDiamond(7), //高级合作商
|
||||
FourDiamond(8); //特级合作商
|
||||
|
||||
@@ -68,29 +68,18 @@ public class UmsMember implements Serializable {
|
||||
@ApiModelProperty(value = "分销实体店状态(0->未开店;1->已开店)")
|
||||
private StoreStatus storeStatus;
|
||||
|
||||
/**
|
||||
* 余额
|
||||
*/
|
||||
@ApiModelProperty(value = "余额")
|
||||
private BigDecimal balance;
|
||||
|
||||
/**
|
||||
* 冻结余额
|
||||
*/
|
||||
@ApiModelProperty(value = "冻结余额")
|
||||
private BigDecimal freeze;
|
||||
|
||||
/**
|
||||
* 详细地址
|
||||
*/
|
||||
@ApiModelProperty(value = "详细地址")
|
||||
private String detailAddress;
|
||||
|
||||
/**
|
||||
* 真实姓名
|
||||
*/
|
||||
@ApiModelProperty(value = "真实姓名")
|
||||
private String realName;
|
||||
|
||||
/**
|
||||
* 排队状态
|
||||
*/
|
||||
@ApiModelProperty(value = "排队状态:0->未排队;1->排队中")
|
||||
private Integer orderStatus;
|
||||
|
||||
|
||||
@@ -41,6 +41,9 @@ public class UmsMemberAccountTransaction implements Serializable {
|
||||
@ApiModelProperty(value = "转账时间")
|
||||
private Date transferPaymentTime;
|
||||
|
||||
@ApiModelProperty(value = "进账积分")
|
||||
private Integer revenuePoints;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Long getId() {
|
||||
@@ -83,6 +86,14 @@ public class UmsMemberAccountTransaction implements Serializable {
|
||||
this.transactionState = transactionState;
|
||||
}
|
||||
|
||||
public Integer getRevenuePoints() {
|
||||
return revenuePoints;
|
||||
}
|
||||
|
||||
public void setRevenuePoints(Integer revenuePoints) {
|
||||
this.revenuePoints = revenuePoints;
|
||||
}
|
||||
|
||||
public String getRemarks() {
|
||||
return remarks;
|
||||
}
|
||||
@@ -117,21 +128,17 @@ public class UmsMemberAccountTransaction implements Serializable {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getClass().getSimpleName());
|
||||
sb.append(" [");
|
||||
sb.append("Hash = ").append(hashCode());
|
||||
sb.append(", id=").append(id);
|
||||
sb.append(", memberId=").append(memberId);
|
||||
sb.append(", orderId=").append(orderId);
|
||||
sb.append(", revenueAmount=").append(revenueAmount);
|
||||
sb.append(", transactionState=").append(transactionState);
|
||||
sb.append(", remarks=").append(remarks);
|
||||
sb.append(", commissionRatio=").append(commissionRatio);
|
||||
sb.append(", createTime=").append(createTime);
|
||||
sb.append(", transferPaymentTime=").append(transferPaymentTime);
|
||||
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
return "UmsMemberAccountTransaction{" +
|
||||
"id=" + id +
|
||||
", memberId=" + memberId +
|
||||
", orderId=" + orderId +
|
||||
", revenueAmount=" + revenueAmount +
|
||||
", transactionState=" + transactionState +
|
||||
", remarks='" + remarks + '\'' +
|
||||
", commissionRatio=" + commissionRatio +
|
||||
", createTime=" + createTime +
|
||||
", transferPaymentTime=" + transferPaymentTime +
|
||||
", revenuePoints=" + revenuePoints +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.buy507.mall.model;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@@ -44,9 +45,12 @@ public class UmsMemberLevel implements Serializable {
|
||||
@ApiModelProperty(value = "注释")
|
||||
private String note;
|
||||
|
||||
@ApiModelProperty(value = "提成比例")
|
||||
@ApiModelProperty(value = "现金提成比例")
|
||||
private Integer commissionRatio;
|
||||
|
||||
@ApiModelProperty(value = "积分提成比例")
|
||||
private Integer pointsRatio;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Long getId() {
|
||||
@@ -161,28 +165,32 @@ public class UmsMemberLevel implements Serializable {
|
||||
this.commissionRatio = commissionRatio;
|
||||
}
|
||||
|
||||
public Integer getPointsRatio() {
|
||||
return pointsRatio;
|
||||
}
|
||||
|
||||
public void setPointsRatio(Integer pointsRatio) {
|
||||
this.pointsRatio = pointsRatio;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getClass().getSimpleName());
|
||||
sb.append(" [");
|
||||
sb.append("Hash = ").append(hashCode());
|
||||
sb.append(", id=").append(id);
|
||||
sb.append(", name=").append(name);
|
||||
sb.append(", growthPoint=").append(growthPoint);
|
||||
sb.append(", defaultStatus=").append(defaultStatus);
|
||||
sb.append(", freeFreightPoint=").append(freeFreightPoint);
|
||||
sb.append(", commentGrowthPoint=").append(commentGrowthPoint);
|
||||
sb.append(", priviledgeFreeFreight=").append(priviledgeFreeFreight);
|
||||
sb.append(", priviledgeSignIn=").append(priviledgeSignIn);
|
||||
sb.append(", priviledgeComment=").append(priviledgeComment);
|
||||
sb.append(", priviledgePromotion=").append(priviledgePromotion);
|
||||
sb.append(", priviledgeMemberPrice=").append(priviledgeMemberPrice);
|
||||
sb.append(", priviledgeBirthday=").append(priviledgeBirthday);
|
||||
sb.append(", note=").append(note);
|
||||
sb.append(", commissionRatio=").append(commissionRatio);
|
||||
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
return "UmsMemberLevel{" +
|
||||
"id=" + id +
|
||||
", name='" + name + '\'' +
|
||||
", growthPoint=" + growthPoint +
|
||||
", defaultStatus=" + defaultStatus +
|
||||
", freeFreightPoint=" + freeFreightPoint +
|
||||
", commentGrowthPoint=" + commentGrowthPoint +
|
||||
", priviledgeFreeFreight=" + priviledgeFreeFreight +
|
||||
", priviledgeSignIn=" + priviledgeSignIn +
|
||||
", priviledgeComment=" + priviledgeComment +
|
||||
", priviledgePromotion=" + priviledgePromotion +
|
||||
", priviledgeMemberPrice=" + priviledgeMemberPrice +
|
||||
", priviledgeBirthday=" + priviledgeBirthday +
|
||||
", note='" + note + '\'' +
|
||||
", commissionRatio=" + commissionRatio +
|
||||
", pointsRatio=" + pointsRatio +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -109,10 +109,10 @@
|
||||
SELECT LAST_INSERT_ID()
|
||||
</selectKey>
|
||||
insert into ums_member_account_transaction (member_id, order_id, revenue_amount,
|
||||
transaction_state, remarks, commission_ratio, transfer_payment_time)
|
||||
transaction_state, remarks, commission_ratio, transfer_payment_time, revenue_points)
|
||||
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{revenueAmount,jdbcType=DECIMAL},
|
||||
#{transactionState,jdbcType=INTEGER}, #{remarks,jdbcType=VARCHAR}, #{commissionRatio,jdbcType=INTEGER},
|
||||
#{transferPaymentTime,jdbcType=TIMESTAMP})
|
||||
#{transferPaymentTime,jdbcType=TIMESTAMP}, #{revenuePoints,jdbcType=INTEGER})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberAccountTransaction">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||
|
||||
@@ -41,7 +41,7 @@ public class OrderResult {
|
||||
@ApiModelProperty(value = "支付时间")
|
||||
private Date paymentTime;
|
||||
|
||||
@ApiModelProperty(value = "支付类型: 1->支付宝;2->微信;3->线下支付;4->积分支付")
|
||||
@ApiModelProperty(value = "支付类型: 1->支付宝;2->微信;3->线下支付;4->积分支付; 5->余额支付")
|
||||
private Integer payType;
|
||||
|
||||
@ApiModelProperty(value = "支付类型名称")
|
||||
|
||||
@@ -9,7 +9,6 @@ import com.buy507.mall.model.UmsMember;
|
||||
public interface MemberCommissionService {
|
||||
/**
|
||||
* 开始冻结金额到账,等级升级
|
||||
* @param order
|
||||
* @param currentMember
|
||||
*/
|
||||
void computeCommission(UmsMember currentMember);
|
||||
|
||||
@@ -0,0 +1,403 @@
|
||||
package com.buy507.mall.portal.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.buy507.mall.mapper.*;
|
||||
import com.buy507.mall.model.*;
|
||||
import com.buy507.mall.portal.service.MemberCommissionService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MemberPointsSplitProfitService{
|
||||
|
||||
@Resource
|
||||
private UmsMemberMapper memberMapper;
|
||||
/**
|
||||
* 会员分成流水
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberAccountTransactionMapper umsMemberAccountTransactionMapper;
|
||||
|
||||
/**
|
||||
* 会员上下关系
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberRelationTreeMapper umsMemberRelationTreeMapper;
|
||||
/**
|
||||
* 会员等级
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberLevelMapper umsMemberLevelMapper;
|
||||
|
||||
@Autowired
|
||||
private OmsOrderMapper orderMapper;
|
||||
|
||||
@Value("${becomeVipAmount}")
|
||||
private String becomeVipAmount;
|
||||
|
||||
@Value("${sameLevelProfit}")
|
||||
private String sameLevelProfit;
|
||||
|
||||
/**
|
||||
* 积分分润入口
|
||||
* @param order
|
||||
*/
|
||||
public void pointsSplit(OmsOrder order) {
|
||||
|
||||
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
|
||||
//找到上级会员
|
||||
UmsMember higherLevelMember = this.findInOrderQueueMember(member.getId());;
|
||||
if(higherLevelMember != null){
|
||||
//进行订单分润
|
||||
this.splitProfitFroMember(member, higherLevelMember, order);
|
||||
}
|
||||
//计算会员等级
|
||||
UmsMemberRelationTree relationTree = this.getUpLevelRelationTreeById(member.getId());
|
||||
if(relationTree == null){
|
||||
return;
|
||||
}
|
||||
//上级为空或者为普通用户
|
||||
UmsMember higherMember = memberMapper.selectByPrimaryKey(relationTree.getHigherLevelId());
|
||||
if(higherMember == null && higherMember.getMemberLevel().equals(MemberLevel.Member)){
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 为订单上级进行分润
|
||||
* @param member
|
||||
* @param higherLevelMember
|
||||
* @param order
|
||||
*/
|
||||
private void splitProfitFroMember(UmsMember member, UmsMember higherLevelMember, OmsOrder order) {
|
||||
|
||||
//新订单及直属上级分润,返回的分润金额
|
||||
Integer revenuePoints = this.newMemberSplitProfit(member, higherLevelMember, order);
|
||||
|
||||
UmsMember moreHigherMember = new UmsMember();
|
||||
//如果上级是vip会员
|
||||
if(higherLevelMember.getMemberLevel().equals(MemberLevel.Consumer)) {
|
||||
moreHigherMember = this.findNextHigherLevelMemberByType(higherLevelMember.getId(), MemberLevel.Consumer);
|
||||
}
|
||||
//没有更高的上级退出分润
|
||||
if(moreHigherMember == null){
|
||||
return;
|
||||
}
|
||||
//给三个级别代理分润
|
||||
this.twoLevelSplitProfit(higherLevelMember, moreHigherMember, order, revenuePoints);
|
||||
|
||||
this.threeLevelSplitProfit(higherLevelMember, moreHigherMember, order, revenuePoints);
|
||||
|
||||
this.fourLevelSplitProfit(higherLevelMember, moreHigherMember, order, revenuePoints);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询到下一个级别的上级会员
|
||||
* @param id
|
||||
* @param consumer
|
||||
* @return
|
||||
*/
|
||||
private UmsMember findNextHigherLevelMemberByType(Long id, MemberLevel consumer) {
|
||||
//找到上级
|
||||
UmsMember moreHigherMember = this.findInOrderQueueMember(id);
|
||||
if(moreHigherMember == null){
|
||||
return null;
|
||||
}
|
||||
while (moreHigherMember != null){
|
||||
if(moreHigherMember.getMemberLevel().getValue() > consumer.getValue()){
|
||||
return moreHigherMember;
|
||||
}
|
||||
moreHigherMember = this.findInOrderQueueMember(moreHigherMember.getId());
|
||||
if(moreHigherMember == null){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return moreHigherMember;
|
||||
}
|
||||
|
||||
/**
|
||||
* 寻找上级
|
||||
*/
|
||||
private UmsMember findInOrderQueueMember(Long id) {
|
||||
UmsMemberRelationTree relationTree = this.getUpLevelRelationTreeById(id);
|
||||
if(relationTree == null){
|
||||
return null;
|
||||
}
|
||||
UmsMember higherMember = memberMapper.selectByPrimaryKey(relationTree.getHigherLevelId());
|
||||
if(higherMember == null){
|
||||
return null;
|
||||
}
|
||||
return higherMember;
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员分润
|
||||
* @param currentMember
|
||||
* @param higherLevelMember
|
||||
* @param order
|
||||
*/
|
||||
private Integer newMemberSplitProfit(UmsMember currentMember, UmsMember higherLevelMember, OmsOrder order){
|
||||
|
||||
//直推会员分润比例
|
||||
String ratio = "0."+ 3;
|
||||
|
||||
Integer revenuePoints = order.getPayAmount().multiply(new BigDecimal(ratio)).intValue();
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setMemberId(higherLevelMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("直推VIP积分分润");
|
||||
accountTransaction.setTransactionState(UmsMemberAccountTransaction.TRANSACTION_STATE_YES);
|
||||
accountTransaction.setRevenuePoints(revenuePoints);
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.date());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
log.info("new Account Transaction {}" , JSONUtil.toJsonStr(accountTransaction));
|
||||
|
||||
//会员积分到账
|
||||
higherLevelMember.setIntegration(revenuePoints + (higherLevelMember.getIntegration() == null ? 0 : higherLevelMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKey(higherLevelMember);
|
||||
|
||||
|
||||
return revenuePoints;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二级店长分润
|
||||
* @param lowerMember
|
||||
* @param higherMember
|
||||
* @param order
|
||||
*/
|
||||
private void twoLevelSplitProfit(UmsMember lowerMember, UmsMember higherMember, OmsOrder order,
|
||||
Integer revenuePoints){
|
||||
//先判断是否为店长
|
||||
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.getPointsRatio() != null && lowerLevel.getPointsRatio() != null){
|
||||
profitRatio = higherLevel.getPointsRatio() - lowerLevel.getPointsRatio();
|
||||
}
|
||||
String ratioStr = profitRatio < 10 ? "0.0" + profitRatio : "0."+profitRatio;
|
||||
//计算上级的分积分分润
|
||||
Integer pointsCommission = order.getPayAmount().multiply(new BigDecimal(ratioStr)).intValue();
|
||||
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(profitRatio);
|
||||
accountTransaction.setMemberId(higherMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("二级店长上级积分分润");
|
||||
accountTransaction.setRevenuePoints(pointsCommission);
|
||||
//即时到账
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.date());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
|
||||
//会员金额到账
|
||||
higherMember.setIntegration(pointsCommission + (higherMember.getIntegration() == null ? 0 : higherMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
//查询上级
|
||||
UmsMember next = this.findInOrderQueueMember(higherMember.getId());
|
||||
|
||||
if(next != null){
|
||||
if (next.getMemberLevel().equals(higherMember.getMemberLevel())){
|
||||
twoLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}else {
|
||||
threeLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
fourLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}
|
||||
}
|
||||
//平级关系
|
||||
}else if(lowerMember.getMemberLevel().equals(lowerMember.getMemberLevel())){
|
||||
Integer pointsCommission = revenuePoints * (new BigDecimal("0."+sameLevelProfit)).intValue();
|
||||
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(Integer.valueOf(sameLevelProfit));
|
||||
accountTransaction.setMemberId(higherMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("二级店长平级积分分润");
|
||||
accountTransaction.setRevenuePoints(pointsCommission);
|
||||
//即时到账
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.date());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
|
||||
//会员金额到账
|
||||
higherMember.setIntegration(pointsCommission + (higherMember.getIntegration() == null ? 0 : higherMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
//查询比当前级别大的会员
|
||||
UmsMember next = this.findNextHigherLevelMemberByType(higherMember.getId(), MemberLevel.Partner);
|
||||
if(next != null){
|
||||
threeLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
fourLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 三级代理分润
|
||||
* @param lowerMember
|
||||
* @param higherMember
|
||||
* @param order
|
||||
*/
|
||||
private void threeLevelSplitProfit(UmsMember lowerMember, UmsMember higherMember, OmsOrder order, Integer revenuePoints){
|
||||
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.getPointsRatio() != null && lowerLevel.getPointsRatio() != null){
|
||||
profitRatio = higherLevel.getPointsRatio() - lowerLevel.getPointsRatio();
|
||||
}
|
||||
|
||||
String ratioStr = profitRatio < 10 ? "0.0" + profitRatio : "0."+profitRatio;
|
||||
//计算上级的分积分分润
|
||||
Integer pointsCommission = order.getPayAmount().multiply(new BigDecimal(ratioStr)).intValue();
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(profitRatio);
|
||||
accountTransaction.setMemberId(higherMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("三级代理上级积分分润");
|
||||
accountTransaction.setRevenuePoints(pointsCommission);
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.date());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
|
||||
//会员金额到账
|
||||
higherMember.setIntegration(pointsCommission + (higherMember.getIntegration() == null ? 0 : higherMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
//查询上级
|
||||
UmsMember next = this.findInOrderQueueMember(higherMember.getId());
|
||||
|
||||
if(next != null){
|
||||
if (next.getMemberLevel().equals(higherMember.getMemberLevel())){
|
||||
threeLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}else {
|
||||
fourLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}
|
||||
}
|
||||
//平级关系
|
||||
}else if(lowerMember.getMemberLevel().equals(lowerMember.getMemberLevel())){
|
||||
Integer pointsCommission = revenuePoints * (new BigDecimal("0."+sameLevelProfit)).intValue();
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(Integer.valueOf(sameLevelProfit));
|
||||
accountTransaction.setMemberId(higherMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("三级代理平级积分分润");
|
||||
accountTransaction.setRevenuePoints(pointsCommission);
|
||||
//24小时后到账
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.tomorrow());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
|
||||
//会员金额到账
|
||||
higherMember.setIntegration(pointsCommission + (higherMember.getIntegration() == null ? 0 : higherMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
UmsMember next = this.findNextHigherLevelMemberByType(higherMember.getId(), MemberLevel.Diamond);
|
||||
if(next != null){
|
||||
fourLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* 四级市代分润
|
||||
* @param lowerMember
|
||||
* @param higherMember
|
||||
* @param order
|
||||
*/
|
||||
private void fourLevelSplitProfit(UmsMember lowerMember, UmsMember higherMember, OmsOrder order, Integer revenuePoints){
|
||||
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.getPointsRatio() != null && lowerLevel.getPointsRatio() != null){
|
||||
profitRatio = higherLevel.getPointsRatio() - lowerLevel.getPointsRatio();
|
||||
}
|
||||
String ratioStr = profitRatio < 10 ? "0.0" + profitRatio : "0."+profitRatio;
|
||||
//计算上级的分积分分润
|
||||
Integer pointsCommission = order.getPayAmount().multiply(new BigDecimal(ratioStr)).intValue();
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(profitRatio);
|
||||
accountTransaction.setMemberId(higherMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("四级市代理上级积分分润");
|
||||
accountTransaction.setRevenuePoints(pointsCommission);
|
||||
//24小时后到账
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.date());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
|
||||
//会员金额到账
|
||||
higherMember.setIntegration(pointsCommission + (higherMember.getIntegration() == null ? 0 : higherMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
//查询上级
|
||||
UmsMember next = this.findInOrderQueueMember(higherMember.getId());
|
||||
|
||||
if(next != null && next.getMemberLevel().equals(higherMember.getMemberLevel())){
|
||||
fourLevelSplitProfit(higherMember, next, order, pointsCommission);
|
||||
}
|
||||
//平级关系
|
||||
}else if(lowerMember.getMemberLevel().equals(lowerMember.getMemberLevel())){
|
||||
Integer pointsCommission = revenuePoints * (new BigDecimal("0."+sameLevelProfit)).intValue();
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(Integer.valueOf(sameLevelProfit));
|
||||
accountTransaction.setMemberId(higherMember.getId());
|
||||
accountTransaction.setOrderId(order.getId());
|
||||
accountTransaction.setRemarks("四级市代理平级积分分润");
|
||||
accountTransaction.setRevenuePoints(pointsCommission);
|
||||
|
||||
//会员金额到账
|
||||
higherMember.setIntegration(pointsCommission + (higherMember.getIntegration() == null ? 0 : higherMember.getIntegration()));
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
//24小时后到账
|
||||
accountTransaction.setTransferPaymentTime(DateUtil.tomorrow());
|
||||
umsMemberAccountTransactionMapper.insert(accountTransaction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员的上级关系
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -63,42 +63,6 @@ public class MemberSplitProfitService{
|
||||
|
||||
public void updateOderAndMemberInfo(OmsOrder order) {
|
||||
|
||||
/*UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
|
||||
//找到上级会员
|
||||
UmsMember higherLevelMember = this.findInOrderQueueMember(member.getId());;
|
||||
*
|
||||
* 先验证该订单是否是五联单加速,如果不是则普通计算上级提成
|
||||
* 如果是提成,则全额给上级
|
||||
|
||||
|
||||
|
||||
boolean splitForFiveQueue = false; //是否加速完成
|
||||
//在此判断是否是首单新用户
|
||||
UmsMemberOrderQueueExample orderQueueExample1 = new UmsMemberOrderQueueExample();
|
||||
orderQueueExample1.createCriteria().andMemberIdEqualTo(order.getMemberId());
|
||||
long memberOrderCount = umsMemberOrderQueueMapper.countByExample(orderQueueExample1);
|
||||
if(memberOrderCount == 1){
|
||||
splitForFiveQueue = fiveQuickQueueBusiness(order, member, higherLevelMember);
|
||||
}
|
||||
|
||||
//未进行满5联单分润,开始进行普通分润流程
|
||||
if(!splitForFiveQueue && higherLevelMember != null){
|
||||
//进行订单分润
|
||||
this.splitProfitFroMember(member, higherLevelMember, order);
|
||||
}
|
||||
|
||||
//计算会员等级
|
||||
UmsMemberRelationTree relationTree = this.getUpLevelRelationTreeById(member.getId());
|
||||
if(relationTree == null){
|
||||
return;
|
||||
}
|
||||
//上级为空或者为普通用户
|
||||
UmsMember higherMember = memberMapper.selectByPrimaryKey(relationTree.getHigherLevelId());
|
||||
if(higherMember == null && higherMember.getMemberLevel().equals(MemberLevel.Member)){
|
||||
return;
|
||||
}
|
||||
memberCommissionService.computeCommission(higherMember);*/
|
||||
|
||||
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
|
||||
//找到上级会员
|
||||
UmsMember higherLevelMember = this.findInOrderQueueMember(member.getId());;
|
||||
@@ -280,10 +244,6 @@ public class MemberSplitProfitService{
|
||||
if(higherQueue != null){
|
||||
return splitMark;
|
||||
}
|
||||
//添加帮助加速的订单号
|
||||
/*UmsMemberOrderQueue orderQ = umsMemberOrderQueueMapper.selectByExample(orderQueueExample);
|
||||
orderQ.setAccelerateOrderId(higherQueue.getOrderId());
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(orderQ);*/
|
||||
|
||||
//查找上级还有多少下级(查看同级别的用户)
|
||||
UmsMemberRelationTreeExample umrtExample = new UmsMemberRelationTreeExample();
|
||||
@@ -431,16 +391,6 @@ public class MemberSplitProfitService{
|
||||
umsMemberOrderQueueMapper.insert(record);
|
||||
log.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(higherLevel.getCommissionRatio());*/
|
||||
|
||||
//UmsMemberLevel higherLevel = umsMemberLevelMapper.selectByPrimaryKey(higherLevelMember.getMemberLevelId());
|
||||
//直推会员分润
|
||||
//String ratio = "0."+higherLevel.getCommissionRatio(); mcoo Integer()
|
||||
String ratio = "0."+ 2;
|
||||
BigDecimal revenueAmount = order.getPayAmount().multiply(new BigDecimal(ratio)).setScale(2, RoundingMode.HALF_UP);
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
@@ -688,14 +638,6 @@ public class MemberSplitProfitService{
|
||||
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;
|
||||
}*/
|
||||
if( higherMember.getOrderStatus() == 1){
|
||||
return higherMember;
|
||||
}
|
||||
@@ -715,7 +657,4 @@ public class MemberSplitProfitService{
|
||||
}
|
||||
return relationTree;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,8 +3,6 @@ package com.buy507.mall.portal.service.impl;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.buy507.mall.common.api.CommonResult;
|
||||
import com.buy507.mall.common.util.MD5Util;
|
||||
import com.buy507.mall.mapper.*;
|
||||
@@ -45,6 +43,9 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
|
||||
/**
|
||||
* 前台订单管理Service
|
||||
*/
|
||||
@@ -363,10 +364,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
|
||||
//支付类型: 0->未支付;1->支付宝;2->微信; 3->线下支付; 4->积分支付
|
||||
//判断是否为积分专区商品
|
||||
if (isPointsExchangeStatus) {
|
||||
if(isPointsExchangeStatus) {
|
||||
orderResult.setPayType(4); // 设置为积分支付
|
||||
orderResult.setPayTypeName("积分支付");
|
||||
} else {
|
||||
}else {
|
||||
// 如果不是积分兑换专区商品,则继续使用其他支付方式
|
||||
if (order.getPayType() != null) {
|
||||
orderResult.setPayType(order.getPayType());
|
||||
@@ -747,7 +748,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
return CommonResult.validateFailed("未查询到商品信息");
|
||||
}
|
||||
|
||||
PmsProduct product = productMapper.selectByPrimaryKey(skuStock.getProductId());
|
||||
PmsProduct product = new PmsProduct();
|
||||
|
||||
// 判断商品是否属于积分兑换区
|
||||
boolean isPointsExchangeStatus = product.getPointsExchangeStatus() == 1;
|
||||
@@ -1803,18 +1804,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
@Value("${alipay.signType}")
|
||||
private String signType;
|
||||
|
||||
//店长升级金额
|
||||
@Value("${storeManagerAmount}")
|
||||
private BigDecimal storeManagerAmount;
|
||||
|
||||
//代理升级金额
|
||||
@Value("${agentAmount}")
|
||||
private BigDecimal agentAmount;
|
||||
|
||||
//市代理升级金额
|
||||
@Value("${cityAgentAmount}")
|
||||
private BigDecimal cityAgentAmount;
|
||||
|
||||
/**
|
||||
* 支付宝支付回调
|
||||
*
|
||||
@@ -1835,27 +1824,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
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.isEmpty()) {
|
||||
OmsOrder order = list.get(0);
|
||||
|
||||
if (order.getOrderType() == 3) {
|
||||
// 根据支付金额判断会员等级,并更新
|
||||
if (order.getPayAmount().compareTo(storeManagerAmount) >= 0) {
|
||||
// 升级为店长
|
||||
memberMapper.upgradeMember(order.getMemberId(), 3L);
|
||||
} else if (order.getPayAmount().compareTo(agentAmount) >= 0) {
|
||||
// 升级为代理
|
||||
memberMapper.upgradeMember(order.getMemberId(), 4L);
|
||||
} else if (order.getPayAmount().compareTo(cityAgentAmount) >= 0) {
|
||||
// 升级为市代理
|
||||
memberMapper.upgradeMember(order.getMemberId(), 5L);
|
||||
}
|
||||
}
|
||||
|
||||
//获取订单实付金额
|
||||
BigDecimal payAmount = order.getPayAmount();
|
||||
//获取商品信息
|
||||
|
||||
Reference in New Issue
Block a user