增加分润队列逻辑

This commit is contained in:
2024-11-06 18:39:27 +08:00
parent af3950684a
commit aea65c9782
9 changed files with 507 additions and 167 deletions

View File

@@ -3,9 +3,9 @@ server:
spring:
datasource:
url: jdbc:mysql://192.168.31.162:3306/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: lion
password: leeqiang
url: jdbc:mysql://8.137.112.156:3307/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 1m2y3s4q5l6
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
@@ -17,7 +17,7 @@ spring:
login-password: druid
redis:
host: 192.168.31.162 # Redis服务器地址
host: 192.168.10.107 # Redis服务器地址
database: 1 # Redis数据库索引默认为0
port: 6379 # Redis服务器连接端口
password: leeqiang # Redis服务器连接密码默认为空

View File

@@ -3,9 +3,9 @@ server:
spring:
datasource:
url: jdbc:mysql://localhost:3306/ysr_mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
url: jdbc:mysql://8.137.112.156:3307/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: yusenrong@admin
password: 1m2y3s4q5l6
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
@@ -17,10 +17,10 @@ spring:
login-password: druid
redis:
host: localhost # Redis服务器地址
host: redis.excn.vip # Redis服务器地址
database: 0 # Redis数据库索引默认为0
port: 6379 # Redis服务器连接端口
password: redis # Redis服务器连接密码默认为空
port: 6380 # Redis服务器连接端口
password: ueredis # Redis服务器连接密码默认为空
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
@@ -30,7 +30,7 @@ spring:
timeout: 3000ms # 连接超时时间(毫秒)
rabbitmq:
host: localhost
host: host.docker.internal
port: 5672
virtual-host: /mall
username: mall
@@ -60,4 +60,4 @@ logging:
level:
root: info #日志配置DEBUG,INFO,WARN,ERROR
com.buy507.mall: debug
path: /var/logs #配置日志生成路径
path: ./logs #配置日志生成路径

View File

