Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
huhu-partner
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guanchen
huhu-partner
Commits
0e42deca
Commit
0e42deca
authored
Jul 09, 2019
by
guanchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加代理商奖励推送
bug修复
parent
ff529cf2
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
138 additions
and
16 deletions
+138
-16
RedisConfiguration.java
...va/com/lanren/huhu/partner/config/RedisConfiguration.java
+25
-0
Constants.java
...ain/java/com/lanren/huhu/partner/constants/Constants.java
+5
-0
AgentManager.java
...in/java/com/lanren/huhu/partner/manager/AgentManager.java
+4
-3
AgentRewardQueueMessage.java
...om/lanren/huhu/partner/model/AgentRewardQueueMessage.java
+24
-0
AgentRewardQueueTask.java
...om/lanren/huhu/partner/schedule/AgentRewardQueueTask.java
+79
-13
application.yml
src/main/resources/application.yml
+1
-0
No files found.
src/main/java/com/lanren/huhu/partner/config/RedisConfiguration.java
View file @
0e42deca
...
@@ -2,17 +2,24 @@ package com.lanren.huhu.partner.config;
...
@@ -2,17 +2,24 @@ package com.lanren.huhu.partner.config;
import
com.alibaba.fastjson.parser.ParserConfig
;
import
com.alibaba.fastjson.parser.ParserConfig
;
import
com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer
;
import
com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer
;
import
org.apache.commons.pool2.impl.GenericObjectPoolConfig
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.cache.RedisCacheConfiguration
;
import
org.springframework.data.redis.cache.RedisCacheConfiguration
;
import
org.springframework.data.redis.cache.RedisCacheManager
;
import
org.springframework.data.redis.cache.RedisCacheManager
;
import
org.springframework.data.redis.cache.RedisCacheWriter
;
import
org.springframework.data.redis.cache.RedisCacheWriter
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.RedisPassword
;
import
org.springframework.data.redis.connection.RedisStandaloneConfiguration
;
import
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
;
import
org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.serializer.RedisSerializationContext
;
import
org.springframework.data.redis.serializer.RedisSerializationContext
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
org.springframework.util.ObjectUtils
;
/**
/**
* @author houseme
* @author houseme
...
@@ -60,4 +67,22 @@ public class RedisConfiguration {
...
@@ -60,4 +67,22 @@ public class RedisConfiguration {
return
redisTemplate
;
return
redisTemplate
;
}
}
@Bean
public
RedisTemplate
redisTemplatePush
(
@Value
(
"${spring.redis.database2}"
)
int
pushDb
,
@Value
(
"${spring.redis.host}"
)
String
host
,
@Value
(
"${spring.redis.port}"
)
int
port
,
@Value
(
"${spring.redis.password}"
)
String
password
)
{
RedisStandaloneConfiguration
configuration
=
new
RedisStandaloneConfiguration
();
configuration
.
setHostName
(
host
);
configuration
.
setPort
(
port
);
configuration
.
setDatabase
(
pushDb
);
RedisPassword
redisPassword
=
RedisPassword
.
of
(
password
);
configuration
.
setPassword
(
redisPassword
);
GenericObjectPoolConfig
genericObjectPoolConfig
=
new
GenericObjectPoolConfig
();
LettucePoolingClientConfiguration
.
LettucePoolingClientConfigurationBuilder
builder
=
LettucePoolingClientConfiguration
.
builder
();
builder
.
poolConfig
(
genericObjectPoolConfig
);
LettuceConnectionFactory
connectionFactory
=
new
LettuceConnectionFactory
(
configuration
,
builder
.
build
());
connectionFactory
.
afterPropertiesSet
();
return
redisTemplate
(
connectionFactory
);
}
}
}
src/main/java/com/lanren/huhu/partner/constants/Constants.java
View file @
0e42deca
...
@@ -68,6 +68,11 @@ public class Constants {
...
@@ -68,6 +68,11 @@ public class Constants {
*/
*/
public
static
final
BigDecimal
MIN_REWARD
=
new
BigDecimal
(
"0.000001"
);
public
static
final
BigDecimal
MIN_REWARD
=
new
BigDecimal
(
"0.000001"
);
/**
* 代理商奖励push队列
*/
public
static
final
String
AGENT_REWARD_PUSH_KEY
=
"agent:reward:queue"
;
static
{
static
{
/**
/**
* 代理商平推奖励比例配置
* 代理商平推奖励比例配置
...
...
src/main/java/com/lanren/huhu/partner/manager/AgentManager.java
View file @
0e42deca
...
@@ -18,8 +18,7 @@ import java.math.BigDecimal;
...
@@ -18,8 +18,7 @@ import java.math.BigDecimal;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
static
com
.
lanren
.
huhu
.
partner
.
constants
.
Constants
.
PARENT_COLUMN_NAME_CENGJI
;
import
static
com
.
lanren
.
huhu
.
partner
.
constants
.
Constants
.*;
import
static
com
.
lanren
.
huhu
.
partner
.
constants
.
Constants
.
PARENT_COLUMN_NAME_PINGTUI
;
/**
/**
* @author chen
* @author chen
...
@@ -66,12 +65,14 @@ public class AgentManager {
...
@@ -66,12 +65,14 @@ public class AgentManager {
agentRewardMessage
.
setReferenceId
(
"9999"
);
agentRewardMessage
.
setReferenceId
(
"9999"
);
agentRewardMessage
.
setAgentId
(
33
);
agentRewardMessage
.
setAgentId
(
33
);
agentRewardMessage
.
setAgentReward
(
new
BigDecimal
(
5
));
agentRewardMessage
.
setAgentReward
(
new
BigDecimal
(
5
));
agentRewardMessage
.
setSourceUserPayment
(
new
BigDecimal
(
5
));
agentRewardMessage
.
setSettleState
(-
100
);
agentRewardMessage
.
setSettleState
(-
100
);
agentRewardMessage
.
setOrderType
(
"taobao"
);
agentRewardMessage
.
setOrderType
(
"taobao"
);
agentRewardMessage
.
setOrderSn
(
"507596802910534728"
);
agentRewardMessage
.
setOrderSn
(
"507596802910534728"
);
agentRewardMessage
.
setSubOrderSn
(
"507596802910534728"
);
agentRewardMessage
.
setSubOrderSn
(
"507596802910534728"
);
agentRewardMessage
.
setOrderCommission
(
new
BigDecimal
(
"35.400000"
));
agentRewardMessage
.
setOrderCommission
(
new
BigDecimal
(
"35.400000"
));
ops
.
leftPush
(
"agent_reward_redis_city_key"
,
JSON
.
toJSONString
(
agentRewardMessage
));
logger
.
info
(
"写入队列"
);
ops
.
leftPush
(
AGENT_REWARD_QUEUE_KEY
,
JSON
.
toJSONString
(
agentRewardMessage
));
return
new
Result
<>();
return
new
Result
<>();
}
}
/**
/**
...
...
src/main/java/com/lanren/huhu/partner/model/AgentRewardQueueMessage.java
0 → 100644
View file @
0e42deca
package
com
.
lanren
.
huhu
.
partner
.
model
;
import
com.lanren.huhu.partner.model.base.BaseModel
;
import
lombok.Data
;
import
java.math.BigDecimal
;
/**
* @author chen
* @title: AgentRewardQueueMessage
* @projectName partner
* @description: TODO
* @package com.lanren.huhu.partner.model
* @date 2019-07-09 16:05
*/
@Data
public
class
AgentRewardQueueMessage
extends
BaseModel
{
private
int
userId
;
private
int
sourceUserId
;
private
String
money
;
private
int
partnerLevel
;
private
long
time
;
private
int
rewardType
;
}
src/main/java/com/lanren/huhu/partner/schedule/AgentRewardQueueTask.java
View file @
0e42deca
...
@@ -3,8 +3,10 @@ package com.lanren.huhu.partner.schedule;
...
@@ -3,8 +3,10 @@ package com.lanren.huhu.partner.schedule;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.lanren.huhu.partner.domain.AgentReward
;
import
com.lanren.huhu.partner.domain.AgentReward
;
import
com.lanren.huhu.partner.domain.PartnerAccount
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.domain.UserAgent
;
import
com.lanren.huhu.partner.model.AgentRewardMessage
;
import
com.lanren.huhu.partner.model.AgentRewardMessage
;
import
com.lanren.huhu.partner.model.AgentRewardQueueMessage
;
import
com.lanren.huhu.partner.model.ParentAgent
;
import
com.lanren.huhu.partner.model.ParentAgent
;
import
com.lanren.huhu.partner.service.AgentRewardService
;
import
com.lanren.huhu.partner.service.AgentRewardService
;
import
com.lanren.huhu.partner.service.PartnerAccountService
;
import
com.lanren.huhu.partner.service.PartnerAccountService
;
...
@@ -15,10 +17,16 @@ import org.slf4j.Logger;
...
@@ -15,10 +17,16 @@ import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.ListOperations
;
import
org.springframework.data.redis.core.ListOperations
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.jdbc.datasource.DataSourceTransactionManager
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.transaction.TransactionDefinition
;
import
org.springframework.transaction.TransactionStatus
;
import
org.springframework.transaction.annotation.Transactional
;
import
sun.management.resources.agent
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
...
@@ -51,6 +59,12 @@ public class AgentRewardQueueTask {
...
@@ -51,6 +59,12 @@ public class AgentRewardQueueTask {
AgentRewardService
agentRewardService
;
AgentRewardService
agentRewardService
;
@Autowired
@Autowired
PartnerAccountService
partnerAccountService
;
PartnerAccountService
partnerAccountService
;
@Autowired
RedisTemplate
redisTemplatePush
;
@Autowired
DataSourceTransactionManager
dataSourceTransactionManager
;
@Autowired
TransactionDefinition
transactionDefinition
;
@Scheduled
(
fixedDelay
=
5000L
)
@Scheduled
(
fixedDelay
=
5000L
)
public
void
runScheduledTask
()
{
public
void
runScheduledTask
()
{
...
@@ -111,8 +125,6 @@ public class AgentRewardQueueTask {
...
@@ -111,8 +125,6 @@ public class AgentRewardQueueTask {
* 这里的逻辑有问题, 不能用这个接口找上级, 因为会先找一次直接邀请人,
* 这里的逻辑有问题, 不能用这个接口找上级, 因为会先找一次直接邀请人,
* 只能按message.getAgentId()的代理商id, 找user_agent表里的平推关系
* 只能按message.getAgentId()的代理商id, 找user_agent表里的平推关系
*/
*/
// User user = userService.getRelationByUserId(userAgent.getUserId());
// ArrayList<ParentAgent> parentList = user.getAgentList();
ArrayList
<
ParentAgent
>
parentList
=
(
ArrayList
<
ParentAgent
>)
userAgentService
.
getParentAgentListByAgentId
(
userAgent
.
getAgentId
(),
PARENT_COLUMN_NAME_PINGTUI
);
ArrayList
<
ParentAgent
>
parentList
=
(
ArrayList
<
ParentAgent
>)
userAgentService
.
getParentAgentListByAgentId
(
userAgent
.
getAgentId
(),
PARENT_COLUMN_NAME_PINGTUI
);
ArrayList
<
ParentAgent
>
level4List
=
new
ArrayList
<
ParentAgent
>();
ArrayList
<
ParentAgent
>
level4List
=
new
ArrayList
<
ParentAgent
>();
if
(
parentList
.
size
()
>
0
)
{
if
(
parentList
.
size
()
>
0
)
{
...
@@ -159,24 +171,57 @@ public class AgentRewardQueueTask {
...
@@ -159,24 +171,57 @@ public class AgentRewardQueueTask {
rateList
.
add
(
rateMap
.
get
(
1
));
rateList
.
add
(
rateMap
.
get
(
1
));
rateList
.
add
(
rateMap
.
get
(
2
));
rateList
.
add
(
rateMap
.
get
(
2
));
}
}
TransactionStatus
transactionStatus
=
null
;
List
<
AgentReward
>
pushList
=
new
ArrayList
<
AgentReward
>();
try
{
/**
* 开启事务, 如果rewardList中的奖励 都插入成功, 才提交事务
* 并发送redis消息, 否则, 进行回滚, 并把读入的消息塞回队列
*/
transactionStatus
=
dataSourceTransactionManager
.
getTransaction
(
transactionDefinition
);
for
(
int
i
=
0
;
i
<
rewardList
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
rewardList
.
size
();
i
++)
{
BigDecimal
commissionRate
=
rateList
.
get
(
i
);
BigDecimal
commissionRate
=
rateList
.
get
(
i
);
if
(
doInsert
(
commissionRate
,
rewardList
.
get
(
i
),
message
))
{
AgentReward
reward
=
doInsert
(
commissionRate
,
rewardList
.
get
(
i
),
message
);
logger
.
info
(
"插入代理商分成奖励,奖励比例: {}, 代理商: {}"
,
commissionRate
,
rewardList
.
get
(
i
));
if
(
reward
!=
null
)
{
}
else
{
pushList
.
add
(
reward
);
logger
.
error
(
"插入失败, 写回到队列"
);
}
}
/**
* 提交事务
*/
dataSourceTransactionManager
.
commit
(
transactionStatus
);
/**
* 数据库写入成功后 发推送
*/
for
(
AgentReward
reward
:
pushList
)
{
doPush
(
reward
);
}
}
catch
(
Exception
e
)
{
logger
.
error
(
"插入代理商分成奖励失败, 奖励 {}"
,
message
);
/**
* 回滚事务
*/
if
(
transactionStatus
!=
null
)
{
dataSourceTransactionManager
.
rollback
(
transactionStatus
);
}
/**
* 消息处理失败 丢回队列
*/
ops
.
leftPush
(
AGENT_REWARD_QUEUE_KEY
,
JSON
.
toJSONString
(
message
));
ops
.
leftPush
(
AGENT_REWARD_QUEUE_KEY
,
JSON
.
toJSONString
(
message
));
/**
* 休眠
*/
try
{
try
{
Thread
.
sleep
(
5
*
1000L
);
Thread
.
sleep
(
5
*
1000L
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
Exception
e1
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
logger
.
error
(
e
.
getMessage
(),
e1
);
}
}
}
}
}
}
}
}
}
private
boolean
doInsert
(
BigDecimal
commissionRate
,
ParentAgent
agent
,
AgentRewardMessage
message
)
{
private
AgentReward
doInsert
(
BigDecimal
commissionRate
,
ParentAgent
agent
,
AgentRewardMessage
message
)
{
try
{
try
{
int
rewardType
=
message
.
getRewardType
();
int
rewardType
=
message
.
getRewardType
();
int
sourceUserLevel
=
partnerAccountService
.
getOneByUserId
(
message
.
getSourceUserId
()).
getPartnerLevel
();
int
sourceUserLevel
=
partnerAccountService
.
getOneByUserId
(
message
.
getSourceUserId
()).
getPartnerLevel
();
...
@@ -219,24 +264,45 @@ public class AgentRewardQueueTask {
...
@@ -219,24 +264,45 @@ public class AgentRewardQueueTask {
agentReward
.
setAllMoneyOri
(
message
.
getOrderCommission
());
agentReward
.
setAllMoneyOri
(
message
.
getOrderCommission
());
agentReward
.
setRatioAll
(
message
.
getOrderRateArray
());
agentReward
.
setRatioAll
(
message
.
getOrderRateArray
());
}
}
logger
.
info
(
"rewardBasement is: {}"
,
rewardBasement
);
logger
.
info
(
"commissionRate is: {}"
,
commissionRate
);
BigDecimal
reward
=
rewardBasement
.
multiply
(
commissionRate
);
BigDecimal
reward
=
rewardBasement
.
multiply
(
commissionRate
);
/**
/**
* 小于0.000001的奖励 不写入
* 小于0.000001的奖励 不写入
*/
*/
if
(
reward
.
compareTo
(
MIN_REWARD
)
<
0
)
{
if
(
reward
.
compareTo
(
MIN_REWARD
)
<
0
)
{
logger
.
info
(
"代理商({})平推奖励金额小于0.000001, 忽略不写入. msg:{}"
,
agent
.
getAgentId
(),
message
);
logger
.
info
(
"代理商({})平推奖励金额小于0.000001, 忽略不写入. msg:{}"
,
agent
.
getAgentId
(),
message
);
return
true
;
return
null
;
}
else
{
}
else
{
agentReward
.
setMoney
(
rewardBasement
);
agentReward
.
setMoney
(
rewardBasement
);
agentReward
.
setCommissionAcount
(
rewardBasement
);
agentReward
.
setCommissionAcount
(
rewardBasement
);
agentReward
.
setAmount
(
reward
);
agentReward
.
setAmount
(
reward
);
agentReward
.
setCommission
(
reward
);
agentReward
.
setCommission
(
reward
);
agentReward
.
setCashCode
(
"0"
);
agentReward
.
setCashCode
(
"0"
);
return
agentRewardService
.
save
(
agentReward
);
doPush
(
agentReward
);
agentRewardService
.
save
(
agentReward
);
return
agentReward
;
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
return
null
;
}
}
}
private
void
doPush
(
AgentReward
agentReward
)
{
try
{
JSONObject
json
=
new
JSONObject
();
PartnerAccount
partnerAccount
=
partnerAccountService
.
getOneByUserId
(
agentReward
.
getUserId
());
AgentRewardQueueMessage
message
=
new
AgentRewardQueueMessage
();
message
.
setUserId
(
agentReward
.
getUserId
());
message
.
setSourceUserId
(
agentReward
.
getSourceUserId
());
message
.
setMoney
(
agentReward
.
getCommission
().
toString
());
message
.
setPartnerLevel
(
partnerAccount
.
getIsSuperPartner
()
==
1
?
30
:
partnerAccount
.
getPartnerLevel
());
message
.
setTime
(
agentReward
.
getCreatedAt
());
message
.
setRewardType
(
agentReward
.
getRewardType
());
redisTemplatePush
.
opsForList
().
leftPush
(
AGENT_REWARD_PUSH_KEY
,
message
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
logger
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
}
}
}
}
src/main/resources/application.yml
View file @
0e42deca
...
@@ -54,6 +54,7 @@ spring:
...
@@ -54,6 +54,7 @@ spring:
## Redis数据库索引(默认为0)
## Redis数据库索引(默认为0)
redis
:
redis
:
database
:
13
database
:
13
database2
:
5
## Redis测试服务器地址
## Redis测试服务器地址
host
:
@
redis.host@
host
:
@
redis.host@
## Redis测试服务器连接端口
## Redis测试服务器连接端口
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment