Commit a42f375c by guanchen

修复互为邀请人导致的死循环bug

处理平推奖励时, 按平推id查找上级
parent fb959665
...@@ -8,9 +8,6 @@ import org.apache.ibatis.annotations.Select; ...@@ -8,9 +8,6 @@ import org.apache.ibatis.annotations.Select;
import java.util.List; import java.util.List;
/**
* @author houseme
*/
@Mapper @Mapper
public interface UserAgentMapper extends BaseMapper<UserAgent> { public interface UserAgentMapper extends BaseMapper<UserAgent> {
int updateBatch(List<UserAgent> list); int updateBatch(List<UserAgent> list);
...@@ -23,12 +20,13 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> { ...@@ -23,12 +20,13 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
/** /**
* 按agentId查找上级 UserAgent * 按agentId查找上级 UserAgent
* 注意!!!!!!!!!!!! 查找上级用的是字段 presenter_id
* @param agentId * @param agentId
* @return * @return
*/ */
@Select("SELECT b.* " + @Select("SELECT b.* " +
"FROM user_agent a " + "FROM user_agent a " +
"JOIN user_agent b on a.parent_agent_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);
} }
\ No newline at end of file
...@@ -11,7 +11,7 @@ import lombok.Data; ...@@ -11,7 +11,7 @@ import lombok.Data;
@Data @Data
@TableName(value = "user_agent") @TableName(value = "user_agent")
public class UserAgent implements Serializable { 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;
@TableField(value = "user_id") @TableField(value = "user_id")
......
...@@ -20,4 +20,23 @@ public class ParentPartner extends BaseModel { ...@@ -20,4 +20,23 @@ public class ParentPartner extends BaseModel {
this.userId = userId; this.userId = userId;
this.level = level; this.level = level;
} }
@Override
public boolean equals(Object obj) {
if(obj==null) {
return false;
}
if(this==obj) {
return true;
}
if(obj instanceof ParentPartner){
ParentPartner parentPartner = (ParentPartner) obj;
if(parentPartner.userId == this.userId) {
return true;
} else {
return false;
}
}
return false;
}
} }
...@@ -6,7 +6,6 @@ import com.lanren.huhu.partner.domain.AgentReward; ...@@ -6,7 +6,6 @@ import com.lanren.huhu.partner.domain.AgentReward;
import com.lanren.huhu.partner.domain.UserAgent; import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.AgentRewardMessage; import com.lanren.huhu.partner.model.AgentRewardMessage;
import com.lanren.huhu.partner.model.ParentAgent; import com.lanren.huhu.partner.model.ParentAgent;
import com.lanren.huhu.partner.model.User;
import com.lanren.huhu.partner.service.AgentRewardService; import com.lanren.huhu.partner.service.AgentRewardService;
import com.lanren.huhu.partner.service.PartnerAccountService; import com.lanren.huhu.partner.service.PartnerAccountService;
import com.lanren.huhu.partner.service.UserAgentService; import com.lanren.huhu.partner.service.UserAgentService;
...@@ -109,8 +108,13 @@ public class AgentRewardQueueTask { ...@@ -109,8 +108,13 @@ public class AgentRewardQueueTask {
logger.info("代理商id: {} 不是城市代理, 跳过不处理", message); logger.info("代理商id: {} 不是城市代理, 跳过不处理", message);
return; return;
} }
User user = userService.getRelationByUserId(userAgent.getUserId()); /**
ArrayList<ParentAgent> parentList = user.getAgentList(); * 这里的逻辑有问题, 不能用这个接口找上级, 因为会先找一次直接邀请人,
* 只能按message.getAgentId()的代理商id, 找user_agent表里的上级
*/
// User user = userService.getRelationByUserId(userAgent.getUserId());
// ArrayList<ParentAgent> parentList = user.getAgentList();
ArrayList<ParentAgent> parentList = (ArrayList<ParentAgent>) userAgentService.getParentAgentListByAgentId(userAgent.getAgentId());
ArrayList<ParentAgent> level4List = new ArrayList<ParentAgent>(); ArrayList<ParentAgent> level4List = new ArrayList<ParentAgent>();
if (parentList.size() > 0) { if (parentList.size() > 0) {
/** /**
......
...@@ -2,10 +2,11 @@ package com.lanren.huhu.partner.service; ...@@ -2,10 +2,11 @@ package com.lanren.huhu.partner.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.UserAgent; import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.ParentAgent;
import java.util.List; import java.util.List;
public interface UserAgentService extends IService<UserAgent>{ public interface UserAgentService extends IService<UserAgent> {
int updateBatch(List<UserAgent> list); int updateBatch(List<UserAgent> list);
...@@ -21,4 +22,18 @@ public interface UserAgentService extends IService<UserAgent>{ ...@@ -21,4 +22,18 @@ public interface UserAgentService extends IService<UserAgent>{
* @return * @return
*/ */
UserAgent getOneByAgentId(Integer agentId); UserAgent getOneByAgentId(Integer agentId);
/**
* @description: 查找一个用户的全部代理商上级, 根据字段presenter_id
* @param agentId
* @return List<ParentAgent>
*/
List<ParentAgent> getParentAgentListByAgentId(Integer agentId);
/**
* @description: 查找一个用户的直接代理商上级, 根据字段presenter_id
* @param agentId
* @return ParentAgent
*/
ParentAgent getParentAgentByAgentId(Integer agentId);
} }
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注解的方法之外进行操作 * @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); // /** // * 按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
......
...@@ -4,17 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -4,17 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.domain.UserAgent;
import com.lanren.huhu.partner.model.ParentAgent;
import com.lanren.huhu.partner.service.UserAgentService; import com.lanren.huhu.partner.service.UserAgentService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* @author chen * @author chen
*/ */
@Service @Service
public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent> implements UserAgentService{ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent> implements UserAgentService {
@Autowired @Autowired
UserAgentMapper userAgentMapper; UserAgentMapper userAgentMapper;
...@@ -23,14 +25,17 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent ...@@ -23,14 +25,17 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
public int updateBatch(List<UserAgent> list) { public int updateBatch(List<UserAgent> list) {
return baseMapper.updateBatch(list); return baseMapper.updateBatch(list);
} }
@Override @Override
public int batchInsert(List<UserAgent> list) { public int batchInsert(List<UserAgent> list) {
return baseMapper.batchInsert(list); return baseMapper.batchInsert(list);
} }
@Override @Override
public int insertOrUpdate(UserAgent record) { public int insertOrUpdate(UserAgent record) {
return baseMapper.insertOrUpdate(record); return baseMapper.insertOrUpdate(record);
} }
@Override @Override
public int insertOrUpdateSelective(UserAgent record) { public int insertOrUpdateSelective(UserAgent record) {
return baseMapper.insertOrUpdateSelective(record); return baseMapper.insertOrUpdateSelective(record);
...@@ -44,4 +49,26 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent ...@@ -44,4 +49,26 @@ public class UserAgentServiceImpl extends ServiceImpl<UserAgentMapper, UserAgent
; ;
return baseMapper.selectOne(queryWrapper); return baseMapper.selectOne(queryWrapper);
} }
@Override
public List<ParentAgent> getParentAgentListByAgentId(Integer agentId) {
List<ParentAgent> returnList = new ArrayList<ParentAgent>();
int loogAgentId = agentId;
while (true) {
ParentAgent parentAgent = getParentAgentByAgentId(loogAgentId);
if (null == parentAgent) {
break;
} else {
returnList.add(parentAgent);
loogAgentId = parentAgent.getAgentId();
}
}
return returnList;
}
@Override
public ParentAgent getParentAgentByAgentId(Integer agentId) {
UserAgent userAgent = baseMapper.getParentAgent(agentId);
return new ParentAgent(userAgent.getUserId(), userAgent.getAgentId(), userAgent.getAgentLevel());
}
} }
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