Commit e28d883e by guanchen

添加代理商推荐关系的循环奖励

parent ea68f2c1
...@@ -171,6 +171,7 @@ public class AgentRewardQueueTask { ...@@ -171,6 +171,7 @@ public class AgentRewardQueueTask {
TransactionStatus transactionStatus = null; TransactionStatus transactionStatus = null;
List<AgentReward> pushList = new ArrayList<AgentReward>(); List<AgentReward> pushList = new ArrayList<AgentReward>();
List<AgentReward> pushRewardList = new ArrayList<AgentReward>();
try { try {
/** /**
* 开启事务, 如果rewardList中的奖励 都插入成功, 才提交事务 * 开启事务, 如果rewardList中的奖励 都插入成功, 才提交事务
...@@ -182,8 +183,13 @@ public class AgentRewardQueueTask { ...@@ -182,8 +183,13 @@ public class AgentRewardQueueTask {
AgentReward reward = doInsert(commissionRate, rewardList.get(i), message.clone()); AgentReward reward = doInsert(commissionRate, rewardList.get(i), message.clone());
if (reward != null) { if (reward != null) {
pushList.add(reward); pushList.add(reward);
if (reward.getAgentLevel() == AGENT_LEVEL_4) { /**
pushRewardQueue(reward, message); * 如果是城市代理获得的佣金 或 红包奖励 需要 再往上分
*/
if (reward.getAgentLevel() == AGENT_LEVEL_4 &&
(rewardType == AGENT_REWARD_TYPE_SELF_ORDER || rewardType == AGENT_REWARD_TYPE_SHARE_ORDER || rewardType == AGENT_REWARD_TYPE_REDPACK)
) {
pushRewardList.add(reward);
} }
} }
} }
...@@ -197,6 +203,9 @@ public class AgentRewardQueueTask { ...@@ -197,6 +203,9 @@ public class AgentRewardQueueTask {
for (AgentReward reward : pushList) { for (AgentReward reward : pushList) {
doPush(reward); doPush(reward);
} }
for (AgentReward reward : pushRewardList) {
pushRewardQueue(reward, message.clone());
}
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
logger.error("插入代理商分成奖励失败, 奖励 {}", message); logger.error("插入代理商分成奖励失败, 奖励 {}", message);
...@@ -223,10 +232,21 @@ public class AgentRewardQueueTask { ...@@ -223,10 +232,21 @@ public class AgentRewardQueueTask {
} }
private void pushRewardQueue(AgentReward reward, AgentRewardMessage message) { private void pushRewardQueue(AgentReward reward, AgentRewardMessage message) {
// message.setAgentId(reward.getAgentId()); logger.info("处理循环上供奖励.......");
// message.setAgentReward(reward.getAmount()); logger.info("reward is :{}", reward);
// message.setOrderRateArray(reward.getRatioAll()); logger.info("message is :{}", message);
return; message.setAgentId(reward.getAgentId());
message.setAgentReward(reward.getAmount());
String rateArray;
if (StringUtils.isEmpty(reward.getRatioAll())) {
rateArray = "[" + reward.getCommissionRate() + "]";
} else {
rateArray = reward.getRatioAll().replaceAll("\\]", "");
rateArray = rateArray + reward.getCommissionRate() + "]";
}
message.setOrderRateArray(rateArray);
logger.info("推送循环上供奖励: {}", message);
stringRedisTemplate.opsForList().leftPush(AGENT_REWARD_QUEUE_KEY, JSON.toJSONString(message));
} }
private AgentReward doInsert(BigDecimal commissionRate, ParentAgent agent, AgentRewardMessage message) { private AgentReward doInsert(BigDecimal commissionRate, ParentAgent agent, AgentRewardMessage message) {
......
...@@ -23,8 +23,7 @@ import java.util.ArrayList; ...@@ -23,8 +23,7 @@ import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
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 houseme * @author houseme
...@@ -258,24 +257,66 @@ public class UserServiceImpl implements UserService { ...@@ -258,24 +257,66 @@ public class UserServiceImpl implements UserService {
* 要改成从自己开始找 所以添加判断 看自己是不是 * 要改成从自己开始找 所以添加判断 看自己是不是
*/ */
UserAgent selfAgent = getUserAgentByUserId(userId); UserAgent selfAgent = getUserAgentByUserId(userId);
/**
* 代理商关系包含自己的条件:
* 1. 层级关系 都包含自己
* 2. 推荐关系 只有当自己是总代时才包含自己
*/
if (null != selfAgent && (parentColumnName.equals(PARENT_COLUMN_NAME_CENGJI) ||
parentColumnName.equals(PARENT_COLUMN_NAME_PINGTUI) && selfAgent.getAgentLevel() == AGENT_LEVEL_1)) {
} else {
selfAgent = null;
}
int loopUserId = userId; int loopUserId = userId;
int loopTimes = 0; int loopTimes = 0;
UserAgent firstAgent = null;
if (selfAgent == null) {
/**
* 自己不是代理商时 按C端邀请关系查找代理商
*/
while (true) { while (true) {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.info("now loop uid is {}", loopUserId); logger.info("now loop uid is {}", loopUserId);
} }
existingUserIdSet.add(loopUserId); existingUserIdSet.add(loopUserId);
ParentPartner parentPartner = getParentPartner(loopUserId); ParentPartner parentPartner = getParentPartner(loopUserId);
if (parentPartner != null) {
UserAgent agent = getUserAgentByUserId(parentPartner.getUserId());
if (agent != null) {
firstAgent = agent;
break;
} else {
/** /**
* 有上级合伙人 或者 自己就是代理商 * 这个人不是代理商 继续往上找
*/ */
if (null != selfAgent || null != parentPartner) { loopUserId = parentPartner.getUserId();
UserAgent firstAgent; loopTimes++;
if (null != selfAgent) { if (loopTimes > 500) {
firstAgent = selfAgent; agentList.clear();
logger.error("用户ID:{} 合伙人关系异常, 已超500层", userId);
break;
}
if (existingUserIdSet.contains(loopUserId)) {
logger.info("发现互为上级的用户邀请关系 用户ID({})", loopUserId);
logger.info("退出循环, 不再继续查找");
break;
}
}
} else {
/**
* 没有上级合伙人 打印结束信息 跳出循环
*/
if (logger.isDebugEnabled()) {
logger.info("loop end with userId: {}", loopUserId);
}
break;
}
}
} else { } else {
firstAgent = getUserAgentByUserId(parentPartner.getUserId()); firstAgent = selfAgent;
} }
/** /**
* 找到了第一个是代理商的合伙人 * 找到了第一个是代理商的合伙人
*/ */
...@@ -286,8 +327,12 @@ public class UserServiceImpl implements UserService { ...@@ -286,8 +327,12 @@ public class UserServiceImpl implements UserService {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.info("find first agent({}) for user: {}", firstAgent.getAgentId(), userId); logger.info("find first agent({}) for user: {}", firstAgent.getAgentId(), userId);
} }
/**
* 添加代理到list时 都需要加个判断 如果找到总代 就不再找了
*/
agentList.add(new ParentAgent(firstAgent.getUserId(), firstAgent.getAgentId(), firstAgent.getAgentLevel())); agentList.add(new ParentAgent(firstAgent.getUserId(), firstAgent.getAgentId(), firstAgent.getAgentLevel()));
loopTimes++; if (firstAgent.getAgentLevel() != AGENT_LEVEL_1) {
loopTimes = 0;
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.info("loop find parent agent start ......"); logger.info("loop find parent agent start ......");
} }
...@@ -305,7 +350,13 @@ public class UserServiceImpl implements UserService { ...@@ -305,7 +350,13 @@ public class UserServiceImpl implements UserService {
logger.info("退出循环, 不再继续查找"); logger.info("退出循环, 不再继续查找");
break; break;
} }
/**
* 添加代理到list时 都需要加个判断 如果找到总代 就不再找了
*/
agentList.add(new ParentAgent(loopUserAgent.getUserId(), loopUserAgent.getAgentId(), loopUserAgent.getLevel())); agentList.add(new ParentAgent(loopUserAgent.getUserId(), loopUserAgent.getAgentId(), loopUserAgent.getLevel()));
if (loopUserAgent.getLevel() == AGENT_LEVEL_1) {
break;
}
loogAgentId = loopUserAgent.getAgentId(); loogAgentId = loopUserAgent.getAgentId();
loopTimes++; loopTimes++;
if (loopTimes > 500) { if (loopTimes > 500) {
...@@ -321,34 +372,15 @@ public class UserServiceImpl implements UserService { ...@@ -321,34 +372,15 @@ public class UserServiceImpl implements UserService {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.info("loop find parent agent end"); logger.info("loop find parent agent end");
} }
break;
} else { } else {
/** if (logger.isInfoEnabled()) {
* 这个人不是代理商 继续往上找 logger.info("已找到总代 不再往下找, 总代id: {}", firstAgent.getAgentId());
*/
loopUserId = parentPartner.getUserId();
if (existingUserIdSet.contains(loopUserId)) {
logger.info("发现互为上级的用户邀请关系 用户ID({})", loopUserId);
logger.info("退出循环, 不再继续查找");
break;
}
}
} else {
/**
* 没有上级合伙人 打印结束信息 跳出循环
*/
if (logger.isDebugEnabled()) {
logger.info("loop end with userId: {}", loopUserId);
} }
break;
} }
} }
if (logger.isInfoEnabled()) { if (logger.isInfoEnabled()) {
logger.info("setAgentList for user: {} end", userId); logger.info("setAgentList for user: {} end", userId);
} }
if (parentColumnName.equals(PARENT_COLUMN_NAME_PINGTUI) && selfAgent != null && agentList.size() > 1) {
agentList.remove(0);
}
return agentList; return agentList;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment