Commit da2cdfa8 by guanchen

合并master代码

parents f8893b57 85eecee3
......@@ -29,4 +29,7 @@ build/
### VS Code ###
.vscode/
data
\ No newline at end of file
data
src/main/.DS_Store
src/main/java/.DS_Store
src/main/resources/.DS_Store
......@@ -5,6 +5,7 @@ import com.lanren.huhu.partner.model.Agent;
import com.lanren.huhu.partner.model.AgentResponse;
import com.lanren.huhu.partner.model.ParentAgent;
import com.lanren.huhu.partner.result.Result;
import com.lanren.huhu.partner.schedule.AgentDailyExpandTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -25,6 +26,8 @@ public class AgentController {
@Autowired
AgentManager agentManager;
@Autowired
AgentDailyExpandTask agentDailyExpandTask;
@RequestMapping(value = "/level", method = RequestMethod.POST)
public Result<AgentResponse> getAgentLevel(@RequestBody @Valid Agent agent, @RequestHeader HttpHeaders headers) {
......@@ -55,4 +58,12 @@ public class AgentController {
}
return agentManager.getPingtuiParentList(agent.getAgentId());
}
@RequestMapping(value = "/expand/{dat}", method = RequestMethod.GET)
public Result<String> updateOneDayExpand(@PathVariable("dat") String dat) {
agentDailyExpandTask.runSummary(dat);
logger.info("============>" + Thread.currentThread().getName());
Result<String> result = new Result<String>();
result.setData("异步,正在执行刷新......");
return result;
}
}
......@@ -57,6 +57,7 @@ public class UserController {
public Result<String> updateRelation(@PathVariable("from") String from, @PathVariable("to") String to, @PathVariable("type") int type) {
userManager.updateRelation(from, to, type);
logger.info("============>" + Thread.currentThread().getName());
logger.info("============>from{}, to{}, type{}", from, to, type );
Result<String> result = new Result<String>();
result.setData("异步,正在执行更新新......");
return result;
......
......@@ -40,7 +40,5 @@ public interface PartnerAccountMapper extends BaseMapper<PartnerAccount> {
PartnerAccount selectOneForUpdate(Integer userId);
int updatePartnerRelation(String from, String to);
PartnerAccount getPartnerAccountByPhone(String phone);
}
\ No newline at end of file
......@@ -31,12 +31,6 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
*/
@SelectProvider(type = UserAgentSqlProvider.class, method = "getChildListByUserId")
List<UserAgent> getChildListByUserId(@Param("userId") Integer userId, @Param("parentColumnName") String parentColumnName);
/**
* 将手机号为from的代理商的 平推 上级改为手机号为to的代理商
*/
int updatePingtuiRelation(String from, String to);
/**
* 将手机号为from的代理商的 层级 上级改为手机号为to的代理商
*/
int updateCengjiRelation(String from, String to);
UserAgent getUserAgentByPhone(String phone);
}
\ No newline at end of file
......@@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data;
@Data
@TableName(value = "user_agent")
......@@ -14,30 +15,60 @@ public class UserAgent implements Serializable {
@TableId(value = "agent_id", type = IdType.AUTO)
private Integer agentId;
/**
* 用户ID
*/
@TableField(value = "user_id")
private Integer userId;
/**
* 代理商名称
*/
@TableField(value = "agent_name")
private String agentName;
/**
* 代理商电话
*/
@TableField(value = "agent_phone")
private String agentPhone;
/**
* 代理商等级
*/
@TableField(value = "agent_level")
private Integer agentLevel;
/**
* 等级名称
*/
@TableField(value = "node_agent_level_name")
private String nodeAgentLevelName;
/**
* 上级代理商
*/
@TableField(value = "parent_agent_id")
private Integer parentAgentId;
/**
* 公司昵称
*/
@TableField(value = "company")
private String company;
@TableField(value = "parent_agent_list")
private String parentAgentList;
/**
* 持卡数量
*/
@TableField(value = "card_num")
private Integer cardNum;
/**
* 未激活数量
*/
@TableField(value = "card_activate_num")
private Integer cardActivateNum;
......@@ -99,6 +130,15 @@ public class UserAgent implements Serializable {
private Integer deletedAt;
/**
* 推荐者ID 默认为上级ID 只有4级代理商用户有这个值
*/
@TableField(value = "presenter_id")
private Integer presenterId;
@TableField(value = "present_time")
private Integer presentTime;
/**
* level1 id
*/
@TableField(value = "agent_level_one")
......@@ -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_COMPANY = "company";
public static final String COL_PARENT_AGENT_LIST = "parent_agent_list";
public static final String COL_CARD_NUM = "card_num";
......@@ -172,6 +214,10 @@ public class UserAgent implements Serializable {
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_TWO = "agent_level_two";
......
......@@ -144,6 +144,7 @@ public class AgentRewardQueueTask {
rewardCnt++;
} else if (rewardCnt < 3){
rewardList.add(agent);
rewardCnt++;
} else {
break;
}
......@@ -197,6 +198,7 @@ public class AgentRewardQueueTask {
doPush(reward);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
logger.error("插入代理商分成奖励失败, 奖励 {}", message);
/**
* 回滚事务
......@@ -247,7 +249,7 @@ public class AgentRewardQueueTask {
agentReward.setSourceUserLevel(sourceUserLevel);
agentReward.setCreatedAt(System.currentTimeMillis() / 1000L);
agentReward.setCommissionRate(commissionRate);
agentReward.setRewardTypeChild(message.getRewardTypeChild());
agentReward.setRewardTypeChild(message.getRewardTypeChild() == null ? "" : message.getRewardTypeChild());
/**
* agent_reward里:
* money 面额(message里, 需要上供的代理商自己获得的奖励)
......
......@@ -278,6 +278,7 @@ public class PartnerSettleTask {
BigDecimal commission = cash.multiply(partnerReward.getCommissionRate());
partnerReward.setCash(cash);
partnerReward.setCommissionAcount(commission);
partnerReward.setSettleState(Constants.SETTLE_STATE_DONE);
partnerRewardService.updateById(partnerReward);
}
/**
......
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; }}
\ No newline at end of file
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.PartnerInviteRelationMapper;
import com.lanren.huhu.partner.dao.UserAgentMapper;
import com.lanren.huhu.partner.domain.PartnerAccount;
import com.lanren.huhu.partner.domain.PartnerInviteRelation;
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.HashSet;
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;
@Autowired
private PartnerInviteRelationMapper partnerInviteRelationMapper;
/**
* ****************************************分割线****用户邀请关系***************************************************************
*/
/**
* 用户上级 合伙人 和 代理 关系
* @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) {
PartnerAccount fromPartnerAccount = partnerAccountMapper.getPartnerAccountByPhone(from);
PartnerAccount toPartnerAccount = partnerAccountMapper.getPartnerAccountByPhone(to);
if (null != fromPartnerAccount && null != toPartnerAccount) {
QueryWrapper<PartnerInviteRelation> wrapper = new QueryWrapper<PartnerInviteRelation>();
wrapper.eq("user_id", fromPartnerAccount.getUserId());
PartnerInviteRelation partnerInviteRelation = partnerInviteRelationMapper.selectOne(wrapper);
partnerInviteRelation.setInviteUserId(toPartnerAccount.getUserId());
partnerInviteRelation.setInvitePartnerLevel(toPartnerAccount.getIsSuperPartner() == 1 ? 30 : toPartnerAccount.getPartnerLevel());
return partnerInviteRelationMapper.updateById(partnerInviteRelation);
} else {
return 0;
}
}
@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>();
HashSet<Integer> existingUserIdSet = new HashSet<Integer>();
/**
* 无限找
* 先无限找上级合伙人, 直到找到第一个是代理商的合伙人
*/
/**
* 要改成从自己开始找 所以添加判断 看自己是不是
*/
UserAgent selfAgent = getUserAgentByUserId(userId);
int loopUserId = userId;
int loopTimes = 0;
while (true) {
if (logger.isDebugEnabled()) {
logger.info("now loop uid is {}", loopUserId);
}
existingUserIdSet.add(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();
if (existingUserIdSet.contains(loopUserId)) {
logger.info("发现互为上级的用户邀请关系 用户ID({})", loopUserId);
logger.info("退出循环, 不再继续查找");
break;
}
}
} else {
/**
* 没有上级合伙人 打印结束信息 跳出循环
*/
if (logger.isDebugEnabled()) {
logger.info("loop end with userId: {}", loopUserId);
}
break;
}
}
if (logger.isInfoEnabled()) {
logger.info("setAgentList for user: {} end", userId);
}
return agentList;
}
}
......@@ -501,16 +501,6 @@
<select id="selectOneForUpdate" resultMap="BaseResultMap">
SELECT * FROM partner_account WHERE user_id = #{userId} FOR UPDATE;
</select>
<update id="updatePartnerRelation">
UPDATE partner_invite_relation a
JOIN user_info b ON a.user_id=b.user_id
SET a.invite_user_id = (
SELECT a.user_id
FROM partner_account a JOIN user_info b ON a.user_id=b.user_id
WHERE b.user_phone='#{to}'
)
WHERE b.user_phone='#{from}'
</update>
<select id="getPartnerAccountByPhone" resultMap="BaseResultMap">
SELECT a.*
FROM partner_account a
......
......@@ -10,6 +10,7 @@
<result column="agent_level" property="agentLevel" />
<result column="node_agent_level_name" property="nodeAgentLevelName" />
<result column="parent_agent_id" property="parentAgentId" />
<result column="company" property="company" />
<result column="parent_agent_list" property="parentAgentList" />
<result column="card_num" property="cardNum" />
<result column="card_activate_num" property="cardActivateNum" />
......@@ -28,6 +29,8 @@
<result column="created_at" property="createdAt" />
<result column="updated_at" property="updatedAt" />
<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_two" property="agentLevelTwo" />
<result column="agent_level_three" property="agentLevelThree" />
......@@ -36,10 +39,10 @@
<sql id="Base_Column_List">
<!--@mbg.generated-->
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`,
account_type, account, have_card, remark, register_from, invite_time, active_time,
agent_state, created_at, updated_at, deleted_at, agent_level_one, agent_level_two,
agent_level_three, agent_level_four
company, parent_agent_list, card_num, card_activate_num, commission_rate, pid, jd_pid,
`identity`, account_type, account, have_card, remark, register_from, invite_time,
active_time, agent_state, created_at, updated_at, deleted_at, presenter_id, present_time,
agent_level_one, agent_level_two, agent_level_three, agent_level_four
</sql>
<update id="updateBatch" parameterType="java.util.List">
<!--@mbg.generated-->
......@@ -75,6 +78,11 @@
when agent_id = #{item.agentId} then #{item.parentAgentId}
</foreach>
</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,">
<foreach collection="list" index="index" item="item">
when agent_id = #{item.agentId} then #{item.parentAgentList}
......@@ -165,6 +173,16 @@
when agent_id = #{item.agentId} then #{item.deletedAt}
</foreach>
</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,">
<foreach collection="list" index="index" item="item">
when agent_id = #{item.agentId} then #{item.agentLevelOne}
......@@ -195,17 +213,18 @@
<!--@mbg.generated-->
insert into user_agent
(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`,
account_type, account, have_card, remark, register_from, invite_time, active_time,
agent_state, created_at, updated_at, deleted_at, agent_level_one, agent_level_two,
agent_level_three, agent_level_four)
company, parent_agent_list, card_num, card_activate_num, commission_rate, pid,
jd_pid, `identity`, account_type, account, have_card, remark, register_from, invite_time,
active_time, agent_state, created_at, updated_at, deleted_at, presenter_id, present_time,
agent_level_one, agent_level_two, agent_level_three, agent_level_four)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.agentName}, #{item.agentPhone}, #{item.agentLevel}, #{item.nodeAgentLevelName},
#{item.parentAgentId}, #{item.parentAgentList}, #{item.cardNum}, #{item.cardActivateNum},
#{item.commissionRate}, #{item.pid}, #{item.jdPid}, #{item.identity}, #{item.accountType},
#{item.account}, #{item.haveCard}, #{item.remark}, #{item.registerFrom}, #{item.inviteTime},
#{item.activeTime}, #{item.agentState}, #{item.createdAt}, #{item.updatedAt}, #{item.deletedAt},
#{item.parentAgentId}, #{item.company}, #{item.parentAgentList}, #{item.cardNum},
#{item.cardActivateNum}, #{item.commissionRate}, #{item.pid}, #{item.jdPid}, #{item.identity},
#{item.accountType}, #{item.account}, #{item.haveCard}, #{item.remark}, #{item.registerFrom},
#{item.inviteTime}, #{item.activeTime}, #{item.agentState}, #{item.createdAt},
#{item.updatedAt}, #{item.deletedAt}, #{item.presenterId}, #{item.presentTime},
#{item.agentLevelOne}, #{item.agentLevelTwo}, #{item.agentLevelThree}, #{item.agentLevelFour}
)
</foreach>
......@@ -223,6 +242,7 @@
agent_level,
node_agent_level_name,
parent_agent_id,
company,
parent_agent_list,
card_num,
card_activate_num,
......@@ -241,6 +261,8 @@
created_at,
updated_at,
deleted_at,
presenter_id,
present_time,
agent_level_one,
agent_level_two,
agent_level_three,
......@@ -257,6 +279,7 @@
#{agentLevel},
#{nodeAgentLevelName},
#{parentAgentId},
#{company},
#{parentAgentList},
#{cardNum},
#{cardActivateNum},
......@@ -275,6 +298,8 @@
#{createdAt},
#{updatedAt},
#{deletedAt},
#{presenterId},
#{presentTime},
#{agentLevelOne},
#{agentLevelTwo},
#{agentLevelThree},
......@@ -291,6 +316,7 @@
agent_level = #{agentLevel},
node_agent_level_name = #{nodeAgentLevelName},
parent_agent_id = #{parentAgentId},
company = #{company},
parent_agent_list = #{parentAgentList},
card_num = #{cardNum},
card_activate_num = #{cardActivateNum},
......@@ -309,6 +335,8 @@
created_at = #{createdAt},
updated_at = #{updatedAt},
deleted_at = #{deletedAt},
presenter_id = #{presenterId},
present_time = #{presentTime},
agent_level_one = #{agentLevelOne},
agent_level_two = #{agentLevelTwo},
agent_level_three = #{agentLevelThree},
......@@ -340,6 +368,9 @@
<if test="parentAgentId != null">
parent_agent_id,
</if>
<if test="company != null">
company,
</if>
<if test="parentAgentList != null">
parent_agent_list,
</if>
......@@ -394,6 +425,12 @@
<if test="deletedAt != null">
deleted_at,
</if>
<if test="presenterId != null">
presenter_id,
</if>
<if test="presentTime != null">
present_time,
</if>
<if test="agentLevelOne != null">
agent_level_one,
</if>
......@@ -430,6 +467,9 @@
<if test="parentAgentId != null">
#{parentAgentId},
</if>
<if test="company != null">
#{company},
</if>
<if test="parentAgentList != null">
#{parentAgentList},
</if>
......@@ -484,6 +524,12 @@
<if test="deletedAt != null">
#{deletedAt},
</if>
<if test="presenterId != null">
#{presenterId},
</if>
<if test="presentTime != null">
#{presentTime},
</if>
<if test="agentLevelOne != null">
#{agentLevelOne},
</if>
......@@ -520,6 +566,9 @@
<if test="parentAgentId != null">
parent_agent_id = #{parentAgentId},
</if>
<if test="company != null">
company = #{company},
</if>
<if test="parentAgentList != null">
parent_agent_list = #{parentAgentList},
</if>
......@@ -574,6 +623,12 @@
<if test="deletedAt != null">
deleted_at = #{deletedAt},
</if>
<if test="presenterId != null">
presenter_id = #{presenterId},
</if>
<if test="presentTime != null">
present_time = #{presentTime},
</if>
<if test="agentLevelOne != null">
agent_level_one = #{agentLevelOne},
</if>
......@@ -588,14 +643,7 @@
</if>
</trim>
</insert>
<update id="updatePingtuiRelation">
UPDATE user_agent
SET presenter_id=(SELECT agent_id FROM user_agent WHERE agent_phone=#{to})
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>
<select id="getUserAgentByPhone" resultMap="BaseResultMap">
SELECT * FROM user_agent b WHERE agent_phone=#{phone}
</select>
</mapper>
\ No newline at end of file
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