Commit 8cdbebf8 by guanchen

优化代码结构

parent 2972cc9d
...@@ -4,7 +4,6 @@ import com.lanren.huhu.partner.manager.UserManager; ...@@ -4,7 +4,6 @@ import com.lanren.huhu.partner.manager.UserManager;
import com.lanren.huhu.partner.model.User; 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.PartnerAccountService; import com.lanren.huhu.partner.service.PartnerAccountService;
import com.lanren.huhu.partner.util.PartnerTreeUtil;
import org.slf4j.Logger; 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;
...@@ -43,9 +42,12 @@ public class UserController { ...@@ -43,9 +42,12 @@ public class UserController {
if (logger.isInfoEnabled()) { if (logger.isInfoEnabled()) {
logger.info("deletrRelation userId:{ },header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now()); logger.info("deletrRelation userId:{ },header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now());
} }
userManager.deleteRalationByUserId(user.getUserId());
Result<String> result = new Result<String>(); Result<String> result = new Result<String>();
if (userManager.deleteRalationByUserId(user.getUserId())) {
result.setData("删除成功"); result.setData("删除成功");
} else {
result.setCode(500);
}
return result; return result;
} }
...@@ -55,11 +57,11 @@ public class UserController { ...@@ -55,11 +57,11 @@ public class UserController {
logger.info("changeRelation userId:{},header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now()); logger.info("changeRelation userId:{},header:{},time:{}", user.getUserId(), headers.keySet().toArray(), LocalDateTime.now());
} }
Result<String> result = new Result<String>(); Result<String> result = new Result<String>();
PartnerTreeUtil partnerTreeUtil = new PartnerTreeUtil(); int code = userManager.findPartnerChiledren(user.getUserId());
if (partnerTreeUtil.findPartnerChiledren(user.getUserId(), partnerAccountService, userManager)) { if (code == 0) {
result.setData("用户刷新成功"); result.setData("用户刷新成功");
} else { } else {
result.setCode(500); result.setCode(code);
} }
return result; return result;
} }
......
...@@ -46,27 +46,8 @@ public interface PartnerAccountService extends IService<PartnerAccount> { ...@@ -46,27 +46,8 @@ public interface PartnerAccountService extends IService<PartnerAccount> {
/*** /***
* 根据用户id查询账户信息 * 根据用户id查询账户信息
* @param userId * @param userId
* @return
*/
PartnerAccount getOneByUserId(Integer userId);
/**
* @description: TODO
* @param userId
* @return PartnerAccount * @return PartnerAccount
* @throws
* @author chen
* @date 2019-06-26 20:13
*/ */
PartnerAccount getParentPartner(Integer userId); PartnerAccount getOneByUserId(Integer userId);
/**
* @description: TODO
* @param ${tags}
* @return ${return_type}
* @throws
* @author chen
* @date 2019-06-28 11:49
*/
List<PartnerAccount> getChildrenByUserId(Integer userId);
} }
package com.lanren.huhu.partner.service; package com.lanren.huhu.partner.service;
import java.util.List;
import com.lanren.huhu.partner.dao.PartnerAccountMapper;
import com.lanren.huhu.partner.domain.UserAgent;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.beans.factory.annotation.Autowired; import com.lanren.huhu.partner.domain.UserAgent;
import java.util.List;
public interface UserAgentService extends IService<UserAgent>{ public interface UserAgentService extends IService<UserAgent>{
...@@ -23,16 +21,4 @@ public interface UserAgentService extends IService<UserAgent>{ ...@@ -23,16 +21,4 @@ public interface UserAgentService extends IService<UserAgent>{
* @return * @return
*/ */
UserAgent getOneByAgentId(Integer agentId); UserAgent getOneByAgentId(Integer agentId);
/***
* 根据用户id查询账户信息
* @param userId
* @return
*/
UserAgent getOneByUserId(Integer userId);
/**
* 根据代理商id找到上级代理商
*/
UserAgent getParentAgent(Integer agentId);
} }
package com.lanren.huhu.partner.service; /** * @author houseme * @date 2019-06-28 18:35 * @Project partner * @Package com.lanren.huhu.partner.service * @File: UserService */public interface UserService {} 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.ParentAgent;import com.lanren.huhu.partner.model.ParentPartner;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注解的方法之外进行操作 * @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: TODO * @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); }
\ No newline at end of file \ No newline at end of file
......
...@@ -45,14 +45,4 @@ public class PartnerAccountServiceImpl extends ServiceImpl<PartnerAccountMapper, ...@@ -45,14 +45,4 @@ public class PartnerAccountServiceImpl extends ServiceImpl<PartnerAccountMapper,
queryWrapper.eq("user_id", userId); queryWrapper.eq("user_id", userId);
return baseMapper.selectOne(queryWrapper); return baseMapper.selectOne(queryWrapper);
} }
@Override
public PartnerAccount getParentPartner(Integer userId) {
return partnerAccountMapper.getParentByUserId(userId);
}
@Override
public List<PartnerAccount> getChildrenByUserId(Integer userId) {
return partnerAccountMapper.getChildrenByUserId(userId);
}
} }
package com.lanren.huhu.partner.service.impl; package com.lanren.huhu.partner.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lanren.huhu.partner.domain.PartnerAccount;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.List;
import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.dao.UserAgentMapper; import com.lanren.huhu.partner.dao.UserAgentMapper;
import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.service.UserAgentService; import com.lanren.huhu.partner.service.UserAgentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @author chen * @author chen
...@@ -46,18 +44,4 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent ...@@ -46,18 +44,4 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
; ;
return baseMapper.selectOne(queryWrapper); return baseMapper.selectOne(queryWrapper);
} }
@Override
public UserAgent getOneByUserId(Integer userId) {
QueryWrapper<UserAgent> queryWrapper = new QueryWrapper();
queryWrapper.eq("user_id", userId).le("agent_level", 4);
return baseMapper.selectOne(queryWrapper);
}
@Override
public UserAgent getParentAgent(Integer agentId) {
return userAgentMapper.getParentAgent(agentId);
}
} }
package com.lanren.huhu.partner.service.impl; import com.lanren.huhu.partner.dao.PartnerAccountMapper;import com.lanren.huhu.partner.dao.UserAgentMapper;import com.lanren.huhu.partner.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service; /** * @author houseme * @date 2019-06-28 18:36 * @Project partner * @Package com.lanren.huhu.partner.service.impl * @File: UserServiceImpl */@Servicepublic class UserServiceImpl implements UserService { @Autowired private UserAgentMapper userAgentMapper; @Autowired private PartnerAccountMapper partnerAccountMapper;} package com.lanren.huhu.partner.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.lanren.huhu.partner.dao.PartnerAccountMapper;import com.lanren.huhu.partner.dao.UserAgentMapper;import com.lanren.huhu.partner.domain.PartnerAccount;import com.lanren.huhu.partner.domain.UserAgent;import com.lanren.huhu.partner.model.ParentAgent;import com.lanren.huhu.partner.model.ParentPartner;import com.lanren.huhu.partner.model.User;import com.lanren.huhu.partner.service.UserService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cache.annotation.CacheConfig;import org.springframework.cache.annotation.CacheEvict;import org.springframework.cache.annotation.Cacheable;import org.springframework.stereotype.Service; import java.util.ArrayList;import java.util.List; /** * @author houseme * @date 2019-06-28 18:36 * @Project partner * @Package com.lanren.huhu.partner.service.impl * @File: UserServiceImpl */@Service@CacheConfig(cacheNames = "user_cache")public class UserServiceImpl implements UserService { private static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class); @Autowired private UserAgentMapper userAgentMapper; @Autowired private PartnerAccountMapper partnerAccountMapper; /** * 用户上级 合伙人 和 代理 关系 * @param userId * @return */ @Override @Cacheable public User getRelationByUserId(Integer userId) { logger.info("new a user object "); if (logger.isDebugEnabled()) { logger.info("new a user object "); } User user = new User(); user.setUserId(userId); user.setPartnerList((ArrayList<ParentPartner>) getPartnerListByUserId(userId)); user.setAgentList((ArrayList<ParentAgent>) getAgentListByUserId(userId)); return user; } @Override @CacheEvict(key = "#userId") public boolean deleteRalationByUserId(Integer userId) { if (logger.isInfoEnabled()) { logger.info("delete user relation cache, userId: {}", userId); } return true; } /** * 合伙人数据 * @param userId * @return */ @Override public PartnerAccount getPartnerAccountByUserId(Integer userId) { QueryWrapper<PartnerAccount> queryWrapper = new QueryWrapper(); queryWrapper.eq("user_id", userId); return partnerAccountMapper.selectOne(queryWrapper); } @Override public List<PartnerAccount> getPartnerAccountChildrenByUserId(Integer userId) { return partnerAccountMapper.getChildrenByUserId(userId); } @Override public ParentPartner getParentPartner(Integer userId) { PartnerAccount partnerAccount = partnerAccountMapper.getParentByUserId(userId); ParentPartner parentPartner = null; if (null != partnerAccount) { int partnerLevel = partnerAccount.getIsSuperPartner() == 1 ? 30 : partnerAccount.getPartnerLevel(); parentPartner = new ParentPartner(partnerAccount.getUserId(),partnerLevel); } return parentPartner; } @Override public List<ParentPartner> getPartnerListByUserId(Integer userId) { if (logger.isInfoEnabled()) { logger.info("begin setPartnerList for user: {} ......", userId); } ArrayList<ParentPartner> partnerList = new ArrayList<ParentPartner>(); /** * 无限找 */ int loopUserId = userId; while (true) { if (logger.isDebugEnabled()) { logger.info("now loop uid is {}", loopUserId); } ParentPartner parentPartner = getParentPartner(loopUserId); if (null == parentPartner) { break; } else { if (logger.isDebugEnabled()) { logger.info("parent is {} ", parentPartner.getUserId()); } partnerList.add(parentPartner); loopUserId = parentPartner.getUserId(); } } if (logger.isInfoEnabled()) { logger.info("setPartnerList for user: {} end", userId); } return partnerList; } /** * 代理商数据 * @param userId * @return */ @Override public UserAgent getUserAgentByUserId(Integer userId) { QueryWrapper<UserAgent> queryWrapper = new QueryWrapper(); queryWrapper.eq("user_id", userId).le("agent_level", 4); return userAgentMapper.selectOne(queryWrapper); } @Override public ParentAgent getParentAgent(Integer agentId) { UserAgent userAgent = userAgentMapper.getParentAgent(agentId); ParentAgent parentAgent = null; if (null != userAgent) { int agentLevel = userAgent.getAgentLevel(); parentAgent = new ParentAgent(userAgent.getUserId(), userAgent.getAgentId(), agentLevel); } return parentAgent; } @Override public List<ParentAgent> getAgentListByUserId(Integer userId) { if (logger.isInfoEnabled()) { logger.info("begin setAgentList for user: {} ......", userId); } ArrayList<ParentAgent> agentList = new ArrayList<ParentAgent>(); /** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */ int loopUserId = userId; while (true) { if (logger.isDebugEnabled()) { logger.info("now loop uid is {}", loopUserId); } ParentPartner parentPartner = getParentPartner(loopUserId); /** * 有上级合伙人 */ if (null != parentPartner) { UserAgent userAgent = getUserAgentByUserId(parentPartner.getUserId()); /** * 找到了第一个是代理商的合伙人 */ if (null != userAgent) { /** * 然后开始 无限找 这个人的上级代理商 */ if (logger.isDebugEnabled()) { logger.info("find first agent({}) for user: {}", userAgent.getAgentId(), userId); } agentList.add(new ParentAgent(userAgent.getUserId(), userAgent.getAgentId(), userAgent.getAgentLevel())); if (logger.isDebugEnabled()) { logger.info("loop find parent agent start ......"); } int loogAgentId = userAgent.getAgentId(); while (true) { ParentAgent loopUserAgent = getParentAgent(loogAgentId); if (null == loopUserAgent) { break; } else { if (logger.isDebugEnabled()) { logger.info("parent agent is ", loopUserAgent.getAgentId()); } agentList.add(new ParentAgent(loopUserAgent.getUserId(), loopUserAgent.getAgentId(), loopUserAgent.getLevel())); loogAgentId = loopUserAgent.getAgentId(); } } /** * 找完 "第一个是代理商的合伙人" 的 全部上级代理后 退出while循环 */ if (logger.isDebugEnabled()) { logger.info("loop find parent agent end"); } break; } else { /** * 这个人不是代理商 继续往上找 */ loopUserId = parentPartner.getUserId(); } } else { /** * 没有上级合伙人 打印结束信息 跳出循环 */ if (logger.isDebugEnabled()) { logger.info("loop end with userId: {}", loopUserId); } break; } } if (logger.isInfoEnabled()) { logger.info("setAgentList for user: {} end", userId); } return agentList; }}
\ No newline at end of file \ No newline at end of file
......
package com.lanren.huhu.partner.util;
import com.lanren.huhu.partner.domain.PartnerAccount;
import com.lanren.huhu.partner.manager.UserManager;
import com.lanren.huhu.partner.model.ParentPartner;
import com.lanren.huhu.partner.model.PartnerTree;
import com.lanren.huhu.partner.service.PartnerAccountService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
/**
* @author chen
* @title: PartnerTreeUtil
* @projectName partner
* @description: 用于构建PartnerTree
* @package com.lanren.huhu.partner.util
* @date 2019-06-28 11:19
*/
public class PartnerTreeUtil {
private static Logger logger = LoggerFactory.getLogger(PartnerTreeUtil.class);
private PartnerAccountService partnerAccountService;
private UserManager userManager;
/**
* 根据输入的userId, 完成递归查找
* @param userId
*/
public boolean findPartnerChiledren(Integer userId, PartnerAccountService partnerAccountService, UserManager userManager) {
try{
logger.info("start findPartnerChiledren for userId: {} ...", userId);
logger.info("partnerAccountService is null ? : {}", partnerAccountService == null);
this.partnerAccountService = partnerAccountService;
this.userManager = userManager;
PartnerAccount partnerAccount = partnerAccountService.getOneByUserId(userId);
int partnerLevel = partnerAccount.getIsSuperPartner() == 1 ? 30 : partnerAccount.getPartnerLevel();
PartnerTree root = new PartnerTree();
root.setUserId(partnerAccount.getUserId());
root.setLevel(partnerLevel);
root.setParentList(new ArrayList<ParentPartner>());
recursiveSet(root);
logger.info("done findPartnerChiledren for userId: {}", userId);
return true;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return false;
}
}
/**
* 递归查找, 完成输入的tree的所有下级查找
* @param tree
*/
private void recursiveSet(PartnerTree tree) {
logger.info("do recursiveSet for userId: {}", tree.getUserId());
if (logger.isDebugEnabled()) {
logger.info("do recursiveSet for userId: {}", tree.getUserId());
}
/**
* 先找到直接下级
*/
setChildren(tree);
ArrayList<PartnerTree> children = tree.getChildrenList();
/**
* 如果没有下级了 那么直接输出结果
*/
if (children.size() == 0) {
outputTree(tree);
} else {
/**
* 如果有直接下级, 遍历下级, 对每个下级再执行recursiveSet
*/
for (PartnerTree child : children) {
recursiveSet(child);
/**
* 当完成 对每个下级再执行recursiveSet 之后
* 判断一下, 每个下级是否有直接下级
* 如果有 那么在各自的recursiveSet中 应该没有走到 line:52 的outputTree 方法
* 所以要在这里执行一次, 把他们自己输出
*/
if (child.getChildrenList().size() > 0) {
outputTree(child);
}
}
}
}
/**
* 完成刷新用户缓存数据
* @param tree
*/
private void outputTree(PartnerTree tree) {
StringBuilder sb = new StringBuilder();
ArrayList<ParentPartner> list = tree.getParentList();
for (ParentPartner p : list) {
sb.append(p.getUserId()).append(",");
}
if (logger.isDebugEnabled()) {
logger.info("begin to refresh cache......");
logger.info("userId: {}, parent is: {}", tree.getUserId(), sb.toString());
}
userManager.deleteRalationByUserId(tree.getUserId());
userManager.getRelationByUserId(tree.getUserId());
}
/**
* 无递归操作, 只往下查找一级
* 把下级的数据, 设置到输入的tree中的childrenList
* @param tree
*/
private void setChildren(PartnerTree tree) {
ArrayList<PartnerAccount> partnerAccountArrayList = (ArrayList<PartnerAccount>) partnerAccountService.getChildrenByUserId(tree.getUserId());
for (PartnerAccount partnerAccount : partnerAccountArrayList) {
Integer childId = partnerAccount.getUserId();
Integer childLevel = partnerAccount.getIsSuperPartner() == 1 ? 30 : partnerAccount.getPartnerLevel();
if (!tree.getParentList().contains(childId)) {
ArrayList<ParentPartner> parentList4Child = tree.cloneParent();
parentList4Child.add(new ParentPartner(tree.getUserId(), tree.getLevel()));
PartnerTree oneChild = new PartnerTree();
oneChild.setUserId(childId);
oneChild.setLevel(childLevel);
oneChild.setParentList(parentList4Child);
tree.getChildrenList().add(oneChild);
}
}
}
}
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