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
7a34c1c5
Commit
7a34c1c5
authored
Jul 02, 2019
by
guanchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调接口relation/change 不再刷新下级数据 只做缓存清除
并且如果输入的用户是个代理商, 也清除下级代理商的缓存
parent
a42f375c
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
165 additions
and
10 deletions
+165
-10
UserAgentMapper.java
...ain/java/com/lanren/huhu/partner/dao/UserAgentMapper.java
+10
-0
UserManager.java
...ain/java/com/lanren/huhu/partner/manager/UserManager.java
+114
-5
AgentTree.java
src/main/java/com/lanren/huhu/partner/model/AgentTree.java
+32
-0
UserService.java
...ain/java/com/lanren/huhu/partner/service/UserService.java
+2
-2
UserAgentServiceImpl.java
...anren/huhu/partner/service/impl/UserAgentServiceImpl.java
+5
-1
UserServiceImpl.java
...com/lanren/huhu/partner/service/impl/UserServiceImpl.java
+2
-2
No files found.
src/main/java/com/lanren/huhu/partner/dao/UserAgentMapper.java
View file @
7a34c1c5
...
@@ -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
src/main/java/com/lanren/huhu/partner/manager/UserManager.java
View file @
7a34c1c5
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
);
}
}
}
}
}
src/main/java/com/lanren/huhu/partner/model/AgentTree.java
0 → 100644
View file @
7a34c1c5
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
;
}
}
src/main/java/com/lanren/huhu/partner/service/UserService.java
View file @
7a34c1c5
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
...
...
src/main/java/com/lanren/huhu/partner/service/impl/UserAgentServiceImpl.java
View file @
7a34c1c5
...
@@ -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
;
}
}
}
}
}
src/main/java/com/lanren/huhu/partner/service/impl/UserServiceImpl.java
View file @
7a34c1c5
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:relation: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
(
"UserServiceImpl get user relation from database, userId: {}"
,
userId
);
User
user
=
new
User
();
user
.
setUserId
(
userId
);
user
.
setPartnerList
((
ArrayList
<
ParentPartner
>)
getPartnerListByUserId
(
userId
));
user
.
setAgentList
(
filterAgentList
(
getAgentListByUserId
(
userId
)));
return
user
;
}
/** * 如果第一个ParentAgent是4级, 过滤掉后面的4级 * 相同级别只返回一个, 而且返回的数组元素 agent_level 越来越小 4->3->2->1 * @param agentList * @return */
private
ArrayList
<
ParentAgent
>
filterAgentList
(
List
<
ParentAgent
>
agentList
)
{
int
preAgentLevel
=
5
;
ArrayList
<
ParentAgent
>
returnList
=
new
ArrayList
<
ParentAgent
>();
for
(
ParentAgent
parentAgent
:
agentList
)
{
if
(
parentAgent
.
getLevel
()
<
preAgentLevel
)
{
returnList
.
add
(
new
ParentAgent
(
parentAgent
.
getUserId
(),
parentAgent
.
getAgentId
(),
parentAgent
.
getLevel
()));
preAgentLevel
=
parentAgent
.
getLevel
();
}
}
return
returnList
;
}
@Override
@CacheEvict
(
key
=
"#userId"
)
public
boolean
deleteRalationByUserId
(
Integer
userId
)
{
logger
.
info
(
"UserServiceImpl delete user relation cache, userId: {}"
,
userId
);
return
true
;
}
/** * 合伙人数据 * @param userId * @return */
@Override
public
PartnerAccount
getPartnerAccountByUserId
(
Integer
userId
)
{
QueryWrapper
<
PartnerAccount
>
queryWrapper
=
new
QueryWrapper
<
PartnerAccount
>();
queryWrapper
.
eq
(
"user_id"
,
userId
);
return
partnerAccountMapper
.
selectOne
(
queryWrapper
);
}
@Override
public
List
<
PartnerAccount
>
getPartnerAccountChildrenByUserId
(
Integer
userId
)
{
return
partnerAccountMapper
.
getChildrenByUserId
(
userId
);
}
/** * 按userId查找上级合伙人的 userId 和 level * @param userId * @return */
private
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
;
}
/** * @description: 查找一个用户的全部合伙人上级 * @param userId * @author chen * @return List<ParentPartner> */
private
List
<
ParentPartner
>
getPartnerListByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"UserServiceImpl getPartnerListByUserId for user: {} ......"
,
userId
);
}
ArrayList
<
ParentPartner
>
partnerList
=
new
ArrayList
<
ParentPartner
>();
/** * 无限找 */
int
loopUserId
=
userId
;
int
loopTimes
=
0
;
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
());
}
if
(
partnerList
.
contains
(
parentPartner
))
{
logger
.
info
(
"发现互相邀请的关系 用户({}) 和 用户({})"
,
loopUserId
,
parentPartner
.
getUserId
());
logger
.
info
(
"退出循环, 不再继续查找"
);
break
;
}
partnerList
.
add
(
parentPartner
);
loopUserId
=
parentPartner
.
getUserId
();
loopTimes
++;
if
(
loopTimes
>
500
)
{
partnerList
.
clear
();
logger
.
error
(
"用户:{} 邀请关系异常, 已超500层"
,
userId
);
break
;
}
}
}
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
<
UserAgent
>();
queryWrapper
.
eq
(
"user_id"
,
userId
).
le
(
"agent_level"
,
4
);
return
userAgentMapper
.
selectOne
(
queryWrapper
);
}
/** * 按agentId 查找上级代理商的 agentId 和 level * @param agentId * @return */
private
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
;
}
/** * @description: 查找一个用户的全部代理商上级 * 注意 !!!!!!!! 这个方法是按输入用户的邀请关系链上查找 第一个有agent_level<=4的代理商身份的邀请人, 然后再走他的代理关系 * 注意 !!!!!!!! 如果需要获取一个代理商的上级代理 需要从UserAgentService里的方法获取 * @param userId * @return List<ParentAgent> */
private
List
<
ParentAgent
>
getAgentListByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"getAgentListByUserId for user: {} ......"
,
userId
);
}
ArrayList
<
ParentAgent
>
agentList
=
new
ArrayList
<
ParentAgent
>();
/** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */
int
loopUserId
=
userId
;
int
loopTimes
=
0
;
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
()));
loopTimes
++;
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
();
loopTimes
++;
if
(
loopTimes
>
500
)
{
agentList
.
clear
();
logger
.
error
(
"用户ID:{} 代理商关系异常, 已超500层"
,
userId
);
break
;
}
}
}
/** * 找完 "第一个是代理商的合伙人" 的 全部上级代理后 退出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
;
}
}
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:relation: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
(
"UserServiceImpl get user relation from database, userId: {}"
,
userId
);
User
user
=
new
User
();
user
.
setUserId
(
userId
);
user
.
setPartnerList
((
ArrayList
<
ParentPartner
>)
getPartnerListByUserId
(
userId
));
user
.
setAgentList
(
filterAgentList
(
getAgentListByUserId
(
userId
)));
return
user
;
}
/** * 如果第一个ParentAgent是4级, 过滤掉后面的4级 * 相同级别只返回一个, 而且返回的数组元素 agent_level 越来越小 4->3->2->1 * @param agentList * @return */
private
ArrayList
<
ParentAgent
>
filterAgentList
(
List
<
ParentAgent
>
agentList
)
{
int
preAgentLevel
=
5
;
ArrayList
<
ParentAgent
>
returnList
=
new
ArrayList
<
ParentAgent
>();
for
(
ParentAgent
parentAgent
:
agentList
)
{
if
(
parentAgent
.
getLevel
()
<
preAgentLevel
)
{
returnList
.
add
(
new
ParentAgent
(
parentAgent
.
getUserId
(),
parentAgent
.
getAgentId
(),
parentAgent
.
getLevel
()));
preAgentLevel
=
parentAgent
.
getLevel
();
}
}
return
returnList
;
}
@Override
@CacheEvict
(
key
=
"#userId"
)
public
boolean
deleteRalationByUserId
(
Integer
userId
)
{
logger
.
info
(
"UserServiceImpl delete user relation cache, userId: {}"
,
userId
);
return
true
;
}
/** * ****************************************分割线****合伙人*************************************************************** */
/** * 合伙人数据 * @param userId * @return */
@Override
public
PartnerAccount
getPartnerAccountByUserId
(
Integer
userId
)
{
QueryWrapper
<
PartnerAccount
>
queryWrapper
=
new
QueryWrapper
<
PartnerAccount
>();
queryWrapper
.
eq
(
"user_id"
,
userId
);
return
partnerAccountMapper
.
selectOne
(
queryWrapper
);
}
@Override
public
List
<
PartnerAccount
>
getPartnerAccountChildrenByUserId
(
Integer
userId
)
{
return
partnerAccountMapper
.
getChildrenByUserId
(
userId
);
}
/** * 按userId查找上级合伙人的 userId 和 level * @param userId * @return */
private
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
;
}
/** * @description: 查找一个用户的全部合伙人上级 * @param userId * @author chen * @return List<ParentPartner> */
private
List
<
ParentPartner
>
getPartnerListByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"UserServiceImpl getPartnerListByUserId for user: {} ......"
,
userId
);
}
ArrayList
<
ParentPartner
>
partnerList
=
new
ArrayList
<
ParentPartner
>();
/** * 无限找 */
int
loopUserId
=
userId
;
int
loopTimes
=
0
;
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
());
}
if
(
partnerList
.
contains
(
parentPartner
))
{
logger
.
info
(
"发现互相邀请的关系 用户({}) 和 用户({})"
,
loopUserId
,
parentPartner
.
getUserId
());
logger
.
info
(
"退出循环, 不再继续查找"
);
break
;
}
partnerList
.
add
(
parentPartner
);
loopUserId
=
parentPartner
.
getUserId
();
loopTimes
++;
if
(
loopTimes
>
500
)
{
partnerList
.
clear
();
logger
.
error
(
"用户:{} 邀请关系异常, 已超500层"
,
userId
);
break
;
}
}
}
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
<
UserAgent
>();
queryWrapper
.
eq
(
"user_id"
,
userId
).
le
(
"agent_level"
,
4
);
return
userAgentMapper
.
selectOne
(
queryWrapper
);
}
@Override
public
List
<
UserAgent
>
getUserAgentChildrenByUserId
(
Integer
userId
)
{
return
userAgentMapper
.
getChildrenByUserId
(
userId
);
}
/** * 按agentId 查找上级代理商的 agentId 和 level * @param agentId * @return */
private
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
;
}
/** * @description: 查找一个用户的全部代理商上级 * 注意 !!!!!!!! 这个方法是按输入用户的邀请关系链上查找 第一个有agent_level<=4的代理商身份的邀请人, 然后再走他的代理关系 * 注意 !!!!!!!! 如果需要获取一个代理商的上级代理 需要从UserAgentService里的方法获取 * @param userId * @return List<ParentAgent> */
private
List
<
ParentAgent
>
getAgentListByUserId
(
Integer
userId
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"getAgentListByUserId for user: {} ......"
,
userId
);
}
ArrayList
<
ParentAgent
>
agentList
=
new
ArrayList
<
ParentAgent
>();
/** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */
int
loopUserId
=
userId
;
int
loopTimes
=
0
;
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
()));
loopTimes
++;
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
();
loopTimes
++;
if
(
loopTimes
>
500
)
{
agentList
.
clear
();
logger
.
error
(
"用户ID:{} 代理商关系异常, 已超500层"
,
userId
);
break
;
}
}
}
/** * 找完 "第一个是代理商的合伙人" 的 全部上级代理后 退出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
...
...
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