加入队列分润逻辑
This commit is contained in:
@@ -187,10 +187,11 @@ CREATE TABLE `dms_member_month_reward_record` (
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='会员月度奖励发放记录表';
|
) 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 `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 `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 `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_status int(1) null COMMENT '分销结算状态(0->未结算;1->已结算;2->不结算)' default '0';
|
||||||
alter table `oms_order` add column settlement_time datetime null COMMENT '分销结算时间';
|
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`;
|
DROP TABLE IF EXISTS `ums_member`;
|
||||||
CREATE TABLE IF NOT EXISTS `ums_member` (
|
CREATE TABLE IF NOT EXISTS `ums_member` (
|
||||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
`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 '用户名',
|
`username` varchar(64) DEFAULT NULL COMMENT '用户名',
|
||||||
`password` varchar(64) DEFAULT NULL COMMENT '密码',
|
`password` varchar(64) DEFAULT NULL COMMENT '密码',
|
||||||
`nickname` 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` (
|
CREATE TABLE `ums_member_relation_tree` (
|
||||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
||||||
`member_id` bigint(20) NULL DEFAULT 0 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',
|
`higher_level_id` bigint(20) NULL DEFAULT 0 COMMENT '上级会员id',
|
||||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
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 '订单金额',
|
`order_amount` decimal(10, 2) NULL DEFAULT 0 COMMENT '订单金额',
|
||||||
`queue_index` bigint(20) NULL DEFAULT 0 COMMENT '队列位置',
|
`queue_index` bigint(20) NULL DEFAULT 0 COMMENT '队列位置',
|
||||||
`quit_queue_mark` int(1) NULL DEFAULT 0 COMMENT '0 未退出,1 准备退队列, 2退出队列',
|
`quit_queue_mark` int(1) NULL DEFAULT 0 COMMENT '0 未退出,1 准备退队列, 2退出队列',
|
||||||
`queue_type` int(1) NULL DEFAULT 0 COMMENT '0 普通队列,1 加速队列',
|
`queue_type` int(1) NULL DEFAULT 0 COMMENT '0 普通队列,1 加速队列',
|
||||||
`remain_number` int(1) NULL DEFAULT 5 COMMENT '加速单剩余数量',
|
`remain_number` int(1) NULL DEFAULT 5 COMMENT '加速单剩余数量',
|
||||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会员订单队列' ROW_FORMAT = DYNAMIC;
|
) 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',
|
`member_id` bigint(20) NULL DEFAULT 0 COMMENT '会员id',
|
||||||
`order_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 '进帐金额',
|
`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 '备注',
|
`remarks` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
`commission_ratio` int(10) NULL DEFAULT 0 COMMENT '提成比例',
|
`commission_ratio` int(10) NULL DEFAULT 0 COMMENT '提成比例',
|
||||||
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(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
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '会员账户流水' ROW_FORMAT = DYNAMIC;
|
) 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("优选专区和商品的关系")
|
@ApiModelProperty("优选专区和商品的关系")
|
||||||
private List<CmsPrefrenceAreaProductRelation> prefrenceAreaProductRelationList;
|
private List<CmsPrefrenceAreaProductRelation> prefrenceAreaProductRelationList;
|
||||||
|
|
||||||
|
|
||||||
|
public List<Long> productCategoryId;
|
||||||
|
|
||||||
|
public void setProductCategoryId(List<Long> productCategoryId) {
|
||||||
|
this.productCategoryId = productCategoryId;
|
||||||
|
}
|
||||||
|
|
||||||
public List<PmsProductLadder> getProductLadderList() {
|
public List<PmsProductLadder> getProductLadderList() {
|
||||||
return productLadderList;
|
return productLadderList;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public class PmsProductServiceImpl implements PmsProductService {
|
|||||||
PmsProduct product = productParam;
|
PmsProduct product = productParam;
|
||||||
product.setId(null);
|
product.setId(null);
|
||||||
product.setVerifyStatus(1);
|
product.setVerifyStatus(1);
|
||||||
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey(product.getProductCategoryId());
|
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey( productParam.productCategoryId.get(0));
|
||||||
product.setProductCategoryName(productCategory.getName());
|
product.setProductCategoryName(productCategory.getName());
|
||||||
productMapper.insertSelective(product);
|
productMapper.insertSelective(product);
|
||||||
//根据促销类型设置价格:、阶梯价格、满减价格
|
//根据促销类型设置价格:、阶梯价格、满减价格
|
||||||
@@ -134,7 +134,7 @@ public class PmsProductServiceImpl implements PmsProductService {
|
|||||||
PmsProduct product = productParam;
|
PmsProduct product = productParam;
|
||||||
product.setId(id);
|
product.setId(id);
|
||||||
product.setVerifyStatus(1);
|
product.setVerifyStatus(1);
|
||||||
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey(product.getProductCategoryId());
|
PmsProductCategory productCategory = productCategoryMapper.selectByPrimaryKey(productParam.productCategoryId.get(0));
|
||||||
product.setProductCategoryName(productCategory.getName());
|
product.setProductCategoryName(productCategory.getName());
|
||||||
productMapper.updateByPrimaryKeySelective(product);
|
productMapper.updateByPrimaryKeySelective(product);
|
||||||
//会员价格
|
//会员价格
|
||||||
|
|||||||
@@ -7,15 +7,15 @@ package com.buy507.mall.model;
|
|||||||
*/
|
*/
|
||||||
public enum MemberLevel {
|
public enum MemberLevel {
|
||||||
/**普通用户**/
|
/**普通用户**/
|
||||||
Member(1),
|
Member(0),
|
||||||
/**vip会员**/
|
/**vip会员**/
|
||||||
Consumer(2),
|
Consumer(1),
|
||||||
/**店长**/
|
/**店长**/
|
||||||
Partner(3),
|
Partner(2),
|
||||||
/**代理**/
|
/**代理**/
|
||||||
Diamond(4),
|
Diamond(3),
|
||||||
/** 市代 **/
|
/** 市代 **/
|
||||||
OneDiamond(5),
|
OneDiamond(4),
|
||||||
TwoDiamond(6), //中级合作商
|
TwoDiamond(6), //中级合作商
|
||||||
ThreeDiamond(7), //高级合作商
|
ThreeDiamond(7), //高级合作商
|
||||||
FourDiamond(8); //特级合作商
|
FourDiamond(8); //特级合作商
|
||||||
@@ -30,4 +30,12 @@ public enum MemberLevel {
|
|||||||
return value;
|
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")
|
@ApiModelProperty(value = "会员id")
|
||||||
private Long memberId;
|
private Long memberId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "下级会员id")
|
|
||||||
private Long lowerLevelId;
|
|
||||||
|
|
||||||
@ApiModelProperty(value = "上级会员id")
|
@ApiModelProperty(value = "上级会员id")
|
||||||
private Long higherLevelId;
|
private Long higherLevelId;
|
||||||
|
|
||||||
@@ -38,14 +35,6 @@ public class UmsMemberRelationTree implements Serializable {
|
|||||||
this.memberId = memberId;
|
this.memberId = memberId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getLowerLevelId() {
|
|
||||||
return lowerLevelId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLowerLevelId(Long lowerLevelId) {
|
|
||||||
this.lowerLevelId = lowerLevelId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Long getHigherLevelId() {
|
public Long getHigherLevelId() {
|
||||||
return higherLevelId;
|
return higherLevelId;
|
||||||
}
|
}
|
||||||
@@ -70,7 +59,6 @@ public class UmsMemberRelationTree implements Serializable {
|
|||||||
sb.append("Hash = ").append(hashCode());
|
sb.append("Hash = ").append(hashCode());
|
||||||
sb.append(", id=").append(id);
|
sb.append(", id=").append(id);
|
||||||
sb.append(", memberId=").append(memberId);
|
sb.append(", memberId=").append(memberId);
|
||||||
sb.append(", lowerLevelId=").append(lowerLevelId);
|
|
||||||
sb.append(", higherLevelId=").append(higherLevelId);
|
sb.append(", higherLevelId=").append(higherLevelId);
|
||||||
sb.append(", createTime=").append(createTime);
|
sb.append(", createTime=").append(createTime);
|
||||||
sb.append(", serialVersionUID=").append(serialVersionUID);
|
sb.append(", serialVersionUID=").append(serialVersionUID);
|
||||||
|
|||||||
@@ -225,66 +225,6 @@ public class UmsMemberRelationTreeExample {
|
|||||||
return (Criteria) this;
|
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() {
|
public Criteria andHigherLevelIdIsNull() {
|
||||||
addCriterion("higher_level_id is null");
|
addCriterion("higher_level_id is null");
|
||||||
return (Criteria) this;
|
return (Criteria) this;
|
||||||
|
|||||||
@@ -109,11 +109,10 @@
|
|||||||
SELECT LAST_INSERT_ID()
|
SELECT LAST_INSERT_ID()
|
||||||
</selectKey>
|
</selectKey>
|
||||||
insert into ums_member_account_transaction (member_id, order_id, revenue_amount,
|
insert into ums_member_account_transaction (member_id, order_id, revenue_amount,
|
||||||
transaction_state, remarks, commission_ratio,
|
transaction_state, remarks, commission_ratio, transfer_payment_time)
|
||||||
create_time, transfer_payment_time)
|
|
||||||
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{revenueAmount,jdbcType=DECIMAL},
|
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{revenueAmount,jdbcType=DECIMAL},
|
||||||
#{transactionState,jdbcType=INTEGER}, #{remarks,jdbcType=VARCHAR}, #{commissionRatio,jdbcType=INTEGER},
|
#{transactionState,jdbcType=INTEGER}, #{remarks,jdbcType=VARCHAR}, #{commissionRatio,jdbcType=INTEGER},
|
||||||
#{createTime,jdbcType=TIMESTAMP}, #{transferPaymentTime,jdbcType=TIMESTAMP})
|
#{transferPaymentTime,jdbcType=TIMESTAMP})
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberAccountTransaction">
|
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberAccountTransaction">
|
||||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
|
|||||||
@@ -533,8 +533,8 @@
|
|||||||
balance = #{balance,jdbcType=DECIMAL},
|
balance = #{balance,jdbcType=DECIMAL},
|
||||||
freeze = #{freeze,jdbcType=DECIMAL},
|
freeze = #{freeze,jdbcType=DECIMAL},
|
||||||
detail_address = #{detailAddress,jdbcType=VARCHAR},
|
detail_address = #{detailAddress,jdbcType=VARCHAR},
|
||||||
real_name = #{realName,jdbcType=VARCHAR}
|
real_name = #{realName,jdbcType=VARCHAR},
|
||||||
order_status = #{orderStatus,jdbcType=INTEGER},
|
order_status = #{orderStatus,jdbcType=INTEGER}
|
||||||
where id = #{id,jdbcType=BIGINT}
|
where id = #{id,jdbcType=BIGINT}
|
||||||
</update>
|
</update>
|
||||||
<select id="selectPhoneExists" parameterType="java.lang.String" resultMap="BaseResultMap">
|
<select id="selectPhoneExists" parameterType="java.lang.String" resultMap="BaseResultMap">
|
||||||
|
|||||||
@@ -109,11 +109,10 @@
|
|||||||
SELECT LAST_INSERT_ID()
|
SELECT LAST_INSERT_ID()
|
||||||
</selectKey>
|
</selectKey>
|
||||||
insert into ums_member_order_queue (member_id, order_id, order_amount,
|
insert into ums_member_order_queue (member_id, order_id, order_amount,
|
||||||
queue_index, quit_queue_mark, queue_type,
|
queue_index, quit_queue_mark, queue_type,remain_number)
|
||||||
remain_number, create_time)
|
|
||||||
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{orderAmount,jdbcType=DECIMAL},
|
values (#{memberId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, #{orderAmount,jdbcType=DECIMAL},
|
||||||
#{queueIndex,jdbcType=BIGINT}, #{quitQueueMark,jdbcType=INTEGER}, #{queueType,jdbcType=INTEGER},
|
#{queueIndex,jdbcType=BIGINT}, #{quitQueueMark,jdbcType=INTEGER}, #{queueType,jdbcType=INTEGER},
|
||||||
#{remainNumber,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP})
|
#{remainNumber,jdbcType=INTEGER})
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberOrderQueue">
|
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberOrderQueue">
|
||||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<resultMap id="BaseResultMap" type="com.buy507.mall.model.UmsMemberRelationTree">
|
<resultMap id="BaseResultMap" type="com.buy507.mall.model.UmsMemberRelationTree">
|
||||||
<id column="id" jdbcType="BIGINT" property="id" />
|
<id column="id" jdbcType="BIGINT" property="id" />
|
||||||
<result column="member_id" jdbcType="BIGINT" property="memberId" />
|
<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="higher_level_id" jdbcType="BIGINT" property="higherLevelId" />
|
||||||
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
@@ -67,7 +66,7 @@
|
|||||||
</where>
|
</where>
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="Base_Column_List">
|
<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>
|
</sql>
|
||||||
<select id="selectByExample" parameterType="com.buy507.mall.model.UmsMemberRelationTreeExample" resultMap="BaseResultMap">
|
<select id="selectByExample" parameterType="com.buy507.mall.model.UmsMemberRelationTreeExample" resultMap="BaseResultMap">
|
||||||
select
|
select
|
||||||
@@ -103,10 +102,10 @@
|
|||||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
SELECT LAST_INSERT_ID()
|
SELECT LAST_INSERT_ID()
|
||||||
</selectKey>
|
</selectKey>
|
||||||
insert into ums_member_relation_tree (member_id, lower_level_id, higher_level_id,
|
insert into ums_member_relation_tree (member_id, higher_level_id, create_time
|
||||||
create_time)
|
)
|
||||||
values (#{memberId,jdbcType=BIGINT}, #{lowerLevelId,jdbcType=BIGINT}, #{higherLevelId,jdbcType=BIGINT},
|
values (#{memberId,jdbcType=BIGINT}, #{higherLevelId,jdbcType=BIGINT}, #{createTime,jdbcType=TIMESTAMP}
|
||||||
#{createTime,jdbcType=TIMESTAMP})
|
)
|
||||||
</insert>
|
</insert>
|
||||||
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberRelationTree">
|
<insert id="insertSelective" parameterType="com.buy507.mall.model.UmsMemberRelationTree">
|
||||||
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
|
||||||
@@ -117,9 +116,6 @@
|
|||||||
<if test="memberId != null">
|
<if test="memberId != null">
|
||||||
member_id,
|
member_id,
|
||||||
</if>
|
</if>
|
||||||
<if test="lowerLevelId != null">
|
|
||||||
lower_level_id,
|
|
||||||
</if>
|
|
||||||
<if test="higherLevelId != null">
|
<if test="higherLevelId != null">
|
||||||
higher_level_id,
|
higher_level_id,
|
||||||
</if>
|
</if>
|
||||||
@@ -131,9 +127,6 @@
|
|||||||
<if test="memberId != null">
|
<if test="memberId != null">
|
||||||
#{memberId,jdbcType=BIGINT},
|
#{memberId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
<if test="lowerLevelId != null">
|
|
||||||
#{lowerLevelId,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
<if test="higherLevelId != null">
|
<if test="higherLevelId != null">
|
||||||
#{higherLevelId,jdbcType=BIGINT},
|
#{higherLevelId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
@@ -157,9 +150,6 @@
|
|||||||
<if test="record.memberId != null">
|
<if test="record.memberId != null">
|
||||||
member_id = #{record.memberId,jdbcType=BIGINT},
|
member_id = #{record.memberId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
<if test="record.lowerLevelId != null">
|
|
||||||
lower_level_id = #{record.lowerLevelId,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
<if test="record.higherLevelId != null">
|
<if test="record.higherLevelId != null">
|
||||||
higher_level_id = #{record.higherLevelId,jdbcType=BIGINT},
|
higher_level_id = #{record.higherLevelId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
@@ -175,7 +165,6 @@
|
|||||||
update ums_member_relation_tree
|
update ums_member_relation_tree
|
||||||
set id = #{record.id,jdbcType=BIGINT},
|
set id = #{record.id,jdbcType=BIGINT},
|
||||||
member_id = #{record.memberId,jdbcType=BIGINT},
|
member_id = #{record.memberId,jdbcType=BIGINT},
|
||||||
lower_level_id = #{record.lowerLevelId,jdbcType=BIGINT},
|
|
||||||
higher_level_id = #{record.higherLevelId,jdbcType=BIGINT},
|
higher_level_id = #{record.higherLevelId,jdbcType=BIGINT},
|
||||||
create_time = #{record.createTime,jdbcType=TIMESTAMP}
|
create_time = #{record.createTime,jdbcType=TIMESTAMP}
|
||||||
<if test="_parameter != null">
|
<if test="_parameter != null">
|
||||||
@@ -188,9 +177,6 @@
|
|||||||
<if test="memberId != null">
|
<if test="memberId != null">
|
||||||
member_id = #{memberId,jdbcType=BIGINT},
|
member_id = #{memberId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
<if test="lowerLevelId != null">
|
|
||||||
lower_level_id = #{lowerLevelId,jdbcType=BIGINT},
|
|
||||||
</if>
|
|
||||||
<if test="higherLevelId != null">
|
<if test="higherLevelId != null">
|
||||||
higher_level_id = #{higherLevelId,jdbcType=BIGINT},
|
higher_level_id = #{higherLevelId,jdbcType=BIGINT},
|
||||||
</if>
|
</if>
|
||||||
@@ -203,7 +189,6 @@
|
|||||||
<update id="updateByPrimaryKey" parameterType="com.buy507.mall.model.UmsMemberRelationTree">
|
<update id="updateByPrimaryKey" parameterType="com.buy507.mall.model.UmsMemberRelationTree">
|
||||||
update ums_member_relation_tree
|
update ums_member_relation_tree
|
||||||
set member_id = #{memberId,jdbcType=BIGINT},
|
set member_id = #{memberId,jdbcType=BIGINT},
|
||||||
lower_level_id = #{lowerLevelId,jdbcType=BIGINT},
|
|
||||||
higher_level_id = #{higherLevelId,jdbcType=BIGINT},
|
higher_level_id = #{higherLevelId,jdbcType=BIGINT},
|
||||||
create_time = #{createTime,jdbcType=TIMESTAMP}
|
create_time = #{createTime,jdbcType=TIMESTAMP}
|
||||||
where id = #{id,jdbcType=BIGINT}
|
where id = #{id,jdbcType=BIGINT}
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ public class MemberCommissionServiceImpl implements MemberCommissionService {
|
|||||||
private ExecutorService executorService = Executors.newFixedThreadPool(10);
|
private ExecutorService executorService = Executors.newFixedThreadPool(10);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static Long modulus = new Long(5);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void computeCommission(OmsOrder order, UmsMember currentMember) {
|
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
|
* @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;
|
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.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.alipay.api.AlipayApiException;
|
import com.buy507.mall.common.api.CommonResult;
|
||||||
import com.alipay.api.internal.util.AlipaySignature;
|
import com.buy507.mall.common.util.MD5Util;
|
||||||
import com.buy507.mall.mapper.*;
|
import com.buy507.mall.mapper.*;
|
||||||
import com.buy507.mall.model.*;
|
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.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 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.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@@ -37,17 +31,17 @@ import org.springframework.util.StringUtils;
|
|||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
import com.buy507.mall.common.api.CommonResult;
|
import javax.annotation.Resource;
|
||||||
import com.buy507.mall.common.util.MD5Util;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import com.buy507.mall.portal.component.CancelOrderSender;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import com.buy507.mall.portal.component.DistributeSender;
|
import java.io.ByteArrayOutputStream;
|
||||||
import com.buy507.mall.portal.component.RedisLock;
|
import java.io.InputStream;
|
||||||
import com.buy507.mall.portal.dao.PortalOrderDao;
|
import java.math.BigDecimal;
|
||||||
import com.buy507.mall.portal.pay.wxpay.MyConfig;
|
import java.net.URI;
|
||||||
import com.buy507.mall.portal.pay.wxpay.WXPay;
|
import java.nio.charset.Charset;
|
||||||
import com.buy507.mall.portal.pay.wxpay.WXPayUtil;
|
import java.text.SimpleDateFormat;
|
||||||
import com.github.pagehelper.PageHelper;
|
import java.util.*;
|
||||||
import com.google.gson.Gson;
|
import java.util.concurrent.ExecutorService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 前台订单管理Service
|
* 前台订单管理Service
|
||||||
@@ -132,20 +126,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private MemberCommissionService memberCommissionService;
|
private MemberCommissionService memberCommissionService;
|
||||||
|
|
||||||
/**
|
|
||||||
* 会员上下关系
|
|
||||||
*/
|
|
||||||
@Resource
|
|
||||||
private UmsMemberRelationTreeMapper umsMemberRelationTreeMapper;
|
|
||||||
|
|
||||||
/**
|
@Autowired
|
||||||
* 会员分成流水
|
private MemberSplitProfitService memberSplitProfitService;
|
||||||
*/
|
|
||||||
@Resource
|
|
||||||
private UmsMemberAccountTransactionMapper umsMemberAccountTransactionMapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UmsMemberOrderQueueMapper umsMemberOrderQueueMapper;
|
private UmsMemberOrderQueueMapper umsMemberOrderQueueMapper;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Value("${kuaidi100.url}")
|
@Value("${kuaidi100.url}")
|
||||||
private String KUAIDI100_URL;
|
private String KUAIDI100_URL;
|
||||||
@@ -1133,82 +1122,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
order.setDeleteStatus(1);
|
order.setDeleteStatus(1);
|
||||||
order.setModifyTime(new Date());
|
order.setModifyTime(new Date());
|
||||||
orderMapper.updateByPrimaryKey(order);
|
orderMapper.updateByPrimaryKey(order);
|
||||||
|
//修改退款后队列业务
|
||||||
|
memberSplitProfitService.checkQueueOrderInfo(order, currentMember);
|
||||||
executorService.execute(()->{
|
|
||||||
//修改退款后队列业务
|
|
||||||
this.checkQueueOrderInfo(order, currentMember);
|
|
||||||
//支付宝退款
|
|
||||||
// alipayService.refundPayment(order);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return CommonResult.success(null);
|
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
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
@@ -1785,18 +1706,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
@Value("${becomeVipAmount}")
|
@Value("${becomeVipAmount}")
|
||||||
private String becomeVipAmount;
|
private String becomeVipAmount;
|
||||||
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private UmsMemberLevelMapper umsMemberLevelMapper;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void alipayCallback(Map<String, String> params) {
|
public void alipayCallback(Map<String, String> params) {
|
||||||
LOGGER.info("============开始处理支付宝的支付异步通知 接收到参数 {}", JSONUtil.toJsonStr(params));
|
LOGGER.info("============开始处理支付宝的支付异步通知 接收到参数 {}", JSONUtil.toJsonStr(params));
|
||||||
// 验证签名
|
// 验证签名
|
||||||
boolean verifyResult;
|
boolean verifyResult;
|
||||||
try {
|
// try {
|
||||||
verifyResult = AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);
|
verifyResult = true;//AlipaySignature.rsaCheckV1(params, alipayPublicKey, charset, signType);
|
||||||
|
|
||||||
if (verifyResult) {
|
if (verifyResult) {
|
||||||
// 签名验证通过
|
// 签名验证通过
|
||||||
@@ -1811,450 +1727,31 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
|
|||||||
OmsOrder order = list.get(0);
|
OmsOrder order = list.get(0);
|
||||||
//订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
|
//订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单
|
||||||
if (order != null && order.getStatus() == 0) {
|
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(()->{
|
memberSplitProfitService.updateOderAndMemberInfo(order);
|
||||||
// 更新订单状态及预计算分润
|
|
||||||
this.updateOderAndMemberInfo(order);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (AlipayApiException e) {
|
// } catch (AlipayApiException e) {
|
||||||
e.printStackTrace();
|
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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