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
b1787e42
Commit
b1787e42
authored
Jul 22, 2019
by
guanchen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BUG修复
parent
4636191d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
123 additions
and
33 deletions
+123
-33
UserAgentMapper.java
...ain/java/com/lanren/huhu/partner/dao/UserAgentMapper.java
+3
-8
UserAgent.java
src/main/java/com/lanren/huhu/partner/domain/UserAgent.java
+47
-1
UserServiceImpl.java
...com/lanren/huhu/partner/service/impl/UserServiceImpl.java
+2
-2
UserAgentMapper.xml
src/main/resources/mapper/UserAgentMapper.xml
+71
-22
No files found.
src/main/java/com/lanren/huhu/partner/dao/UserAgentMapper.java
View file @
b1787e42
...
@@ -31,12 +31,6 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
...
@@ -31,12 +31,6 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
*/
*/
@SelectProvider
(
type
=
UserAgentSqlProvider
.
class
,
method
=
"getChildListByUserId"
)
@SelectProvider
(
type
=
UserAgentSqlProvider
.
class
,
method
=
"getChildListByUserId"
)
List
<
UserAgent
>
getChildListByUserId
(
@Param
(
"userId"
)
Integer
userId
,
@Param
(
"parentColumnName"
)
String
parentColumnName
);
List
<
UserAgent
>
getChildListByUserId
(
@Param
(
"userId"
)
Integer
userId
,
@Param
(
"parentColumnName"
)
String
parentColumnName
);
/**
* 将手机号为from的代理商的 平推 上级改为手机号为to的代理商
UserAgent
getUserAgentByPhone
(
String
phone
);
*/
int
updatePingtuiRelation
(
String
from
,
String
to
);
/**
* 将手机号为from的代理商的 层级 上级改为手机号为to的代理商
*/
int
updateCengjiRelation
(
String
from
,
String
to
);
}
}
\ No newline at end of file
src/main/java/com/lanren/huhu/partner/domain/UserAgent.java
View file @
b1787e42
...
@@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
...
@@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
lombok.Data
;
@Data
@Data
@TableName
(
value
=
"user_agent"
)
@TableName
(
value
=
"user_agent"
)
...
@@ -14,30 +15,60 @@ public class UserAgent implements Serializable {
...
@@ -14,30 +15,60 @@ public class UserAgent implements Serializable {
@TableId
(
value
=
"agent_id"
,
type
=
IdType
.
AUTO
)
@TableId
(
value
=
"agent_id"
,
type
=
IdType
.
AUTO
)
private
Integer
agentId
;
private
Integer
agentId
;
/**
* 用户ID
*/
@TableField
(
value
=
"user_id"
)
@TableField
(
value
=
"user_id"
)
private
Integer
userId
;
private
Integer
userId
;
/**
* 代理商名称
*/
@TableField
(
value
=
"agent_name"
)
@TableField
(
value
=
"agent_name"
)
private
String
agentName
;
private
String
agentName
;
/**
* 代理商电话
*/
@TableField
(
value
=
"agent_phone"
)
@TableField
(
value
=
"agent_phone"
)
private
String
agentPhone
;
private
String
agentPhone
;
/**
* 代理商等级
*/
@TableField
(
value
=
"agent_level"
)
@TableField
(
value
=
"agent_level"
)
private
Integer
agentLevel
;
private
Integer
agentLevel
;
/**
* 等级名称
*/
@TableField
(
value
=
"node_agent_level_name"
)
@TableField
(
value
=
"node_agent_level_name"
)
private
String
nodeAgentLevelName
;
private
String
nodeAgentLevelName
;
/**
* 上级代理商
*/
@TableField
(
value
=
"parent_agent_id"
)
@TableField
(
value
=
"parent_agent_id"
)
private
Integer
parentAgentId
;
private
Integer
parentAgentId
;
/**
* 公司昵称
*/
@TableField
(
value
=
"company"
)
private
String
company
;
@TableField
(
value
=
"parent_agent_list"
)
@TableField
(
value
=
"parent_agent_list"
)
private
String
parentAgentList
;
private
String
parentAgentList
;
/**
* 持卡数量
*/
@TableField
(
value
=
"card_num"
)
@TableField
(
value
=
"card_num"
)
private
Integer
cardNum
;
private
Integer
cardNum
;
/**
* 未激活数量
*/
@TableField
(
value
=
"card_activate_num"
)
@TableField
(
value
=
"card_activate_num"
)
private
Integer
cardActivateNum
;
private
Integer
cardActivateNum
;
...
@@ -99,6 +130,15 @@ public class UserAgent implements Serializable {
...
@@ -99,6 +130,15 @@ public class UserAgent implements Serializable {
private
Integer
deletedAt
;
private
Integer
deletedAt
;
/**
/**
* 推荐者ID 默认为上级ID 只有4级代理商用户有这个值
*/
@TableField
(
value
=
"presenter_id"
)
private
Integer
presenterId
;
@TableField
(
value
=
"present_time"
)
private
Integer
presentTime
;
/**
* level1 id
* level1 id
*/
*/
@TableField
(
value
=
"agent_level_one"
)
@TableField
(
value
=
"agent_level_one"
)
...
@@ -136,6 +176,8 @@ public class UserAgent implements Serializable {
...
@@ -136,6 +176,8 @@ public class UserAgent implements Serializable {
public
static
final
String
COL_PARENT_AGENT_ID
=
"parent_agent_id"
;
public
static
final
String
COL_PARENT_AGENT_ID
=
"parent_agent_id"
;
public
static
final
String
COL_COMPANY
=
"company"
;
public
static
final
String
COL_PARENT_AGENT_LIST
=
"parent_agent_list"
;
public
static
final
String
COL_PARENT_AGENT_LIST
=
"parent_agent_list"
;
public
static
final
String
COL_CARD_NUM
=
"card_num"
;
public
static
final
String
COL_CARD_NUM
=
"card_num"
;
...
@@ -172,6 +214,10 @@ public class UserAgent implements Serializable {
...
@@ -172,6 +214,10 @@ public class UserAgent implements Serializable {
public
static
final
String
COL_DELETED_AT
=
"deleted_at"
;
public
static
final
String
COL_DELETED_AT
=
"deleted_at"
;
public
static
final
String
COL_PRESENTER_ID
=
"presenter_id"
;
public
static
final
String
COL_PRESENT_TIME
=
"present_time"
;
public
static
final
String
COL_AGENT_LEVEL_ONE
=
"agent_level_one"
;
public
static
final
String
COL_AGENT_LEVEL_ONE
=
"agent_level_one"
;
public
static
final
String
COL_AGENT_LEVEL_TWO
=
"agent_level_two"
;
public
static
final
String
COL_AGENT_LEVEL_TWO
=
"agent_level_two"
;
...
...
src/main/java/com/lanren/huhu/partner/service/impl/UserServiceImpl.java
View file @
b1787e42
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
;
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 * @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
((
ArrayList
<
ParentAgent
>)
getAgentListByUserId
(
userId
,
PARENT_COLUMN_NAME_CENGJI
));
user
.
setPingtuiAgentList
((
ArrayList
<
ParentAgent
>)
getAgentListByUserId
(
userId
,
PARENT_COLUMN_NAME_PINGTUI
));
return
user
;
}
@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
>
getPartnerAccountChildListByUserId
(
Integer
userId
)
{
return
partnerAccountMapper
.
getChildListByUserId
(
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
)
||
parentPartner
.
getUserId
()
==
userId
)
{
logger
.
info
(
"发现互相邀请的关系 用户({})"
,
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
;
}
@Override
public
int
updatePartnerRelation
(
String
from
,
String
to
)
{
return
partnerAccountMapper
.
updatePartnerRelation
(
from
,
to
);
}
@Override
public
PartnerAccount
getPartnerAccountByPhone
(
String
phone
)
{
return
partnerAccountMapper
.
getPartnerAccountByPhone
(
phone
);
}
/** * ****************************************分割线****代理商*************************************************************** */
/** * 代理商数据 * @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
>
getUserAgentChildListByUserId
(
Integer
userId
,
String
parentColumnName
)
{
return
userAgentMapper
.
getChildListByUserId
(
userId
,
parentColumnName
);
}
@Override
public
int
updatePingtuiRelation
(
String
from
,
String
to
)
{
return
userAgentMapper
.
updatePingtuiRelation
(
from
,
to
);
}
@Override
public
int
updateCengjiRelation
(
String
from
,
String
to
)
{
return
userAgentMapper
.
updateCengjiRelation
(
from
,
to
);
}
/** * 按agentId 查找上级代理商的 agentId 和 level * @param agentId * @return */
private
ParentAgent
getParentAgent
(
Integer
agentId
,
String
parentColumnName
)
{
UserAgent
userAgent
=
userAgentMapper
.
getParentAgent
(
agentId
,
parentColumnName
);
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> */
@Override
public
List
<
ParentAgent
>
getAgentListByUserId
(
Integer
userId
,
String
parentColumnName
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"getAgentListByUserId for user: {} ......"
,
userId
);
}
ArrayList
<
ParentAgent
>
agentList
=
new
ArrayList
<
ParentAgent
>();
/** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */
/** * 要改成从自己开始找 所以添加判断 看自己是不是 */
UserAgent
selfAgent
=
getUserAgentByUserId
(
userId
);
int
loopUserId
=
userId
;
int
loopTimes
=
0
;
while
(
true
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"now loop uid is {}"
,
loopUserId
);
}
ParentPartner
parentPartner
=
getParentPartner
(
loopUserId
);
/** * 有上级合伙人 或者 自己就是代理商 */
if
(
null
!=
selfAgent
||
null
!=
parentPartner
)
{
UserAgent
firstAgent
;
if
(
null
!=
selfAgent
)
{
firstAgent
=
selfAgent
;
}
else
{
firstAgent
=
getUserAgentByUserId
(
parentPartner
.
getUserId
());
}
/** * 找到了第一个是代理商的合伙人 */
if
(
null
!=
firstAgent
)
{
/** * 然后开始 无限找 这个人的上级代理商 */
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"find first agent({}) for user: {}"
,
firstAgent
.
getAgentId
(),
userId
);
}
agentList
.
add
(
new
ParentAgent
(
firstAgent
.
getUserId
(),
firstAgent
.
getAgentId
(),
firstAgent
.
getAgentLevel
()));
loopTimes
++;
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop find parent agent start ......"
);
}
int
loogAgentId
=
firstAgent
.
getAgentId
();
while
(
true
)
{
ParentAgent
loopUserAgent
=
getParentAgent
(
loogAgentId
,
parentColumnName
);
if
(
null
==
loopUserAgent
)
{
break
;
}
else
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"parent agent is "
,
loopUserAgent
.
getAgentId
());
}
if
(
agentList
.
contains
(
loopUserAgent
)
||
loopUserAgent
.
getAgentId
()
==
firstAgent
.
getAgentId
())
{
logger
.
info
(
"发现互为上级的代理关系 代理商({})"
,
loopUserAgent
.
getAgentId
());
logger
.
info
(
"退出循环, 不再继续查找"
);
break
;
}
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
;
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 * @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
((
ArrayList
<
ParentAgent
>)
getAgentListByUserId
(
userId
,
PARENT_COLUMN_NAME_CENGJI
));
user
.
setPingtuiAgentList
((
ArrayList
<
ParentAgent
>)
getAgentListByUserId
(
userId
,
PARENT_COLUMN_NAME_PINGTUI
));
return
user
;
}
@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
>
getPartnerAccountChildListByUserId
(
Integer
userId
)
{
return
partnerAccountMapper
.
getChildListByUserId
(
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
)
||
parentPartner
.
getUserId
()
==
userId
)
{
logger
.
info
(
"发现互相邀请的关系 用户({})"
,
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
;
}
@Override
public
int
updatePartnerRelation
(
String
from
,
String
to
)
{
return
partnerAccountMapper
.
updatePartnerRelation
(
from
,
to
);
}
@Override
public
PartnerAccount
getPartnerAccountByPhone
(
String
phone
)
{
return
partnerAccountMapper
.
getPartnerAccountByPhone
(
phone
);
}
/** * ****************************************分割线****代理商*************************************************************** */
/** * 代理商数据 * @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
>
getUserAgentChildListByUserId
(
Integer
userId
,
String
parentColumnName
)
{
return
userAgentMapper
.
getChildListByUserId
(
userId
,
parentColumnName
);
}
@Override
public
int
updatePingtuiRelation
(
String
from
,
String
to
)
{
UserAgent
fromUa
=
userAgentMapper
.
getUserAgentByPhone
(
from
);
UserAgent
toUa
=
userAgentMapper
.
getUserAgentByPhone
(
to
);
if
(
null
!=
fromUa
&&
null
!=
toUa
)
{
fromUa
.
setPresenterId
(
toUa
.
getAgentId
());
}
return
userAgentMapper
.
updateById
(
fromUa
);
}
@Override
public
int
updateCengjiRelation
(
String
from
,
String
to
)
{
UserAgent
fromUa
=
userAgentMapper
.
getUserAgentByPhone
(
from
);
UserAgent
toUa
=
userAgentMapper
.
getUserAgentByPhone
(
to
);
if
(
null
!=
fromUa
&&
null
!=
toUa
)
{
fromUa
.
setParentAgentId
(
toUa
.
getAgentId
());
}
return
userAgentMapper
.
updateById
(
fromUa
);
}
/** * 按agentId 查找上级代理商的 agentId 和 level * @param agentId * @return */
private
ParentAgent
getParentAgent
(
Integer
agentId
,
String
parentColumnName
)
{
UserAgent
userAgent
=
userAgentMapper
.
getParentAgent
(
agentId
,
parentColumnName
);
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> */
@Override
public
List
<
ParentAgent
>
getAgentListByUserId
(
Integer
userId
,
String
parentColumnName
)
{
if
(
logger
.
isInfoEnabled
())
{
logger
.
info
(
"getAgentListByUserId for user: {} ......"
,
userId
);
}
ArrayList
<
ParentAgent
>
agentList
=
new
ArrayList
<
ParentAgent
>();
/** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */
/** * 要改成从自己开始找 所以添加判断 看自己是不是 */
UserAgent
selfAgent
=
getUserAgentByUserId
(
userId
);
int
loopUserId
=
userId
;
int
loopTimes
=
0
;
while
(
true
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"now loop uid is {}"
,
loopUserId
);
}
ParentPartner
parentPartner
=
getParentPartner
(
loopUserId
);
/** * 有上级合伙人 或者 自己就是代理商 */
if
(
null
!=
selfAgent
||
null
!=
parentPartner
)
{
UserAgent
firstAgent
;
if
(
null
!=
selfAgent
)
{
firstAgent
=
selfAgent
;
}
else
{
firstAgent
=
getUserAgentByUserId
(
parentPartner
.
getUserId
());
}
/** * 找到了第一个是代理商的合伙人 */
if
(
null
!=
firstAgent
)
{
/** * 然后开始 无限找 这个人的上级代理商 */
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"find first agent({}) for user: {}"
,
firstAgent
.
getAgentId
(),
userId
);
}
agentList
.
add
(
new
ParentAgent
(
firstAgent
.
getUserId
(),
firstAgent
.
getAgentId
(),
firstAgent
.
getAgentLevel
()));
loopTimes
++;
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"loop find parent agent start ......"
);
}
int
loogAgentId
=
firstAgent
.
getAgentId
();
while
(
true
)
{
ParentAgent
loopUserAgent
=
getParentAgent
(
loogAgentId
,
parentColumnName
);
if
(
null
==
loopUserAgent
)
{
break
;
}
else
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
info
(
"parent agent is "
,
loopUserAgent
.
getAgentId
());
}
if
(
agentList
.
contains
(
loopUserAgent
)
||
loopUserAgent
.
getAgentId
()
==
firstAgent
.
getAgentId
())
{
logger
.
info
(
"发现互为上级的代理关系 代理商({})"
,
loopUserAgent
.
getAgentId
());
logger
.
info
(
"退出循环, 不再继续查找"
);
break
;
}
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
...
...
src/main/resources/mapper/UserAgentMapper.xml
View file @
b1787e42
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
<result
column=
"agent_level"
property=
"agentLevel"
/>
<result
column=
"agent_level"
property=
"agentLevel"
/>
<result
column=
"node_agent_level_name"
property=
"nodeAgentLevelName"
/>
<result
column=
"node_agent_level_name"
property=
"nodeAgentLevelName"
/>
<result
column=
"parent_agent_id"
property=
"parentAgentId"
/>
<result
column=
"parent_agent_id"
property=
"parentAgentId"
/>
<result
column=
"company"
property=
"company"
/>
<result
column=
"parent_agent_list"
property=
"parentAgentList"
/>
<result
column=
"parent_agent_list"
property=
"parentAgentList"
/>
<result
column=
"card_num"
property=
"cardNum"
/>
<result
column=
"card_num"
property=
"cardNum"
/>
<result
column=
"card_activate_num"
property=
"cardActivateNum"
/>
<result
column=
"card_activate_num"
property=
"cardActivateNum"
/>
...
@@ -28,6 +29,8 @@
...
@@ -28,6 +29,8 @@
<result
column=
"created_at"
property=
"createdAt"
/>
<result
column=
"created_at"
property=
"createdAt"
/>
<result
column=
"updated_at"
property=
"updatedAt"
/>
<result
column=
"updated_at"
property=
"updatedAt"
/>
<result
column=
"deleted_at"
property=
"deletedAt"
/>
<result
column=
"deleted_at"
property=
"deletedAt"
/>
<result
column=
"presenter_id"
property=
"presenterId"
/>
<result
column=
"present_time"
property=
"presentTime"
/>
<result
column=
"agent_level_one"
property=
"agentLevelOne"
/>
<result
column=
"agent_level_one"
property=
"agentLevelOne"
/>
<result
column=
"agent_level_two"
property=
"agentLevelTwo"
/>
<result
column=
"agent_level_two"
property=
"agentLevelTwo"
/>
<result
column=
"agent_level_three"
property=
"agentLevelThree"
/>
<result
column=
"agent_level_three"
property=
"agentLevelThree"
/>
...
@@ -36,10 +39,10 @@
...
@@ -36,10 +39,10 @@
<sql
id=
"Base_Column_List"
>
<sql
id=
"Base_Column_List"
>
<!--@mbg.generated-->
<!--@mbg.generated-->
agent_id, user_id, agent_name, agent_phone, agent_level, node_agent_level_name, parent_agent_id,
agent_id, user_id, agent_name, agent_phone, agent_level, node_agent_level_name, parent_agent_id,
parent_agent_list, card_num, card_activate_num, commission_rate, pid, jd_pid, `identity`
,
company, parent_agent_list, card_num, card_activate_num, commission_rate, pid, jd_pid
,
account_type, account, have_card, remark, register_from, invite_time, activ
e_time,
`identity`, account_type, account, have_card, remark, register_from, invit
e_time,
a
gent_state, created_at, updated_at, deleted_at, agent_level_one, agent_level_two
,
a
ctive_time, agent_state, created_at, updated_at, deleted_at, presenter_id, present_time
,
agent_level_three, agent_level_four
agent_level_
one, agent_level_two, agent_level_
three, agent_level_four
</sql>
</sql>
<update
id=
"updateBatch"
parameterType=
"java.util.List"
>
<update
id=
"updateBatch"
parameterType=
"java.util.List"
>
<!--@mbg.generated-->
<!--@mbg.generated-->
...
@@ -75,6 +78,11 @@
...
@@ -75,6 +78,11 @@
when agent_id = #{item.agentId} then #{item.parentAgentId}
when agent_id = #{item.agentId} then #{item.parentAgentId}
</foreach>
</foreach>
</trim>
</trim>
<trim
prefix=
"company = case"
suffix=
"end,"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
when agent_id = #{item.agentId} then #{item.company}
</foreach>
</trim>
<trim
prefix=
"parent_agent_list = case"
suffix=
"end,"
>
<trim
prefix=
"parent_agent_list = case"
suffix=
"end,"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
when agent_id = #{item.agentId} then #{item.parentAgentList}
when agent_id = #{item.agentId} then #{item.parentAgentList}
...
@@ -165,6 +173,16 @@
...
@@ -165,6 +173,16 @@
when agent_id = #{item.agentId} then #{item.deletedAt}
when agent_id = #{item.agentId} then #{item.deletedAt}
</foreach>
</foreach>
</trim>
</trim>
<trim
prefix=
"presenter_id = case"
suffix=
"end,"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
when agent_id = #{item.agentId} then #{item.presenterId}
</foreach>
</trim>
<trim
prefix=
"present_time = case"
suffix=
"end,"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
when agent_id = #{item.agentId} then #{item.presentTime}
</foreach>
</trim>
<trim
prefix=
"agent_level_one = case"
suffix=
"end,"
>
<trim
prefix=
"agent_level_one = case"
suffix=
"end,"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
<foreach
collection=
"list"
index=
"index"
item=
"item"
>
when agent_id = #{item.agentId} then #{item.agentLevelOne}
when agent_id = #{item.agentId} then #{item.agentLevelOne}
...
@@ -195,17 +213,18 @@
...
@@ -195,17 +213,18 @@
<!--@mbg.generated-->
<!--@mbg.generated-->
insert into user_agent
insert into user_agent
(user_id, agent_name, agent_phone, agent_level, node_agent_level_name, parent_agent_id,
(user_id, agent_name, agent_phone, agent_level, node_agent_level_name, parent_agent_id,
parent_agent_list, card_num, card_activate_num, commission_rate, pid, jd_pid, `identity`
,
company, parent_agent_list, card_num, card_activate_num, commission_rate, pid
,
account_type, account, have_card, remark, register_from, invite_time, activ
e_time,
jd_pid, `identity`, account_type, account, have_card, remark, register_from, invit
e_time,
a
gent_state, created_at, updated_at, deleted_at, agent_level_one, agent_level_two
,
a
ctive_time, agent_state, created_at, updated_at, deleted_at, presenter_id, present_time
,
agent_level_three, agent_level_four)
agent_level_
one, agent_level_two, agent_level_
three, agent_level_four)
values
values
<foreach
collection=
"list"
item=
"item"
separator=
","
>
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(#{item.userId}, #{item.agentName}, #{item.agentPhone}, #{item.agentLevel}, #{item.nodeAgentLevelName},
(#{item.userId}, #{item.agentName}, #{item.agentPhone}, #{item.agentLevel}, #{item.nodeAgentLevelName},
#{item.parentAgentId}, #{item.parentAgentList}, #{item.cardNum}, #{item.cardActivateNum},
#{item.parentAgentId}, #{item.company}, #{item.parentAgentList}, #{item.cardNum},
#{item.commissionRate}, #{item.pid}, #{item.jdPid}, #{item.identity}, #{item.accountType},
#{item.cardActivateNum}, #{item.commissionRate}, #{item.pid}, #{item.jdPid}, #{item.identity},
#{item.account}, #{item.haveCard}, #{item.remark}, #{item.registerFrom}, #{item.inviteTime},
#{item.accountType}, #{item.account}, #{item.haveCard}, #{item.remark}, #{item.registerFrom},
#{item.activeTime}, #{item.agentState}, #{item.createdAt}, #{item.updatedAt}, #{item.deletedAt},
#{item.inviteTime}, #{item.activeTime}, #{item.agentState}, #{item.createdAt},
#{item.updatedAt}, #{item.deletedAt}, #{item.presenterId}, #{item.presentTime},
#{item.agentLevelOne}, #{item.agentLevelTwo}, #{item.agentLevelThree}, #{item.agentLevelFour}
#{item.agentLevelOne}, #{item.agentLevelTwo}, #{item.agentLevelThree}, #{item.agentLevelFour}
)
)
</foreach>
</foreach>
...
@@ -223,6 +242,7 @@
...
@@ -223,6 +242,7 @@
agent_level,
agent_level,
node_agent_level_name,
node_agent_level_name,
parent_agent_id,
parent_agent_id,
company,
parent_agent_list,
parent_agent_list,
card_num,
card_num,
card_activate_num,
card_activate_num,
...
@@ -241,6 +261,8 @@
...
@@ -241,6 +261,8 @@
created_at,
created_at,
updated_at,
updated_at,
deleted_at,
deleted_at,
presenter_id,
present_time,
agent_level_one,
agent_level_one,
agent_level_two,
agent_level_two,
agent_level_three,
agent_level_three,
...
@@ -257,6 +279,7 @@
...
@@ -257,6 +279,7 @@
#{agentLevel},
#{agentLevel},
#{nodeAgentLevelName},
#{nodeAgentLevelName},
#{parentAgentId},
#{parentAgentId},
#{company},
#{parentAgentList},
#{parentAgentList},
#{cardNum},
#{cardNum},
#{cardActivateNum},
#{cardActivateNum},
...
@@ -275,6 +298,8 @@
...
@@ -275,6 +298,8 @@
#{createdAt},
#{createdAt},
#{updatedAt},
#{updatedAt},
#{deletedAt},
#{deletedAt},
#{presenterId},
#{presentTime},
#{agentLevelOne},
#{agentLevelOne},
#{agentLevelTwo},
#{agentLevelTwo},
#{agentLevelThree},
#{agentLevelThree},
...
@@ -291,6 +316,7 @@
...
@@ -291,6 +316,7 @@
agent_level = #{agentLevel},
agent_level = #{agentLevel},
node_agent_level_name = #{nodeAgentLevelName},
node_agent_level_name = #{nodeAgentLevelName},
parent_agent_id = #{parentAgentId},
parent_agent_id = #{parentAgentId},
company = #{company},
parent_agent_list = #{parentAgentList},
parent_agent_list = #{parentAgentList},
card_num = #{cardNum},
card_num = #{cardNum},
card_activate_num = #{cardActivateNum},
card_activate_num = #{cardActivateNum},
...
@@ -309,6 +335,8 @@
...
@@ -309,6 +335,8 @@
created_at = #{createdAt},
created_at = #{createdAt},
updated_at = #{updatedAt},
updated_at = #{updatedAt},
deleted_at = #{deletedAt},
deleted_at = #{deletedAt},
presenter_id = #{presenterId},
present_time = #{presentTime},
agent_level_one = #{agentLevelOne},
agent_level_one = #{agentLevelOne},
agent_level_two = #{agentLevelTwo},
agent_level_two = #{agentLevelTwo},
agent_level_three = #{agentLevelThree},
agent_level_three = #{agentLevelThree},
...
@@ -340,6 +368,9 @@
...
@@ -340,6 +368,9 @@
<if
test=
"parentAgentId != null"
>
<if
test=
"parentAgentId != null"
>
parent_agent_id,
parent_agent_id,
</if>
</if>
<if
test=
"company != null"
>
company,
</if>
<if
test=
"parentAgentList != null"
>
<if
test=
"parentAgentList != null"
>
parent_agent_list,
parent_agent_list,
</if>
</if>
...
@@ -394,6 +425,12 @@
...
@@ -394,6 +425,12 @@
<if
test=
"deletedAt != null"
>
<if
test=
"deletedAt != null"
>
deleted_at,
deleted_at,
</if>
</if>
<if
test=
"presenterId != null"
>
presenter_id,
</if>
<if
test=
"presentTime != null"
>
present_time,
</if>
<if
test=
"agentLevelOne != null"
>
<if
test=
"agentLevelOne != null"
>
agent_level_one,
agent_level_one,
</if>
</if>
...
@@ -430,6 +467,9 @@
...
@@ -430,6 +467,9 @@
<if
test=
"parentAgentId != null"
>
<if
test=
"parentAgentId != null"
>
#{parentAgentId},
#{parentAgentId},
</if>
</if>
<if
test=
"company != null"
>
#{company},
</if>
<if
test=
"parentAgentList != null"
>
<if
test=
"parentAgentList != null"
>
#{parentAgentList},
#{parentAgentList},
</if>
</if>
...
@@ -484,6 +524,12 @@
...
@@ -484,6 +524,12 @@
<if
test=
"deletedAt != null"
>
<if
test=
"deletedAt != null"
>
#{deletedAt},
#{deletedAt},
</if>
</if>
<if
test=
"presenterId != null"
>
#{presenterId},
</if>
<if
test=
"presentTime != null"
>
#{presentTime},
</if>
<if
test=
"agentLevelOne != null"
>
<if
test=
"agentLevelOne != null"
>
#{agentLevelOne},
#{agentLevelOne},
</if>
</if>
...
@@ -520,6 +566,9 @@
...
@@ -520,6 +566,9 @@
<if
test=
"parentAgentId != null"
>
<if
test=
"parentAgentId != null"
>
parent_agent_id = #{parentAgentId},
parent_agent_id = #{parentAgentId},
</if>
</if>
<if
test=
"company != null"
>
company = #{company},
</if>
<if
test=
"parentAgentList != null"
>
<if
test=
"parentAgentList != null"
>
parent_agent_list = #{parentAgentList},
parent_agent_list = #{parentAgentList},
</if>
</if>
...
@@ -574,6 +623,12 @@
...
@@ -574,6 +623,12 @@
<if
test=
"deletedAt != null"
>
<if
test=
"deletedAt != null"
>
deleted_at = #{deletedAt},
deleted_at = #{deletedAt},
</if>
</if>
<if
test=
"presenterId != null"
>
presenter_id = #{presenterId},
</if>
<if
test=
"presentTime != null"
>
present_time = #{presentTime},
</if>
<if
test=
"agentLevelOne != null"
>
<if
test=
"agentLevelOne != null"
>
agent_level_one = #{agentLevelOne},
agent_level_one = #{agentLevelOne},
</if>
</if>
...
@@ -588,14 +643,7 @@
...
@@ -588,14 +643,7 @@
</if>
</if>
</trim>
</trim>
</insert>
</insert>
<update
id=
"updatePingtuiRelation"
>
<select
id=
"getUserAgentByPhone"
resultMap=
"BaseResultMap"
>
UPDATE user_agent
SELECT * FROM user_agent b WHERE agent_phone=#{phone}
SET presenter_id=(SELECT agent_id FROM user_agent WHERE agent_phone=#{to})
</select>
WHERE agent_phone=#{from}
</update>
<update
id=
"updateCengjiRelation"
>
UPDATE user_agent
SET parent_agent_id=(SELECT agent_id FROM user_agent WHERE agent_phone=#{to})
WHERE agent_phone=#{from}
</update>
</mapper>
</mapper>
\ 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