@@ -6,15 +6,19 @@ package com.buy507.mall.model;
*
*/
public enum MemberLevel {
Member(0), //普通用户
Consumer(1), //vip会员
Partner(2), //店长
Diamond(3), //代理
OneDiamond(4), //总监
TwoDiamond(5), //中级合作商
ThreeDiamond(6), //高级合作商
FourDiamond(7); //特级合作商
/**普通用户**/
Member(1),
/**vip会员**/
Consumer(2),
/**店长**/
Partner(3),
/**代理**/
Diamond(4),
/** 市代 **/
OneDiamond(5),
TwoDiamond(6), //中级合作商
ThreeDiamond(7), //高级合作商
FourDiamond(8); //特级合作商
private int value;

View File

@@ -88,6 +88,12 @@ public class UmsMember implements Serializable {
*/
private String realName;
/**
* 真实姓名
*/
@ApiModelProperty(value = "排队状态:0->未排队1->排队中")
private Integer orderStatus;
private static final long serialVersionUID = 1L;
public Long getId() {
@@ -290,6 +296,14 @@ public class UmsMember implements Serializable {
this.realName = realName;
}
public Integer getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(Integer orderStatus) {
this.orderStatus = orderStatus;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@@ -321,4 +335,6 @@ public class UmsMember implements Serializable {
sb.append("]");
return sb.toString();
}
}

View File

@@ -27,6 +27,7 @@
<result column="freeze" jdbcType="DECIMAL" property="freeze" />
<result column="detail_address" jdbcType="VARCHAR" property="detailAddress" />
<result column="real_name" jdbcType="VARCHAR" property="realName" />
<result column="order_status" jdbcType="INTEGER" property="orderStatus" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@@ -89,7 +90,7 @@
<sql id="Base_Column_List">
id, member_level_id, member_level, username, password, nickname, phone, status, create_time, icon,
gender, birthday, city, job, personalized_signature, source_type, integration, growth,
luckey_count, history_integration, store_status, balance, freeze, detail_address, real_name
luckey_count, history_integration, store_status, balance, freeze, detail_address, real_name,order_status
</sql>
<select id="selectByExample" parameterType="com.buy507.mall.model.UmsMemberExample" resultMap="BaseResultMap">
select
@@ -130,7 +131,7 @@
create_time, icon, gender,
birthday, city, job, personalized_signature,
source_type, integration, growth,
luckey_count, history_integration, store_status, balance, freeze, detail_address, real_name)
luckey_count, history_integration, store_status, balance, freeze, detail_address, real_name,order_status)
values (#{memberLevelId,jdbcType=BIGINT},
#{memberLevel,jdbcType=INTEGER, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},
#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
@@ -140,7 +141,7 @@
#{sourceType,jdbcType=INTEGER}, #{integration,jdbcType=INTEGER}, #{growth,jdbcType=INTEGER},
#{luckeyCount,jdbcType=INTEGER}, #{historyIntegration,jdbcType=INTEGER},
#{storeStatus, jdbcType=INTEGER, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},
#{balance,jdbcType=DECIMAL}, #{freeze,jdbcType=DECIMAL}, #{detailAddress,jdbcType=VARCHAR}, #{realName,jdbcType=VARCHAR})
#{balance,jdbcType=DECIMAL}, #{freeze,jdbcType=DECIMAL}, #{detailAddress,jdbcType=VARCHAR}, #{realName,jdbcType=VARCHAR} #{orderStatus,jdbcType=INTEGER} )
</insert>
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMember">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
@@ -220,6 +221,9 @@
<if test="realName != null">
real_name,
</if>
<if test="orderStatus != null">
order_status,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="memberLevelId != null">
@@ -294,6 +298,9 @@
<if test="realName != null">
#{real_name,jdbcType=VARCHAR},
</if>
<if test="orderStatus != null">
#{order_status,jdbcType=INTEGER},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.buy507.mall.model.UmsMemberExample" resultType="java.lang.Long">
@@ -380,6 +387,9 @@
<if test="record.realName != null">
real_name = #{record.realName,jdbcType=VARCHAR},
</if>
<if test="record.orderStatus != null">
order_status = #{record.growth,jdbcType=INTEGER},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
@@ -411,7 +421,8 @@
balance = #{record.balance,jdbcType=DECIMAL},
freeze = #{record.freeze,jdbcType=DECIMAL},
detail_address = #{record.detailAddress,jdbcType=VARCHAR},
real_name = #{record.realName,jdbcType=VARCHAR}
real_name = #{record.realName,jdbcType=VARCHAR},
order_status = #{record.orderStatus,jdbcType=INTEGER}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@@ -491,6 +502,9 @@
<if test="realName != null">
real_name = #{realName,jdbcType=VARCHAR},
</if>
<if test="orderStatus != null">
order_status = #{realName,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
@@ -520,6 +534,7 @@
freeze = #{freeze,jdbcType=DECIMAL},
detail_address = #{detailAddress,jdbcType=VARCHAR},
real_name = #{realName,jdbcType=VARCHAR}
order_status = #{orderStatus,jdbcType=INTEGER},
where id = #{id,jdbcType=BIGINT}
</update>
<select id="selectPhoneExists" parameterType="java.lang.String" resultMap="BaseResultMap">

View File

@@ -56,37 +56,7 @@ public class MemberCommissionServiceImpl implements MemberCommissionService {
});
}
/***
* 五联单排队分红逻辑
**/
private void orderQueueBusiness(OmsOrder order, UmsMember currentMember) {
//查看该订单所属上级是否开启了加速5连单
UmsMemberRelationTreeExample relationTreeExample = new UmsMemberRelationTreeExample();
relationTreeExample.createCriteria().andMemberIdEqualTo(currentMember.getId());
List<UmsMemberRelationTree> relationTreeList = umsMemberRelationTreeMapper.selectByExample(relationTreeExample);
if(!relationTreeList.isEmpty()){
//找到上级关系
UmsMemberRelationTree relationTree = relationTreeList.get(0);
//订单加入队列
UmsMemberOrderQueueExample orderQueueExample = new UmsMemberOrderQueueExample();
orderQueueExample.createCriteria()
.andQuitQueueMarkEqualTo(UmsMemberOrderQueue.QUEUE_STATUS_WAIT)
.andQueueTypeEqualTo(UmsMemberOrderQueue.QUEUE_TYPE_FAST)
.andMemberIdEqualTo(relationTree.getHigherLevelId());
List<UmsMemberOrderQueue> orderQueueList = umsMemberOrderQueueMapper.selectByExample(orderQueueExample);
//上级订单队列中是否有加速5联单
if(!orderQueueList.isEmpty()){
UmsMemberOrderQueue umoq = orderQueueList.get(0);
if(umoq.getRemainNumber() < 5){
//没有加速满5单
umoq.setRemainNumber(umoq.getRemainNumber()+1);
}
}
}
}
/**
* 普通排队队列
@@ -145,6 +115,8 @@ public class MemberCommissionServiceImpl implements MemberCommissionService {
if(!treeList.isEmpty()){
UmsMemberRelationTree treeMember = treeList.get(0);
UmsMember higherMember = memberMapper.selectByPrimaryKey(treeMember.getHigherLevelId());
//todo 计算分成
}

View File

@@ -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(MemberLevel.Member) ){
//找到上级会员
UmsMember higherLevelMember = this.findInOrderQueueMember(member.getId());;
/**
* 当前订单金额 大于等于 vip门槛金额
* 先验证该订单是否是五联单加速,如果不是则普通计算上级提成
* 如果是提成,则全额给上级
*/
if(order.getPayAmount().compareTo(new BigDecimal(becomeVipAmount)) >= 0 ){
member.setMemberLevel(MemberLevel.Consumer);
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);
boolean splitForFiveQueue = fiveQuickQueueBusiness(higherLevelMember);
//未进行满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 currentMember) {
//查看该订单所属上级是否开启了加速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 higherLevelMember) {
//分润标识
boolean splitMark = false;
if(higherLevelMember != null){
//订单加入队列
UmsMemberOrderQueueExample orderQueueExample = new UmsMemberOrderQueueExample();
orderQueueExample.createCriteria()
.andQuitQueueMarkEqualTo(UmsMemberOrderQueue.QUEUE_STATUS_WAIT)
.andQueueTypeEqualTo(UmsMemberOrderQueue.QUEUE_TYPE_FAST)
.andMemberIdEqualTo(relationTree.getHigherLevelId());
.andMemberIdEqualTo(higherLevelMember.getId());
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 = higherLevelMember.getFreeze();
BigDecimal orderAmount = umoq.getOrderAmount();
higherMember.setFreeze(freeze.add(orderAmount));
higherLevelMember.setFreeze(freeze.add(orderAmount));
//更新数据库
memberMapper.updateByPrimaryKeySelective(higherMember);
memberMapper.updateByPrimaryKeySelective(higherLevelMember);
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;
}
}

View File

@@ -3,9 +3,9 @@ server:
spring:
datasource:
url: jdbc:mysql://192.168.10.107:3306/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: lion
password: leeqiang
url: jdbc:mysql://8.137.112.156:3307/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 1m2y3s4q5l6
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
@@ -79,13 +79,13 @@ logging:
alipay:
appId: 9021000141666104
appPrivateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCPp50bwLpQ5ofFcUztw46BTcc1lOGKoyuOtI+biJmgNfysl0nqeDYEriPTZo0pe7gwujrwNSMBKvmKLQ+awQSM7XEQfDj7oGNp1yw5EFjT62tFlIoi7bMueRUZnxQRTkZhNobj6+BfOeMMg0HURVE1VinUr4UVjO7IIODLCkYDURNMfSr3f4paO0odPCRSw47+b6euuzoszd81nfZUa7f6NPBaf6iAn6i2aSPTASlfAW/TZ9IHmVd13tI3pWSpsaMu0KcKZIfTz+l/VazHWQBLACzOF0LJ+eSjsj8aNGOp9Jo82zh+GddK94fElqCjoFQySeYjQ6OErGLsz1Pm6CJhAgMBAAECggEAK+p+0hQqIT9IdGi9rtYgw5DGfK/l/18AmuDCIjcxV9QJSa36b86OHQIre54XO35SAbt89yAXcmzz2nUKFzI4tOiFrxd6yBnxKlMYdt1zel227o+JZ0Ipi+SCOdHy7ZNzWpazyAu9DP+CVLnvrvf96oNLyHRcCAmMmevLLOcYHjz+d56pTS/JblPQWz/WRPkqSJt2FcMKQCbGNhthjHFf+EFF/OGVGTSpS8AW6gytUR/k713UBrrY9eYAsZ+ZA/wAsECQCvRnoxO7zy+7rTlVT+I6kJu+BfUuTgx2FOO4gjQa8ICZI/ncpW+7X7DLhcNA6Yh20T4sY8AlMU3tIoyuQQKBgQDJbzva1J3MpTwUo1FtkWrrne8X58lqKOo7T7+J2xvif3sFd9/nu/R2FX9QoJuxIgHGsl0AA5wsaEReUFf00m542zLQAfOWmPtCQ0D5zzE6MBr2BwUvNHdw0UlYzFqfq0xfty27fwIv3rI60cJ0GnxIrBB9/BaGPX6i7Pv3nXy2iQKBgQC2kY8KWMOT8r+EMs6Lm4tf+lKauYbGLIjZuAcjP1p8NO6B1psTnwQfrI/JBipXxdgwlNyfytYPTah5m2zWDfaUkcbNIu+wXUZCvVUgLi3ZYj0hlOOOzXkYiRg7k9yirzXxjdk3yRGJ0DZqxCMcizNrsQmM1B8nMcg4N+e48bQXGQKBgHzzeBCFZSFFuiAfMuqhks53WJHeoQ0uNiX2kRzlgsWcSGaa9pRb/gelzCTqi8l0C+ACUjgpBR5yyz4p3nWqdwaXCk0HeN+JJAr1hv+u651pq7/DmQ6wIAsmd7YShYCYFLcm/MJaxbOGE87ywQmeSEwYF97emeZJjR1pnd76nRrpAoGABzqeQlefbuVGxhJI8Wg4TZWY3b2I46HxzUUnKzMf/xkNdKCtxUofnK11iA0xcgZIeCv8zGr4rORzTlVkKtmksN9Q0uCWQxJ+bLgYfcy2TgxAxWqi1A24xMrw5bMGIn7zkNwABOB2TFGtRe78QO4WHCaHbUcc8K1c8zTrfPw9GEkCgYB+mMZXsFe8KDOsy+fRdnB2KN+FlZIKKP2ehTGZnj9JENIR6A8//MgC4astniIy/K2JY6EsvPpHzT9nSK0uQBFSIXFgXm4qnVLXATZskKu8mvQgcYcvXKZHdQHNzvn+J53xfxnAcqXtcMPzvLzCoTMcbjKJ8YC0bBr0eNonb4ea5g==
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6dBwV5KsJHqqvxh29bkGxEW8eIb8WJx6Ax5NuERvbM5BcTKEe/yse/mCR5OEZSWSNnxa3SQCql50xcxt0cfSe/QcmXP+Mi6sY07LO2/tK+N8PhYWzKunnq+KbanQ+R0wGw4oVl02g/vXx097aWiDZdLcHu8No78b6VIy79EsqThbiQuqJdmFkXfrePzKxNbIrAr4ENZJVcmp2+/LU7LrdAqgnlzyx4Ya0begj7d/MPz+weteSmoyBeAH2xzPiKpdOtR5HdKyaaTIRBGyr+BTYMdyeZYrGtB7HNPv2ydAHJwiQj88dDCCGhCRyDLpLdF15xZGLxTq8FlqKzfzut/UowIDAQAB
appPrivateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCqDUlsRnQwOspHo2wKVIsXNBa7BJbhPkE0Nf4xYJuz41X3I/cNYUmK4PFVbDM65Zu9U3Dmp6DEgwCDiR/mY59szsAMifBtBsYYg2uUV6CYZoFAg4JKs+NWAXUkBqDn53PlLMjhZ0MHeSihTBqvQBTTm/1oQFAC1CuUfiAUTThJmXb4ZtT9CPRNRbxRwwc8e1TI7i0kU59MKJVH5q+WDKDQxJi3QKdT6S0KRQBn+W64dBj/MKRiAoi1v0/eCdlTxBt+u32h4sxvfZHYnWeAg2LdKO3T/Zq7jLiyOHl5STzz66Iw3Jpxmx1dprSTRdcDZiL1r4PGir+Btj8PKGN0K24LAgMBAAECggEAPtTv9yDFF3jxeqzIY7y/M9CcQXe9o/YTs43roST4AuyRu+I/C2OR/82DfjOfbjieZcLp6V+wiEt7Kh7FeaP/qP1venKRMkeZdD9Cxanm/ciKI2M0BhQXgJTDSo9kbqtXaCs3Agnce2tp9sce6Pf9ef6eECILLjBk9dXwVm/9xzthrjq8vzkmyLrJcrwVrp3X0zR1hbJJduC/RsUlV9rdMPx7jUxbmM3cRvEuG/zjZECgE5zrEuKoWNa/fV+X4Ao11WEzUmjXnJ6D9C2P1m5oU5bWFKfOV4mmG/bgpqPEB53L+553TlEiSwfYJSCWFyOxxqQo0MZrWW0HNQ5bgArYWQKBgQDYhska+wUhRwUlQzgzEsiDd2z+PjPvPXIMGJCKczWd1kfzO1xQWtI3vVu91JQrgTXfCx88b/Vv0buxli06C/YRSiUC7Qo+RDaRhmFihGVlbQwUNT7XXOm4WJYGf7W3Ykh5pQOQ/9XQfUa3X8WAo1mMqXx4C4hwUOxgal9HnoVYpwKBgQDJDYxQmGQ9keQrCZ7mh4+2zatWI/CmwJ2gcBBr+pGw2LPOIq0Xf0u+PmbP5mKt0msJlYtN1bidPxHFSjqi0L4WjsxIfmYKJvEGJk1xIB9mDCnmPOG5g1JPMHet1Ygz4soey2bULLMOpe6Es8jI5MAsgtYB+92SCelV8oaa79/H/QKBgQCwlSOXHFYvsGKy4+IGTPA3vwKlSYdDOaIz2SivsItuYF2nMKb1ZUwBZy1VX/NCk4qijsh3mnrYKXxftLDHoQ+ZRBVxEG2FIE48WhI7rOugTtFF/bJ1InH9BEm9nRNOLhobEocZDnuKH1C3paRFZ3JVc7dtk0I/Ds/nRXjUyKPJCwKBgQCoNyasFCTigtslyyHg/ZEXwNLW+rERw9zebITA41/cWCNwmAC8xSvpW6qHzdnIV2JpHW71S5jwL+G9cRLIQOCaXRW8nczgN563p3pp6Rd8OTchRNUTczV9vi6UCjGwP9Mems5JPbD+04RSEV4v/3xugXVvKX1D//jziTxoC8TvPQKBgDsYbBYdQFUorIvzLIZVI4a+AON1s0FfVayOl8LZzZRH5v7DCD82rxAQkbb3YfcXTdDtdZd+CiKDsxsIupBMkBHqdwLzJtVXhj49sqkRgYfS8lwO7+MRps9PhmH+HC32CkTRmE0Oti7cSNziV8464L5tWAC+UEm2MB/MNrnF6qQT
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqg1JbEZ0MDrKR6NsClSLFzQWuwSW4T5BNDX+MWCbs+NV9yP3DWFJiuDxVWwzOuWbvVNw5qegxIMAg4kf5mOfbM7ADInwbQbGGINrlFegmGaBQIOCSrPjVgF1JAag5+dz5SzI4WdDB3kooUwar0AU05v9aEBQAtQrlH4gFE04SZl2+GbU/Qj0TUW8UcMHPHtUyO4tJFOfTCiVR+avlgyg0MSYt0CnU+ktCkUAZ/luuHQY/zCkYgKItb9P3gnZU8Qbfrt9oeLMb32R2J1ngINi3Sjt0/2au4y4sjh5eUk88+uiMNyacZsdXaa0k0XXA2Yi9a+Dxoq/gbY/DyhjdCtuCwIDAQAB
serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
format: json
charset: UTF-8
signType: RSA2
payCallBackUrl: https://yusenrong.507buy.com/member/order/alipay/callback
payCallBackUrl: https://csj-meeting-room.excn.vip/api/member/order/alipay/callback
# 成为vip金额
becomeVipAmount: 899

View File

@@ -3,9 +3,9 @@ server:
spring:
datasource:
url: jdbc:mysql://localhost:3306/ysr_mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
url: jdbc:mysql://8.137.112.156:3307/hui-mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: yusenrong@admin
password: 1m2y3s4q5l6
druid:
initial-size: 5 #连接池初始化大小
min-idle: 10 #最小空闲连接数
@@ -18,15 +18,15 @@ spring:
data:
mongodb:
host: localhost
host: host.docker.internal
port: 27017
database: mall-port
redis:
host: localhost # Redis服务器地址
host: redis.excn.vip # Redis服务器地址
database: 0 # Redis数据库索引默认为0
port: 6379 # Redis服务器连接端口
password: redis # Redis服务器连接密码默认为空
port: 6380 # Redis服务器连接端口
password: ueredis # Redis服务器连接密码默认为空
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
@@ -36,7 +36,7 @@ spring:
timeout: 3000ms # 连接超时时间(毫秒)
rabbitmq:
host: localhost
host: host.docker.internal
port: 5672
virtual-host: /mall
username: mall
@@ -78,14 +78,14 @@ logging:
path: /var/logs
alipay:
appId: your_app_id
appPrivateKey: your_app_private_key
alipayPublicKey: your_alipay_public_key
serverUrl: https://openapi.alipay.com/gateway.do
appId: 9021000141666104
appPrivateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCqDUlsRnQwOspHo2wKVIsXNBa7BJbhPkE0Nf4xYJuz41X3I/cNYUmK4PFVbDM65Zu9U3Dmp6DEgwCDiR/mY59szsAMifBtBsYYg2uUV6CYZoFAg4JKs+NWAXUkBqDn53PlLMjhZ0MHeSihTBqvQBTTm/1oQFAC1CuUfiAUTThJmXb4ZtT9CPRNRbxRwwc8e1TI7i0kU59MKJVH5q+WDKDQxJi3QKdT6S0KRQBn+W64dBj/MKRiAoi1v0/eCdlTxBt+u32h4sxvfZHYnWeAg2LdKO3T/Zq7jLiyOHl5STzz66Iw3Jpxmx1dprSTRdcDZiL1r4PGir+Btj8PKGN0K24LAgMBAAECggEAPtTv9yDFF3jxeqzIY7y/M9CcQXe9o/YTs43roST4AuyRu+I/C2OR/82DfjOfbjieZcLp6V+wiEt7Kh7FeaP/qP1venKRMkeZdD9Cxanm/ciKI2M0BhQXgJTDSo9kbqtXaCs3Agnce2tp9sce6Pf9ef6eECILLjBk9dXwVm/9xzthrjq8vzkmyLrJcrwVrp3X0zR1hbJJduC/RsUlV9rdMPx7jUxbmM3cRvEuG/zjZECgE5zrEuKoWNa/fV+X4Ao11WEzUmjXnJ6D9C2P1m5oU5bWFKfOV4mmG/bgpqPEB53L+553TlEiSwfYJSCWFyOxxqQo0MZrWW0HNQ5bgArYWQKBgQDYhska+wUhRwUlQzgzEsiDd2z+PjPvPXIMGJCKczWd1kfzO1xQWtI3vVu91JQrgTXfCx88b/Vv0buxli06C/YRSiUC7Qo+RDaRhmFihGVlbQwUNT7XXOm4WJYGf7W3Ykh5pQOQ/9XQfUa3X8WAo1mMqXx4C4hwUOxgal9HnoVYpwKBgQDJDYxQmGQ9keQrCZ7mh4+2zatWI/CmwJ2gcBBr+pGw2LPOIq0Xf0u+PmbP5mKt0msJlYtN1bidPxHFSjqi0L4WjsxIfmYKJvEGJk1xIB9mDCnmPOG5g1JPMHet1Ygz4soey2bULLMOpe6Es8jI5MAsgtYB+92SCelV8oaa79/H/QKBgQCwlSOXHFYvsGKy4+IGTPA3vwKlSYdDOaIz2SivsItuYF2nMKb1ZUwBZy1VX/NCk4qijsh3mnrYKXxftLDHoQ+ZRBVxEG2FIE48WhI7rOugTtFF/bJ1InH9BEm9nRNOLhobEocZDnuKH1C3paRFZ3JVc7dtk0I/Ds/nRXjUyKPJCwKBgQCoNyasFCTigtslyyHg/ZEXwNLW+rERw9zebITA41/cWCNwmAC8xSvpW6qHzdnIV2JpHW71S5jwL+G9cRLIQOCaXRW8nczgN563p3pp6Rd8OTchRNUTczV9vi6UCjGwP9Mems5JPbD+04RSEV4v/3xugXVvKX1D//jziTxoC8TvPQKBgDsYbBYdQFUorIvzLIZVI4a+AON1s0FfVayOl8LZzZRH5v7DCD82rxAQkbb3YfcXTdDtdZd+CiKDsxsIupBMkBHqdwLzJtVXhj49sqkRgYfS8lwO7+MRps9PhmH+HC32CkTRmE0Oti7cSNziV8464L5tWAC+UEm2MB/MNrnF6qQT
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqg1JbEZ0MDrKR6NsClSLFzQWuwSW4T5BNDX+MWCbs+NV9yP3DWFJiuDxVWwzOuWbvVNw5qegxIMAg4kf5mOfbM7ADInwbQbGGINrlFegmGaBQIOCSrPjVgF1JAag5+dz5SzI4WdDB3kooUwar0AU05v9aEBQAtQrlH4gFE04SZl2+GbU/Qj0TUW8UcMHPHtUyO4tJFOfTCiVR+avlgyg0MSYt0CnU+ktCkUAZ/luuHQY/zCkYgKItb9P3gnZU8Qbfrt9oeLMb32R2J1ngINi3Sjt0/2au4y4sjh5eUk88+uiMNyacZsdXaa0k0XXA2Yi9a+Dxoq/gbY/DyhjdCtuCwIDAQAB
serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
format: json
charset: UTF-8
signType: RSA2
payCallBackUrl: https://yusenrong.507buy.com/member/order/alipay/callback
payCallBackUrl: https://csj-meeting-room.excn.vip/api/member/order/alipay/callback
# 成为vip金额
# 成为vip金额
becomeVipAmount: 899