加入队列分润逻辑
This commit is contained in:
@@ -187,10 +187,11 @@ CREATE TABLE `dms_member_month_reward_record` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='会员月度奖励发放记录表';
|
||||
|
||||
|
||||
alter table `ums_member` add column `member_level` int(1) null COMMENT '分销会员等级(0->普通会员;1->消费商;2->经销商;3->合作商;4->初级合作商;5->中级合作商;6->高级合作商;7->特级合作商))' default '0' AFTER `member_level_id`;
|
||||
alter table `ums_member` add column `member_level` int(1) null COMMENT '分销会员等级(0->普通用户;1->vip会员;2->店长;3->代理;4->市代;5->中级合作商;6->高级合作商;7->特级合作商))' default '0' AFTER `member_level_id`;
|
||||
alter table `ums_member` add column `store_status` int(1) null COMMENT '分销实体店状态(0->未开店;1->已开店)' default '0';
|
||||
alter table `ums_member` add column `balance` decimal(10,2) null COMMENT '余额' default '0.00';
|
||||
alter table `ums_member` add column `freeze` decimal(10,2) null COMMENT '冻结余额' default '0.00';
|
||||
alter table `ums_member` add column `order_status` int(1) null COMMENT '排队状态:0->未排队;1->排队中' default '0';
|
||||
|
||||
alter table `oms_order` add column settlement_status int(1) null COMMENT '分销结算状态(0->未结算;1->已结算;2->不结算)' default '0';
|
||||
alter table `oms_order` add column settlement_time datetime null COMMENT '分销结算时间';
|
||||
|
||||
@@ -971,7 +971,7 @@ CREATE TABLE IF NOT EXISTS `ums_integration_consume_setting` (
|
||||
DROP TABLE IF EXISTS `ums_member`;
|
||||
CREATE TABLE IF NOT EXISTS `ums_member` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||
`member_level_id` bigint(20) DEFAULT NULL COMMENT '会员等级id',
|
||||
`member_level_id` bigint(20) DEFAULT 0 COMMENT '会员等级id',
|
||||
`username` varchar(64) DEFAULT NULL COMMENT '用户名',
|
||||
`password` varchar(64) DEFAULT NULL COMMENT '密码',
|
||||
`nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
|
||||
@@ -1209,7 +1209,6 @@ alter table ums_member change nickname nickname varchar(64) character set utf8mb
|
||||
CREATE TABLE `ums_member_relation_tree` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||
`member_id` bigint(20) NULL DEFAULT 0 COMMENT '会员id',
|
||||
`lower_level_id` bigint(20) NULL DEFAULT 0 COMMENT '下级会员id',
|
||||
`higher_level_id` bigint(20) NULL DEFAULT 0 COMMENT '上级会员id',
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
@@ -1224,8 +1223,8 @@ alter table ums_member change nickname nickname varchar(64) character set utf8mb
|
||||
`order_amount` decimal(10, 2) NULL DEFAULT 0 COMMENT '订单金额',
|
||||
`queue_index` bigint(20) NULL DEFAULT 0 COMMENT '队列位置',
|
||||
`quit_queue_mark` int(1) NULL DEFAULT 0 COMMENT '0 未退出,1 准备退队列, 2退出队列',
|
||||
`queue_type` int(1) NULL DEFAULT 0 COMMENT '0 普通队列,1 加速队列',
|
||||
`remain_number` int(1) NULL DEFAULT 5 COMMENT '加速单剩余数量',
|
||||
`queue_type` int(1) NULL DEFAULT 0 COMMENT '0 普通队列,1 加速队列',
|
||||
`remain_number` int(1) NULL DEFAULT 5 COMMENT '加速单剩余数量',
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会员订单队列' ROW_FORMAT = DYNAMIC;
|
||||
@@ -1237,11 +1236,11 @@ CREATE TABLE `ums_member_account_transaction` (
|
||||
`member_id` bigint(20) NULL DEFAULT 0 COMMENT '会员id',
|
||||
`order_id` bigint(20) NULL DEFAULT 0 COMMENT '订单id',
|
||||
`revenue_amount` decimal(10, 2) NULL DEFAULT 0 COMMENT '进帐金额',
|
||||
`transaction_state` int(1) NULL DEFAULT 0 COMMENT '转账状态 0 未转账,1 转账, 2 退款',
|
||||
`transaction_state` int(1) NULL DEFAULT 0 COMMENT '转账状态 0 未转账,1 转账, 2 退款',
|
||||
`remarks` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`commission_ratio` int(10) NULL DEFAULT 0 COMMENT '提成比例',
|
||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
`transfer_payment_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '转账时间',
|
||||
`transfer_payment_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '转账时间',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会员账户流水' ROW_FORMAT = DYNAMIC;
|
||||
|
||||
|
||||
@@ -24,6 +24,13 @@ public class PmsProductParam extends PmsProduct{
|
||||
@ApiModelProperty("优选专区和商品的关系")
|
||||
private List<CmsPrefrenceAreaProductRelation> prefrenceAreaProductRelationList;
|
||||
|
||||
|
||||
public List<Long> productCategoryId;
|
||||
|
||||
public void setProductCategoryId(List<Long> productCategoryId) {
|
||||
this.productCategoryId = productCategoryId;
|
||||
}
|
||||
|
||||
public List<PmsProductLadder> getProductLadderList() {
|
||||
return productLadderList;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ public class PmsProductServiceImpl implements PmsProductService {
|
||||
PmsProduct product = productParam;
|
||||
product.setId(null);
|
||||
product.setVerifyStatus(1);
|
||||
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey(product.getProductCategoryId());
|
||||
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey( productParam.productCategoryId.get(0));
|
||||
product.setProductCategoryName(productCategory.getName());
|
||||
productMapper.insertSelective(product);
|
||||
//根据促销类型设置价格:、阶梯价格、满减价格
|
||||
@@ -134,7 +134,7 @@ public class PmsProductServiceImpl implements PmsProductService {
|
||||
PmsProduct product = productParam;
|
||||
product.setId(id);
|
||||
product.setVerifyStatus(1);
|
||||
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey(product.getProductCategoryId());
|
||||
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey(productParam.productCategoryId.get(0));
|
||||
product.setProductCategoryName(productCategory.getName());
|
||||
productMapper.updateByPrimaryKeySelective(product);
|
||||
//会员价格
|
||||
|
||||
@@ -7,15 +7,15 @@ package com.buy507.mall.model;
|
||||
*/
|
||||
public enum MemberLevel {
|
||||
/**普通用户**/
|
||||
Member(1),
|
||||
Member(0),
|
||||
/**vip会员**/
|
||||
Consumer(2),
|
||||
Consumer(1),
|
||||
/**店长**/
|
||||
Partner(3),
|
||||
Partner(2),
|
||||
/**代理**/
|
||||
Diamond(4),
|
||||
Diamond(3),
|
||||
/** 市代 **/
|
||||
OneDiamond(5),
|
||||
OneDiamond(4),
|
||||
TwoDiamond(6), //中级合作商
|
||||
ThreeDiamond(7), //高级合作商
|
||||
FourDiamond(8); //特级合作商
|
||||
@@ -30,4 +30,12 @@ public enum MemberLevel {
|
||||
return value;
|
||||
}
|
||||
|
||||
public static MemberLevel getMemberByInt(int value){
|
||||
for (MemberLevel memberLevel : MemberLevel.values()) {
|
||||
if(value == memberLevel.value){
|
||||
return memberLevel;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,4 +337,6 @@ public class UmsMember implements Serializable {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -11,9 +11,6 @@ public class UmsMemberRelationTree implements Serializable {
|
||||
@ApiModelProperty(value = "会员id")
|
||||
private Long memberId;
|
||||
|
||||
@ApiModelProperty(value = "下级会员id")
|
||||
private Long lowerLevelId;
|
||||
|
||||
@ApiModelProperty(value = "上级会员id")
|
||||
private Long higherLevelId;
|
||||
|
||||
@@ -38,14 +35,6 @@ public class UmsMemberRelationTree implements Serializable {
|
||||
this.memberId = memberId;
|
||||
}
|
||||
|
||||
public Long getLowerLevelId() {
|
||||
return lowerLevelId;
|
||||
}
|
||||
|
||||
public void setLowerLevelId(Long lowerLevelId) {
|
||||
this.lowerLevelId = lowerLevelId;
|
||||
}
|
||||
|
||||
public Long getHigherLevelId() {
|
||||
return higherLevelId;
|
||||
}
|
||||
@@ -70,7 +59,6 @@ public class UmsMemberRelationTree implements Serializable {
|
||||
sb.append("Hash = ").append(hashCode());
|
||||
sb.append(", id=").append(id);
|
||||
sb.append(", memberId=").append(memberId);
|
||||
sb.append(", lowerLevelId=").append(lowerLevelId);
|
||||
sb.append(", higherLevelId=").append(higherLevelId);
|
||||
sb.append(", createTime=").append(createTime);
|
||||
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||
|
||||
@@ -225,66 +225,6 @@ public class UmsMemberRelationTreeExample {
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdIsNull() {
|
||||
addCriterion("lower_level_id is null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdIsNotNull() {
|
||||
addCriterion("lower_level_id is not null");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdEqualTo(Long value) {
|
||||
addCriterion("lower_level_id =", value, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdNotEqualTo(Long value) {
|
||||
addCriterion("lower_level_id <>", value, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdGreaterThan(Long value) {
|
||||
addCriterion("lower_level_id >", value, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdGreaterThanOrEqualTo(Long value) {
|
||||
addCriterion("lower_level_id >=", value, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdLessThan(Long value) {
|
||||
addCriterion("lower_level_id <", value, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdLessThanOrEqualTo(Long value) {
|
||||
addCriterion("lower_level_id <=", value, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdIn(List<Long> values) {
|
||||
addCriterion("lower_level_id in", values, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdNotIn(List<Long> values) {
|
||||
addCriterion("lower_level_id not in", values, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdBetween(Long value1, Long value2) {
|
||||
addCriterion("lower_level_id between", value1, value2, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andLowerLevelIdNotBetween(Long value1, Long value2) {
|
||||
addCriterion("lower_level_id not between", value1, value2, "lowerLevelId");
|
||||
return (Criteria) this;
|
||||
}
|
||||
|
||||
public Criteria andHigherLevelIdIsNull() {
|
||||
addCriterion("higher_level_id is null");
|
||||
return (Criteria) this;
|
||||
|
||||
@@ -109,11 +109,10 @@
|
||||
SELECT LAST_INSERT_ID()
|
||||
</selectKey>
|
||||
insert into ums_member_account_transaction (member_id, order_id, revenue_amount,
|
||||
transaction_state, remarks, commission_ratio,
|
||||
create_time, transfer_payment_time)
|
||||
transaction_state, remarks, commission_ratio, transfer_payment_time)
|
||||
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{revenueAmount,jdbcType=DECIMAL},
|
||||
#{transactionState,jdbcType=INTEGER}, #{remarks,jdbcType=VARCHAR}, #{commissionRatio,jdbcType=INTEGER},
|
||||
#{createTime,jdbcType=TIMESTAMP}, #{transferPaymentTime,jdbcType=TIMESTAMP})
|
||||
#{transferPaymentTime,jdbcType=TIMESTAMP})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberAccountTransaction">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||
|
||||
@@ -533,8 +533,8 @@
|
||||
balance = #{balance,jdbcType=DECIMAL},
|
||||
freeze = #{freeze,jdbcType=DECIMAL},
|
||||
detail_address = #{detailAddress,jdbcType=VARCHAR},
|
||||
real_name = #{realName,jdbcType=VARCHAR}
|
||||
order_status = #{orderStatus,jdbcType=INTEGER},
|
||||
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">
|
||||
|
||||
@@ -109,11 +109,10 @@
|
||||
SELECT LAST_INSERT_ID()
|
||||
</selectKey>
|
||||
insert into ums_member_order_queue (member_id, order_id, order_amount,
|
||||
queue_index, quit_queue_mark, queue_type,
|
||||
remain_number, create_time)
|
||||
queue_index, quit_queue_mark, queue_type,remain_number)
|
||||
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{orderAmount,jdbcType=DECIMAL},
|
||||
#{queueIndex,jdbcType=BIGINT}, #{quitQueueMark,jdbcType=INTEGER}, #{queueType,jdbcType=INTEGER},
|
||||
#{remainNumber,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP})
|
||||
#{remainNumber,jdbcType=INTEGER})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberOrderQueue">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
<resultMap id="BaseResultMap" type="com.buy507.mall.model.UmsMemberRelationTree">
|
||||
<id column="id" jdbcType="BIGINT" property="id" />
|
||||
<result column="member_id" jdbcType="BIGINT" property="memberId" />
|
||||
<result column="lower_level_id" jdbcType="BIGINT" property="lowerLevelId" />
|
||||
<result column="higher_level_id" jdbcType="BIGINT" property="higherLevelId" />
|
||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||
</resultMap>
|
||||
@@ -67,7 +66,7 @@
|
||||
</where>
|
||||
</sql>
|
||||
<sql id="Base_Column_List">
|
||||
id, member_id, lower_level_id, higher_level_id, create_time
|
||||
id, member_id, higher_level_id, create_time
|
||||
</sql>
|
||||
<select id="selectByExample" parameterType="com.buy507.mall.model.UmsMemberRelationTreeExample" resultMap="BaseResultMap">
|
||||
select
|
||||
@@ -103,10 +102,10 @@
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||
SELECT LAST_INSERT_ID()
|
||||
</selectKey>
|
||||
insert into ums_member_relation_tree (member_id, lower_level_id, higher_level_id,
|
||||
create_time)
|
||||
values (#{memberId,jdbcType=BIGINT}, #{lowerLevelId,jdbcType=BIGINT}, #{higherLevelId,jdbcType=BIGINT},
|
||||
#{createTime,jdbcType=TIMESTAMP})
|
||||
insert into ums_member_relation_tree (member_id, higher_level_id, create_time
|
||||
)
|
||||
values (#{memberId,jdbcType=BIGINT}, #{higherLevelId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}
|
||||
)
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberRelationTree">
|
||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||
@@ -117,9 +116,6 @@
|
||||
<if test="memberId != null">
|
||||
member_id,
|
||||
</if>
|
||||
<if test="lowerLevelId != null">
|
||||
lower_level_id,
|
||||
</if>
|
||||
<if test="higherLevelId != null">
|
||||
higher_level_id,
|
||||
</if>
|
||||
@@ -131,9 +127,6 @@
|
||||
<if test="memberId != null">
|
||||
#{memberId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="lowerLevelId != null">
|
||||
#{lowerLevelId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="higherLevelId != null">
|
||||
#{higherLevelId,jdbcType=BIGINT},
|
||||
</if>
|
||||
@@ -157,9 +150,6 @@
|
||||
<if test="record.memberId != null">
|
||||
member_id = #{record.memberId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="record.lowerLevelId != null">
|
||||
lower_level_id = #{record.lowerLevelId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="record.higherLevelId != null">
|
||||
higher_level_id = #{record.higherLevelId,jdbcType=BIGINT},
|
||||
</if>
|
||||
@@ -175,7 +165,6 @@
|
||||
update ums_member_relation_tree
|
||||
set id = #{record.id,jdbcType=BIGINT},
|
||||
member_id = #{record.memberId,jdbcType=BIGINT},
|
||||
lower_level_id = #{record.lowerLevelId,jdbcType=BIGINT},
|
||||
higher_level_id = #{record.higherLevelId,jdbcType=BIGINT},
|
||||
create_time = #{record.createTime,jdbcType=TIMESTAMP}
|
||||
<if test="_parameter != null">
|
||||
@@ -188,9 +177,6 @@
|
||||
<if test="memberId != null">
|
||||
member_id = #{memberId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="lowerLevelId != null">
|
||||
lower_level_id = #{lowerLevelId,jdbcType=BIGINT},
|
||||
</if>
|
||||
<if test="higherLevelId != null">
|
||||
higher_level_id = #{higherLevelId,jdbcType=BIGINT},
|
||||
</if>
|
||||
@@ -203,7 +189,6 @@
|
||||
<update id="updateByPrimaryKey" parameterType="com.buy507.mall.model.UmsMemberRelationTree">
|
||||
update ums_member_relation_tree
|
||||
set member_id = #{memberId,jdbcType=BIGINT},
|
||||
lower_level_id = #{lowerLevelId,jdbcType=BIGINT},
|
||||
higher_level_id = #{higherLevelId,jdbcType=BIGINT},
|
||||
create_time = #{createTime,jdbcType=TIMESTAMP}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
|
||||
@@ -41,9 +41,6 @@ public class MemberCommissionServiceImpl implements MemberCommissionService {
|
||||
private ExecutorService executorService = Executors.newFixedThreadPool(10);
|
||||
|
||||
|
||||
|
||||
static Long modulus = new Long(5);
|
||||
|
||||
@Override
|
||||
public void computeCommission(OmsOrder order, UmsMember currentMember) {
|
||||
|
||||
@@ -58,6 +55,8 @@ public class MemberCommissionServiceImpl implements MemberCommissionService {
|
||||
}
|
||||
|
||||
|
||||
//排队取值膜
|
||||
private static Long modulus = new Long(5);
|
||||
/**
|
||||
* 普通排队队列
|
||||
* @param order
|
||||
|
||||
@@ -0,0 +1,540 @@
|
||||
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 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 org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MemberSplitProfitService{
|
||||
|
||||
@Resource
|
||||
private UmsMemberMapper memberMapper;
|
||||
/**
|
||||
* 会员分成流水
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberAccountTransactionMapper umsMemberAccountTransactionMapper;
|
||||
/**
|
||||
* 订单队列
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberOrderQueueMapper umsMemberOrderQueueMapper;
|
||||
|
||||
/**
|
||||
* 会员上下关系
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberRelationTreeMapper umsMemberRelationTreeMapper;
|
||||
/**
|
||||
* 会员等级
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberLevelMapper umsMemberLevelMapper;
|
||||
|
||||
|
||||
@Value("${becomeVipAmount}")
|
||||
private String becomeVipAmount;
|
||||
|
||||
@Async
|
||||
@Transactional
|
||||
public void updateOderAndMemberInfo(OmsOrder order) {
|
||||
|
||||
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
|
||||
//找到上级会员
|
||||
UmsMember higherLevelMember = this.findInOrderQueueMember(member.getId());;
|
||||
/**
|
||||
* 先验证该订单是否是五联单加速,如果不是则普通计算上级提成
|
||||
* 如果是提成,则全额给上级
|
||||
*/
|
||||
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.twoLevelSplitProfit(higherLevelMember, moreHigherMember, order, revenueAmount);
|
||||
|
||||
this.threeLevelSplitProfit(higherLevelMember, moreHigherMember, order, revenueAmount);
|
||||
|
||||
this.fourLevelSplitProfit(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;
|
||||
}
|
||||
while (moreHigherMember != null){
|
||||
if(moreHigherMember.getMemberLevel().getValue() > consumer.getValue()){
|
||||
return moreHigherMember;
|
||||
}
|
||||
moreHigherMember = this.findInOrderQueueMember(moreHigherMember.getId());
|
||||
if(moreHigherMember == null){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return moreHigherMember;
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* 五联单排队分红逻辑,该订单支付后处理
|
||||
**/
|
||||
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(higherLevelMember.getId());
|
||||
|
||||
List<UmsMemberOrderQueue> orderQueueList = umsMemberOrderQueueMapper.selectByExample(orderQueueExample);
|
||||
//上级订单队列中是否有加速5联单
|
||||
if(!orderQueueList.isEmpty()){
|
||||
UmsMemberOrderQueue umoq = orderQueueList.get(0);
|
||||
if(umoq.getRemainNumber() <= 4){
|
||||
//没有加速满5单
|
||||
umoq.setRemainNumber(1 + umoq.getRemainNumber());
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(umoq);
|
||||
|
||||
}else {
|
||||
//设置本单待退出,且5单满24小时未退款
|
||||
umoq.setQuitQueueMark(UmsMemberOrderQueue.QUEUE_PREPARE_QUIT);
|
||||
//冻结上级会费的冻结金额
|
||||
|
||||
//订单金额加入冻结余额
|
||||
BigDecimal freeze = higherLevelMember.getFreeze();
|
||||
BigDecimal orderAmount = umoq.getOrderAmount();
|
||||
higherLevelMember.setFreeze(freeze.add(orderAmount));
|
||||
//更新数据库
|
||||
memberMapper.updateByPrimaryKeySelective(higherLevelMember);
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(umoq);
|
||||
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(100);
|
||||
accountTransaction.setMemberId(umoq.getMemberId());
|
||||
accountTransaction.setOrderId(umoq.getOrderId());
|
||||
accountTransaction.setRemarks("满五单加速流水");
|
||||
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 ){
|
||||
log.info("new order member {}" , JSONUtil.toJsonStr(currentMember));
|
||||
currentMember.setMemberLevel(MemberLevel.Consumer);
|
||||
}
|
||||
|
||||
//更新改会员为排队中
|
||||
currentMember.setOrderStatus(1);
|
||||
memberMapper.updateByPrimaryKeySelective(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);
|
||||
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());
|
||||
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);
|
||||
log.info("new Account Transaction {}" , JSONUtil.toJsonStr(accountTransaction));
|
||||
return revenueAmount;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 二级店长分润
|
||||
* @param lowerMember
|
||||
* @param higherMember
|
||||
* @param order
|
||||
*/
|
||||
private void twoLevelSplitProfit(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();
|
||||
}
|
||||
String ratioStr = profitRatio < 10 ? "0.0" + profitRatio : "0."+profitRatio;
|
||||
//查看上级的分润比例
|
||||
BigDecimal tenPercent = order.getPayAmount().multiply(new BigDecimal(ratioStr)).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())){
|
||||
twoLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
}else {
|
||||
threeLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
fourLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//平级关系
|
||||
}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.Partner);
|
||||
if(next != null){
|
||||
threeLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
fourLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 三级代理分润
|
||||
* @param lowerMember
|
||||
* @param higherMember
|
||||
* @param order
|
||||
*/
|
||||
private void threeLevelSplitProfit(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();
|
||||
}
|
||||
|
||||
String ratioStr = profitRatio < 10 ? "0.0" + profitRatio : "0."+profitRatio;
|
||||
|
||||
//查看上级的分润比例
|
||||
BigDecimal tenPercent = order.getPayAmount().multiply(new BigDecimal(ratioStr)).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, tenPercent);
|
||||
}else {
|
||||
fourLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
}
|
||||
}
|
||||
//平级关系
|
||||
}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, tenPercent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
* 四级市代分润
|
||||
* @param lowerMember
|
||||
* @param higherMember
|
||||
* @param order
|
||||
*/
|
||||
private void fourLevelSplitProfit(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();
|
||||
}
|
||||
|
||||
String ratioStr = profitRatio < 10 ? "0.0" + profitRatio : "0."+profitRatio;
|
||||
|
||||
//查看上级的分润比例
|
||||
BigDecimal tenPercent = order.getPayAmount().multiply(new BigDecimal(ratioStr)).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())){
|
||||
fourLevelSplitProfit(higherMember, next, order, tenPercent);
|
||||
}
|
||||
//平级关系
|
||||
}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);
|
||||
if(relationTree == null){
|
||||
return null;
|
||||
}
|
||||
UmsMember higherMember = memberMapper.selectByPrimaryKey(relationTree.getHigherLevelId());
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/************************会员退款逻辑******************************/
|
||||
|
||||
@Async
|
||||
@Transactional
|
||||
public void checkQueueOrderInfo(OmsOrder order, UmsMember currentMember) {
|
||||
|
||||
UmsMemberOrderQueueExample queueExample = new UmsMemberOrderQueueExample();
|
||||
queueExample.createCriteria().andOrderIdEqualTo(order.getId());
|
||||
List<UmsMemberOrderQueue> orderQueueList = umsMemberOrderQueueMapper.selectByExample(queueExample);
|
||||
//排队队列状态改变为退出
|
||||
if(!orderQueueList.isEmpty()){
|
||||
UmsMemberOrderQueue memberOrderQueue = orderQueueList.get(0);
|
||||
memberOrderQueue.setQuitQueueMark(UmsMemberOrderQueue.QUEUE_STATUS_QUIT);
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(memberOrderQueue);
|
||||
}
|
||||
|
||||
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_PREPARE_QUIT)
|
||||
.andQueueTypeEqualTo(UmsMemberOrderQueue.QUEUE_TYPE_FAST)
|
||||
.andMemberIdEqualTo(relationTree.getHigherLevelId());
|
||||
|
||||
List<UmsMemberOrderQueue> upQueueList = umsMemberOrderQueueMapper.selectByExample(orderQueueExample);
|
||||
//更新五连单中的上级订单,修改订单为继续排队,数量减去1
|
||||
if(!upQueueList.isEmpty()){
|
||||
UmsMemberOrderQueue upQueue = upQueueList.get(0);
|
||||
upQueue.setQuitQueueMark(UmsMemberOrderQueue.QUEUE_STATUS_WAIT);
|
||||
upQueue.setRemainNumber((upQueue.getRemainNumber() - 1));
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(upQueue);
|
||||
|
||||
//上级的冻结金额修改
|
||||
this.modifyFreezeAmountForRefund(upQueue);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void modifyFreezeAmountForRefund(UmsMemberOrderQueue upQueue) {
|
||||
//冻结上级会费的冻结金额
|
||||
UmsMember higherMember = memberMapper.selectByPrimaryKey(upQueue.getMemberId());
|
||||
//订单金额加入冻结余额
|
||||
BigDecimal freeze = higherMember.getFreeze();
|
||||
BigDecimal orderAmount = upQueue.getOrderAmount();
|
||||
higherMember.setFreeze(freeze.subtract(orderAmount));
|
||||
//更新数据库
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
UmsMemberAccountTransactionExample accountTransactionExample = new UmsMemberAccountTransactionExample();
|
||||
accountTransactionExample.createCriteria()
|
||||
.andTransactionStateEqualTo(UmsMemberAccountTransaction.TRANSACTION_STATE_NO)
|
||||
.andOrderIdEqualTo(upQueue.getOrderId());
|
||||
List<UmsMemberAccountTransaction> transactionList = umsMemberAccountTransactionMapper.selectByExample(accountTransactionExample);
|
||||
//该笔流水账
|
||||
if(!transactionList.isEmpty()){
|
||||
UmsMemberAccountTransaction umat = transactionList.get(0);
|
||||
umat.setTransactionState(UmsMemberAccountTransaction.TRANSACTION_STATE_OUT);
|
||||
umsMemberAccountTransactionMapper.updateByPrimaryKeySelective(umat);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,29 +1,23 @@
|
||||
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;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
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.*;
|
||||
import com.buy507.mall.model.*;
|
||||
import com.buy507.mall.portal.component.CancelOrderSender;
|
||||
import com.buy507.mall.portal.component.DistributeSender;
|
||||
import com.buy507.mall.portal.component.RedisLock;
|
||||
import com.buy507.mall.portal.dao.PortalOrderDao;
|
||||
import com.buy507.mall.portal.domain.*;
|
||||
import com.buy507.mall.portal.pay.wxpay.MyConfig;
|
||||
import com.buy507.mall.portal.pay.wxpay.WXPay;
|
||||
import com.buy507.mall.portal.pay.wxpay.WXPayUtil;
|
||||
import com.buy507.mall.portal.service.*;
|
||||
import lombok.extern.java.Log;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.google.gson.Gson;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -37,17 +31,17 @@ import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import com.buy507.mall.common.api.CommonResult;
|
||||
import com.buy507.mall.common.util.MD5Util;
|
||||
import com.buy507.mall.portal.component.CancelOrderSender;
|
||||
import com.buy507.mall.portal.component.DistributeSender;
|
||||
import com.buy507.mall.portal.component.RedisLock;
|
||||
import com.buy507.mall.portal.dao.PortalOrderDao;
|
||||
import com.buy507.mall.portal.pay.wxpay.MyConfig;
|
||||
import com.buy507.mall.portal.pay.wxpay.WXPay;
|
||||
import com.buy507.mall.portal.pay.wxpay.WXPayUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.google.gson.Gson;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.Charset;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
/**
|
||||
* 前台订单管理Service
|
||||
@@ -132,20 +126,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
@Autowired
|
||||
private MemberCommissionService memberCommissionService;
|
||||
|
||||
/**
|
||||
* 会员上下关系
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberRelationTreeMapper umsMemberRelationTreeMapper;
|
||||
|
||||
/**
|
||||
* 会员分成流水
|
||||
*/
|
||||
@Resource
|
||||
private UmsMemberAccountTransactionMapper umsMemberAccountTransactionMapper;
|
||||
@Autowired
|
||||
private MemberSplitProfitService memberSplitProfitService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private UmsMemberOrderQueueMapper umsMemberOrderQueueMapper;
|
||||
|
||||
|
||||
|
||||
@Value("${kuaidi100.url}")
|
||||
private String KUAIDI100_URL;
|
||||
@@ -1133,82 +1122,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
order.setDeleteStatus(1);
|
||||
order.setModifyTime(new Date());
|
||||
orderMapper.updateByPrimaryKey(order);
|
||||
|
||||
|
||||
executorService.execute(()->{
|
||||
//修改退款后队列业务
|
||||
this.checkQueueOrderInfo(order, currentMember);
|
||||
//支付宝退款
|
||||
// alipayService.refundPayment(order);
|
||||
});
|
||||
//修改退款后队列业务
|
||||
memberSplitProfitService.checkQueueOrderInfo(order, currentMember);
|
||||
|
||||
}
|
||||
|
||||
return CommonResult.success(null);
|
||||
}
|
||||
|
||||
private void checkQueueOrderInfo(OmsOrder order, UmsMember currentMember) {
|
||||
|
||||
UmsMemberOrderQueueExample queueExample = new UmsMemberOrderQueueExample();
|
||||
queueExample.createCriteria().andOrderIdEqualTo(order.getId());
|
||||
List<UmsMemberOrderQueue> orderQueueList = umsMemberOrderQueueMapper.selectByExample(queueExample);
|
||||
//排队队列状态改变为退出
|
||||
if(!orderQueueList.isEmpty()){
|
||||
UmsMemberOrderQueue memberOrderQueue = orderQueueList.get(0);
|
||||
memberOrderQueue.setQuitQueueMark(UmsMemberOrderQueue.QUEUE_STATUS_QUIT);
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(memberOrderQueue);
|
||||
}
|
||||
|
||||
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_PREPARE_QUIT)
|
||||
.andQueueTypeEqualTo(UmsMemberOrderQueue.QUEUE_TYPE_FAST)
|
||||
.andMemberIdEqualTo(relationTree.getHigherLevelId());
|
||||
|
||||
List<UmsMemberOrderQueue> upQueueList = umsMemberOrderQueueMapper.selectByExample(orderQueueExample);
|
||||
//更新五连单中的上级订单,修改订单为继续排队,数量减去1
|
||||
if(!upQueueList.isEmpty()){
|
||||
UmsMemberOrderQueue upQueue = upQueueList.get(0);
|
||||
upQueue.setQuitQueueMark(UmsMemberOrderQueue.QUEUE_STATUS_WAIT);
|
||||
upQueue.setRemainNumber((upQueue.getRemainNumber() - 1));
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(upQueue);
|
||||
|
||||
//上级的冻结金额修改
|
||||
this.modifyFreezeAmountForRefund(upQueue);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void modifyFreezeAmountForRefund(UmsMemberOrderQueue upQueue) {
|
||||
//冻结上级会费的冻结金额
|
||||
UmsMember higherMember = memberMapper.selectByPrimaryKey(upQueue.getMemberId());
|
||||
//订单金额加入冻结余额
|
||||
BigDecimal freeze = higherMember.getFreeze();
|
||||
BigDecimal orderAmount = upQueue.getOrderAmount();
|
||||
higherMember.setFreeze(freeze.subtract(orderAmount));
|
||||
//更新数据库
|
||||
memberMapper.updateByPrimaryKeySelective(higherMember);
|
||||
|
||||
UmsMemberAccountTransactionExample accountTransactionExample = new UmsMemberAccountTransactionExample();
|
||||
accountTransactionExample.createCriteria()
|
||||
.andTransactionStateEqualTo(UmsMemberAccountTransaction.TRANSACTION_STATE_NO)
|
||||
.andOrderIdEqualTo(upQueue.getOrderId());
|
||||
List<UmsMemberAccountTransaction> transactionList = umsMemberAccountTransactionMapper.selectByExample(accountTransactionExample);
|
||||
//该笔流水账
|
||||
if(!transactionList.isEmpty()){
|
||||
UmsMemberAccountTransaction umat = transactionList.get(0);
|
||||
umat.setTransactionState(UmsMemberAccountTransaction.TRANSACTION_STATE_OUT);
|
||||
umsMemberAccountTransactionMapper.updateByPrimaryKeySelective(umat);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
@@ -1785,18 +1706,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
@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);
|
||||
// try {
|
||||
verifyResult = true;//AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);
|
||||
|
||||
if (verifyResult) {
|
||||
// 签名验证通过
|
||||
@@ -1811,450 +1727,31 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
||||
OmsOrder order = list.get(0);
|
||||
//订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
|
||||
if (order != null && order.getStatus() == 0) {
|
||||
Date date = new Date();
|
||||
//提货方式:0->自提;1->物流
|
||||
if(order.getDeliveryType() == 0) {
|
||||
order.setStatus(2); //已发货
|
||||
} else {
|
||||
order.setStatus(1); //待发货
|
||||
}
|
||||
//支付方式:0->未支付;1->支付宝;2->微信;3->线下支付
|
||||
order.setPayType(1);
|
||||
order.setModifyTime(date);
|
||||
order.setPaymentTime(date);
|
||||
orderMapper.updateByPrimaryKey(order);
|
||||
/**
|
||||
* 线程池处理逻辑
|
||||
* 会员分润逻辑
|
||||
*/
|
||||
executorService.submit(()->{
|
||||
// 更新订单状态及预计算分润
|
||||
this.updateOderAndMemberInfo(order);
|
||||
});
|
||||
memberSplitProfitService.updateOderAndMemberInfo(order);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (AlipayApiException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateOderAndMemberInfo(OmsOrder order) {
|
||||
|
||||
Date date = new Date();
|
||||
//提货方式:0->自提;1->物流
|
||||
if(order.getDeliveryType() == 0) {
|
||||
order.setStatus(2); //已发货
|
||||
} else {
|
||||
order.setStatus(1); //待发货
|
||||
}
|
||||
//支付方式:0->未支付;1->支付宝;2->微信;3->线下支付
|
||||
order.setPayType(1);
|
||||
order.setModifyTime(date);
|
||||
order.setPaymentTime(date);
|
||||
orderMapper.updateByPrimaryKey(order);
|
||||
|
||||
UmsMember member = memberMapper.selectByPrimaryKey(order.getMemberId());
|
||||
//找到上级会员
|
||||
UmsMember higherLevelMember = this.findInOrderQueueMember(member.getId());;
|
||||
/**
|
||||
* 先验证该订单是否是五联单加速,如果不是则普通计算上级提成
|
||||
* 如果是提成,则全额给上级
|
||||
*/
|
||||
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 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(higherLevelMember.getId());
|
||||
|
||||
List<UmsMemberOrderQueue> orderQueueList = umsMemberOrderQueueMapper.selectByExample(orderQueueExample);
|
||||
//上级订单队列中是否有加速5联单
|
||||
if(!orderQueueList.isEmpty()){
|
||||
UmsMemberOrderQueue umoq = orderQueueList.get(0);
|
||||
if(umoq.getRemainNumber() <= 4){
|
||||
//没有加速满5单
|
||||
umoq.setRemainNumber(1 + umoq.getRemainNumber());
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(umoq);
|
||||
|
||||
}else {
|
||||
//设置本单待退出,且5单满24小时未退款
|
||||
umoq.setQuitQueueMark(UmsMemberOrderQueue.QUEUE_PREPARE_QUIT);
|
||||
//冻结上级会费的冻结金额
|
||||
|
||||
//订单金额加入冻结余额
|
||||
BigDecimal freeze = higherLevelMember.getFreeze();
|
||||
BigDecimal orderAmount = umoq.getOrderAmount();
|
||||
higherLevelMember.setFreeze(freeze.add(orderAmount));
|
||||
//更新数据库
|
||||
memberMapper.updateByPrimaryKeySelective(higherLevelMember);
|
||||
umsMemberOrderQueueMapper.updateByPrimaryKeySelective(umoq);
|
||||
|
||||
UmsMemberAccountTransaction accountTransaction = new UmsMemberAccountTransaction();
|
||||
accountTransaction.setCommissionRatio(100);
|
||||
accountTransaction.setMemberId(umoq.getMemberId());
|
||||
accountTransaction.setOrderId(umoq.getOrderId());
|
||||
accountTransaction.setRemarks("满五单加速流水");
|
||||
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;
|
||||
// } catch (AlipayApiException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.buy507.mall.portal;
|
||||
|
||||
import com.buy507.mall.portal.service.OmsPortalOrderService;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class OmsPortalOrderServiceTest {
|
||||
|
||||
@Autowired
|
||||
private OmsPortalOrderService portalOrderService;
|
||||
|
||||
|
||||
/**
|
||||
* 支付宝回调逻辑 测试
|
||||
*/
|
||||
@Test
|
||||
public void alipayCallbackTest() {
|
||||
Map params = new HashMap<>();
|
||||
params.put("trade_status", "TRADE_SUCCESS");
|
||||
params.put("out_trade_no", "23123wwww2");
|
||||
|
||||
portalOrderService.alipayCallback(params);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user