Commit 7a34c1c5 by guanchen

调接口relation/change 不再刷新下级数据 只做缓存清除

并且如果输入的用户是个代理商, 也清除下级代理商的缓存
parent a42f375c
...@@ -29,4 +29,13 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> { ...@@ -29,4 +29,13 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
"JOIN user_agent b on a.presenter_id=b.agent_id " + "JOIN user_agent b on a.presenter_id=b.agent_id " +
"WHERE a.agent_id=#{agentId} and b.agent_level<=4") "WHERE a.agent_id=#{agentId} and b.agent_level<=4")
UserAgent getParentAgent(Integer agentId); UserAgent getParentAgent(Integer agentId);
/**
* 按uid查找下级 UserAgent
*/
@Select("SELECT b.* " +
"FROM user_agent a " +
"JOIN user_agent b on a.presenter_id=b.agent_id " +
"WHERE a.user_id=#{userId}")
List<UserAgent> getChildrenByUserId(Integer userId);
} }
\ No newline at end of file
package com.lanren.huhu.partner.manager; package com.lanren.huhu.partner.manager;
import com.lanren.huhu.partner.domain.PartnerAccount; import com.lanren.huhu.partner.domain.PartnerAccount;
import com.lanren.huhu.partner.model.ParentPartner; import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.PartnerTree; import com.lanren.huhu.partner.model.*;
import com.lanren.huhu.partner.model.User;
import com.lanren.huhu.partner.result.Result; import com.lanren.huhu.partner.result.Result;
import com.lanren.huhu.partner.service.UserService; import com.lanren.huhu.partner.service.UserService;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -42,6 +41,10 @@ public class UserManager { ...@@ -42,6 +41,10 @@ public class UserManager {
} }
/** /**
* ****************************************分割线****合伙人***************************************************************
*/
/**
* 根据输入的userId, 完成递归查找 * 根据输入的userId, 完成递归查找
* @param userId * @param userId
*/ */
...@@ -55,11 +58,26 @@ public class UserManager { ...@@ -55,11 +58,26 @@ public class UserManager {
result.setCode(413); result.setCode(413);
} }
int partnerLevel = partnerAccount.getIsSuperPartner() == 1 ? 30 : partnerAccount.getPartnerLevel(); int partnerLevel = partnerAccount.getIsSuperPartner() == 1 ? 30 : partnerAccount.getPartnerLevel();
/**
* 合伙人按邀请关系
*/
PartnerTree root = new PartnerTree(); PartnerTree root = new PartnerTree();
root.setUserId(partnerAccount.getUserId()); root.setUserId(partnerAccount.getUserId());
root.setLevel(partnerLevel); root.setLevel(partnerLevel);
root.setParentList(new ArrayList<ParentPartner>()); root.setParentList(new ArrayList<ParentPartner>());
recursiveSet(root); recursiveSet(root);
/**
* 如果这个用户还是代理商身份, 也要处理他的代理商下级
*/
UserAgent agent = userService.getUserAgentByUserId(partnerAccount.getUserId());
if (null != agent) {
AgentTree agentRoot = new AgentTree();
agentRoot.setUserId(partnerAccount.getUserId());
agentRoot.setAgentId(agent.getAgentId());
agentRoot.setLevel(partnerLevel);
agentRoot.setParentList(new ArrayList<ParentAgent>());
recursiveSet(agentRoot);
}
logger.info("done changeRelation for userId: {}", userId); logger.info("done changeRelation for userId: {}", userId);
result.setData("用户刷新成功"); result.setData("用户刷新成功");
} catch (Exception e) { } catch (Exception e) {
...@@ -122,11 +140,15 @@ public class UserManager { ...@@ -122,11 +140,15 @@ public class UserManager {
sb.append(p.getUserId()).append(","); sb.append(p.getUserId()).append(",");
} }
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
logger.info("begin to refresh cache......"); logger.info("begin to clean cache......");
logger.info("userId: {}, parent is: {}", tree.getUserId(), sb.toString()); logger.info("userId: {}, parent is: {}", tree.getUserId(), sb.toString());
} }
deleteRalationByUserId(tree.getUserId()); deleteRalationByUserId(tree.getUserId());
getRelationByUserId(tree.getUserId()); /**
* 加快接口返回速度 不再为每一个叶子做刷新
* 只做清楚缓存的操作
*/
// getRelationByUserId(tree.getUserId());
} }
/** /**
...@@ -150,4 +172,91 @@ public class UserManager { ...@@ -150,4 +172,91 @@ public class UserManager {
} }
} }
} }
/**
* ****************************************分割线****代理商***************************************************************
*/
/**
* 递归查找, 完成输入的tree的所有下级查找
* @param tree
*/
private void recursiveSet(AgentTree tree) {
logger.info("do recursiveSet for userId: {}", tree.getUserId());
if (logger.isDebugEnabled()) {
logger.info("do recursiveSet for userId: {}", tree.getUserId());
}
/**
* 先找到直接下级
*/
setChildren(tree);
ArrayList<AgentTree> children = tree.getChildrenList();
/**
* 如果没有下级了 那么直接输出结果
*/
if (children.size() == 0) {
outputTree(tree);
} else {
/**
* 如果有直接下级, 遍历下级, 对每个下级再执行recursiveSet
*/
for (AgentTree child : children) {
recursiveSet(child);
/**
* 当完成 对每个下级再执行recursiveSet 之后
* 判断一下, 每个下级是否有直接下级
* 如果有 那么在各自的recursiveSet中 应该没有走到 line:52 的outputTree 方法
* 所以要在这里执行一次, 把他们自己输出
*/
if (child.getChildrenList().size() > 0) {
outputTree(child);
}
}
/**
* 最后输出自己
*/
outputTree(tree);
}
}
/**
* 完成刷新用户缓存数据
* @param tree
*/
private void outputTree(AgentTree tree) {
StringBuilder sb = new StringBuilder();
ArrayList<ParentAgent> list = tree.getParentList();
for (ParentAgent p : list) {
sb.append(p.getUserId()).append(",");
}
if (logger.isDebugEnabled()) {
logger.info("begin to clean cache......");
logger.info("userId: {}, parent is: {}", tree.getUserId(), sb.toString());
}
deleteRalationByUserId(tree.getUserId());
}
/**
* 无递归操作, 只往下查找一级
* 把下级的数据, 设置到输入的tree中的childrenList
* @param tree
*/
private void setChildren(AgentTree tree) {
ArrayList<UserAgent> partnerAccountArrayList = (ArrayList<UserAgent>) userService.getUserAgentChildrenByUserId(tree.getUserId());
for (UserAgent userAgent : partnerAccountArrayList) {
Integer childId = userAgent.getUserId();
Integer agentId = userAgent.getAgentId();
Integer childLevel = userAgent.getAgentLevel();
if (!tree.getParentList().contains(childId)) {
ArrayList<ParentAgent> parentList4Child = tree.cloneParent();
parentList4Child.add(new ParentAgent(tree.getUserId(), tree.getAgentId(), tree.getLevel()));
AgentTree oneChild = new AgentTree();
oneChild.setUserId(childId);
oneChild.setAgentId(agentId);
oneChild.setLevel(childLevel);
oneChild.setParentList(parentList4Child);
tree.getChildrenList().add(oneChild);
}
}
}
} }
package com.lanren.huhu.partner.model;
import com.lanren.huhu.partner.model.base.BaseModel;
import lombok.Data;
import java.util.ArrayList;
/**
* @author chen
* @title: AgentTree
* @projectName partner
* @description: 存储代理商的关系树结构, childrenList为其直属下级, parentList为父级关系
* @package com.lanren.huhu.partner.model
* @date 2019-07-02 20:15
*/
@Data
public class AgentTree extends BaseModel {
Integer userId;
Integer agentId;
Integer level;
ArrayList<ParentAgent> parentList;
ArrayList<AgentTree> childrenList = new ArrayList<AgentTree>();
public ArrayList<ParentAgent> cloneParent() {
ArrayList<ParentAgent> copyList = new ArrayList<ParentAgent>();
for (ParentAgent parentAgent : this.getParentList()) {
ParentAgent one = new ParentAgent(parentAgent.getUserId(), parentAgent.getAgentId(), parentAgent.getLevel());
copyList.add(one);
}
return copyList;
}
}
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); // /** // * 按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); } 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 \ No newline at end of file
......
...@@ -69,6 +69,10 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent ...@@ -69,6 +69,10 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
@Override @Override
public ParentAgent getParentAgentByAgentId(Integer agentId) { public ParentAgent getParentAgentByAgentId(Integer agentId) {
UserAgent userAgent = baseMapper.getParentAgent(agentId); UserAgent userAgent = baseMapper.getParentAgent(agentId);
return new ParentAgent(userAgent.getUserId(), userAgent.getAgentId(), userAgent.getAgentLevel()); if (userAgent != null) {
return new ParentAgent(userAgent.getUserId(), userAgent.getAgentId(), userAgent.getAgentLevel());
} else {
return null;
}
} }
} }
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