Commit a09be9fd by guanchen

代理商关系 1拆2: 分成 层级关系 和 平推关系

parent 7a34c1c5
......@@ -30,6 +30,8 @@ public class Constants {
public static final int AGENT_LEVEL_4 = 4;
public static final String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
public static final String DISTRIBUTE_REDIS_LOCK_KEY = "huhu:partner:distribute:redis:key";
public static final String PARENT_COLUMN_NAME_CENGJI = "parent_agent_id";
public static final String PARENT_COLUMN_NAME_PINGTUI = "presenter_id";
static {
AGENT_RATE_MAP.put(AGENT_REWARD_TYPE_YEAR_VIP, new HashMap<Integer, BigDecimal>());
......
......@@ -26,16 +26,16 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
*/
@Select("SELECT b.* " +
"FROM user_agent a " +
"JOIN user_agent b on a.presenter_id=b.agent_id " +
"JOIN user_agent b on a.#{parentColumnName}=b.agent_id " +
"WHERE a.agent_id=#{agentId} and b.agent_level<=4")
UserAgent getParentAgent(Integer agentId);
UserAgent getParentAgent(Integer agentId, String parentColumnName);
/**
* 按uid查找下级 UserAgent
*/
@Select("SELECT b.* " +
"FROM user_agent a " +
"JOIN user_agent b on a.presenter_id=b.agent_id " +
"JOIN user_agent b on a.#{parentColumnName}=b.agent_id " +
"WHERE a.user_id=#{userId}")
List<UserAgent> getChildrenByUserId(Integer userId);
List<UserAgent> getChildrenByUserId(Integer userId, String parentColumnName);
}
\ No newline at end of file
......@@ -13,6 +13,9 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
import static com.lanren.huhu.partner.constants.Constants.PARENT_COLUMN_NAME_CENGJI;
import static com.lanren.huhu.partner.constants.Constants.PARENT_COLUMN_NAME_PINGTUI;
/**
* @author houseme
*/
......@@ -41,10 +44,6 @@ public class UserManager {
}
/**
* ****************************************分割线****合伙人***************************************************************
*/
/**
* 根据输入的userId, 完成递归查找
* @param userId
*/
......@@ -67,7 +66,7 @@ public class UserManager {
root.setParentList(new ArrayList<ParentPartner>());
recursiveSet(root);
/**
* 如果这个用户还是代理商身份, 也要处理他的代理商下级
* 如果这个用户还是代理商身份, 也要处理他的代理商下级(层级下级 和 平推下级)
*/
UserAgent agent = userService.getUserAgentByUserId(partnerAccount.getUserId());
if (null != agent) {
......@@ -76,7 +75,8 @@ public class UserManager {
agentRoot.setAgentId(agent.getAgentId());
agentRoot.setLevel(partnerLevel);
agentRoot.setParentList(new ArrayList<ParentAgent>());
recursiveSet(agentRoot);
recursiveSet(agentRoot, PARENT_COLUMN_NAME_CENGJI);
recursiveSet(agentRoot, PARENT_COLUMN_NAME_PINGTUI);
}
logger.info("done changeRelation for userId: {}", userId);
result.setData("用户刷新成功");
......@@ -88,6 +88,10 @@ public class UserManager {
}
/**
* ****************************************分割线****合伙人***************************************************************
*/
/**
* 递归查找, 完成输入的tree的所有下级查找
* @param tree
*/
......@@ -181,7 +185,7 @@ public class UserManager {
* 递归查找, 完成输入的tree的所有下级查找
* @param tree
*/
private void recursiveSet(AgentTree tree) {
private void recursiveSet(AgentTree tree, String parentColumnName) {
logger.info("do recursiveSet for userId: {}", tree.getUserId());
if (logger.isDebugEnabled()) {
logger.info("do recursiveSet for userId: {}", tree.getUserId());
......@@ -189,7 +193,7 @@ public class UserManager {
/**
* 先找到直接下级
*/
setChildren(tree);
setChildren(tree, parentColumnName);
ArrayList<AgentTree> children = tree.getChildrenList();
/**
* 如果没有下级了 那么直接输出结果
......@@ -201,7 +205,7 @@ public class UserManager {
* 如果有直接下级, 遍历下级, 对每个下级再执行recursiveSet
*/
for (AgentTree child : children) {
recursiveSet(child);
recursiveSet(child, parentColumnName);
/**
* 当完成 对每个下级再执行recursiveSet 之后
* 判断一下, 每个下级是否有直接下级
......@@ -241,8 +245,8 @@ public class UserManager {
* 把下级的数据, 设置到输入的tree中的childrenList
* @param tree
*/
private void setChildren(AgentTree tree) {
ArrayList<UserAgent> partnerAccountArrayList = (ArrayList<UserAgent>) userService.getUserAgentChildrenByUserId(tree.getUserId());
private void setChildren(AgentTree tree, String parentColumnName) {
ArrayList<UserAgent> partnerAccountArrayList = (ArrayList<UserAgent>) userService.getUserAgentChildrenByUserId(tree.getUserId(), parentColumnName);
for (UserAgent userAgent : partnerAccountArrayList) {
Integer childId = userAgent.getUserId();
Integer agentId = userAgent.getAgentId();
......
......@@ -26,7 +26,14 @@ public class User extends BaseModel {
private int userId;
private ArrayList<ParentPartner> partnerList;
/**
* agentList 返回代理商的上下级关系
*/
private ArrayList<ParentAgent> agentList;
/**
* agentList 返回代理商的平推关系
*/
private ArrayList<ParentAgent> pingtuiAgentList;
/**
* 坑哦!!!!
......
......@@ -110,11 +110,11 @@ 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());
ArrayList<ParentAgent> parentList = (ArrayList<ParentAgent>) userAgentService.getParentAgentListByAgentId(userAgent.getAgentId(), PARENT_COLUMN_NAME_PINGTUI);
ArrayList<ParentAgent> level4List = new ArrayList<ParentAgent>();
if (parentList.size() > 0) {
/**
......
......@@ -28,12 +28,12 @@ public interface UserAgentService extends IService<UserAgent> {
* @param agentId
* @return List<ParentAgent>
*/
List<ParentAgent> getParentAgentListByAgentId(Integer agentId);
List<ParentAgent> getParentAgentListByAgentId(Integer agentId, String parentColumnName);
/**
* @description: 查找一个用户的直接代理商上级, 根据字段presenter_id
* @param agentId
* @return ParentAgent
*/
ParentAgent getParentAgentByAgentId(Integer agentId);
ParentAgent getParentAgentByAgentId(Integer agentId, String parentColumnName);
}
package com.lanren.huhu.partner.service; import com.lanren.huhu.partner.domain.PartnerAccount;import com.lanren.huhu.partner.domain.UserAgent;import com.lanren.huhu.partner.model.User; import java.util.List; /** * @author houseme * @date 2019-06-28 18:35 * @Project partner * @Package com.lanren.huhu.partner.service * @File: UserService */public interface UserService { /** * @description: 根据用户id, 查找一个用户的全部合伙人上级 和 代理商上级 * 缓存用户邀请关系和代理商关系数据 * 缓存不能带有构造方法的Bean 所以只能返回User的Bean * 包装Result在Cacheable注解的方法之外进行操作 * 注意 !!!!!!!! 这个方法是按输入用户的邀请关系链上查找 第一个有agent_level<=4的代理商身份的邀请人, 然后再走他的代理关系 * 注意 !!!!!!!! 如果需要获取一个代理商的上级代理 需要从UserAgentService里的方法获取 * @param userId * @return User * @throws * @author chen * @date 2019-06-26 20:01 */ User getRelationByUserId(Integer userId); /** * 清理用户缓存 */ boolean deleteRalationByUserId(Integer userId); /*** * PartnerAccount * * 根据用户id查询账户信息 * @param userId * @return PartnerAccount */ PartnerAccount getPartnerAccountByUserId(Integer userId); /** * @description: 根据用户id查询全部下级合伙人 * @param userId * @return List<PartnerAccount> * @author chen * @date 2019-06-28 11:49 */ List<PartnerAccount> getPartnerAccountChildrenByUserId(Integer userId); /*** * UserAgent * 根据用户id查询账户信息 * @param userId * @return */ UserAgent getUserAgentByUserId(Integer userId); /** * @description: 根据用户id查询全部下级代理商 * @param userId * @return List<PartnerAccount> * @author chen * @date 2019-06-28 11:49 */ List<UserAgent> getUserAgentChildrenByUserId(Integer userId); // /** // * 按userId查找上级合伙人的 userId 和 level // * @param userId // * @return // */ // ParentPartner getParentPartner(Integer userId); // /** // * @description: 查找一个用户的全部合伙人上级, set到User对象的partnerList中 // * @param userId // * @author chen // * @return List<ParentPartner> // */ // List<ParentPartner> getPartnerListByUserId(Integer userId); // /** // * 按agentId 查找上级代理商的 agentId 和 level // * @param agentId // * @return // */ // ParentAgent getParentAgent(Integer agentId); // /** // * @description: 查找一个用户的全部代理商上级 set到User对象的agentList中 // * @param userId // * @return List<ParentAgent> // */ // List<ParentAgent> getAgentListByUserId(Integer userId); }
\ No newline at end of file
package com.lanren.huhu.partner.service; import com.lanren.huhu.partner.domain.PartnerAccount;import com.lanren.huhu.partner.domain.UserAgent;import com.lanren.huhu.partner.model.User; import java.util.List; /** * @author houseme * @date 2019-06-28 18:35 * @Project partner * @Package com.lanren.huhu.partner.service * @File: UserService */public interface UserService { /** * @description: 根据用户id, 查找一个用户的全部合伙人上级 和 代理商上级(此处为层级关系 非平推关系) * 缓存用户邀请关系和代理商关系数据 * 缓存不能带有构造方法的Bean 所以只能返回User的Bean * 包装Result在Cacheable注解的方法之外进行操作 * 注意 !!!!!!!! 这个方法是按输入用户的邀请关系链上查找 第一个有agent_level<=4的代理商身份的邀请人, 然后再走他的代理关系 * 注意 !!!!!!!! 如果需要获取一个代理商的上级代理 需要从UserAgentService里的方法获取 * @param userId * @return User * @throws * @author chen * @date 2019-06-26 20:01 */ User getRelationByUserId(Integer userId); /** * 清理用户缓存 */ boolean deleteRalationByUserId(Integer userId); /*** * PartnerAccount * * 根据用户id查询账户信息 * @param userId * @return PartnerAccount */ PartnerAccount getPartnerAccountByUserId(Integer userId); /** * @description: 根据用户id查询全部下级合伙人 * @param userId * @return List<PartnerAccount> * @author chen * @date 2019-06-28 11:49 */ List<PartnerAccount> getPartnerAccountChildrenByUserId(Integer userId); /*** * UserAgent * 根据用户id查询账户信息 * @param userId * @return */ UserAgent getUserAgentByUserId(Integer userId); /** * @description: 根据用户id查询全部下级代理商 * @param userId * @return List<PartnerAccount> * @author chen * @date 2019-06-28 11:49 */ List<UserAgent> getUserAgentChildrenByUserId(Integer userId, String parentColumnName); // /** // * 按userId查找上级合伙人的 userId 和 level // * @param userId // * @return // */ // ParentPartner getParentPartner(Integer userId); // /** // * @description: 查找一个用户的全部合伙人上级, set到User对象的partnerList中 // * @param userId // * @author chen // * @return List<ParentPartner> // */ // List<ParentPartner> getPartnerListByUserId(Integer userId); // /** // * 按agentId 查找上级代理商的 agentId 和 level // * @param agentId // * @return // */ // ParentAgent getParentAgent(Integer agentId); // /** // * @description: 查找一个用户的全部代理商上级 set到User对象的agentList中 // * @param userId // * @return List<ParentAgent> // */ // List<ParentAgent> getAgentListByUserId(Integer userId); }
\ No newline at end of file
......
......@@ -6,7 +6,6 @@ import com.lanren.huhu.partner.dao.UserAgentMapper;
import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.ParentAgent;
import com.lanren.huhu.partner.service.UserAgentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -18,8 +17,8 @@ import java.util.List;
@Service
public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent> implements UserAgentService {
@Autowired
UserAgentMapper userAgentMapper;
// @Autowired
// UserAgentMapper userAgentMapper;
@Override
public int updateBatch(List<UserAgent> list) {
......@@ -51,11 +50,11 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
}
@Override
public List<ParentAgent> getParentAgentListByAgentId(Integer agentId) {
public List<ParentAgent> getParentAgentListByAgentId(Integer agentId, String parentColumnName) {
List<ParentAgent> returnList = new ArrayList<ParentAgent>();
int loogAgentId = agentId;
while (true) {
ParentAgent parentAgent = getParentAgentByAgentId(loogAgentId);
ParentAgent parentAgent = getParentAgentByAgentId(loogAgentId, parentColumnName);
if (null == parentAgent) {
break;
} else {
......@@ -67,8 +66,8 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
}
@Override
public ParentAgent getParentAgentByAgentId(Integer agentId) {
UserAgent userAgent = baseMapper.getParentAgent(agentId);
public ParentAgent getParentAgentByAgentId(Integer agentId, String parentColumnName) {
UserAgent userAgent = baseMapper.getParentAgent(agentId, parentColumnName);
if (userAgent != null) {
return new ParentAgent(userAgent.getUserId(), userAgent.getAgentId(), userAgent.getAgentLevel());
} else {
......
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