Commit 1a141efa by guanchen

更新汇总拓展用户

parent b5d62299
......@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
......@@ -19,7 +20,6 @@ import org.springframework.data.redis.connection.lettuce.LettucePoolingClientCon
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.ObjectUtils;
/**
* @author houseme
......@@ -47,6 +47,7 @@ public class RedisConfiguration {
}
@Bean
@Scope("prototype")
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
......@@ -68,6 +69,7 @@ public class RedisConfiguration {
}
@Bean
@Scope("prototype")
public RedisTemplate redisTemplatePush(@Value("${spring.redis.database2}") int pushDb,
@Value("${spring.redis.host}") String host,
@Value("${spring.redis.port}") int port,
......
......@@ -35,7 +35,6 @@ public class Constants {
public static final int AGENT_LEVEL_2 = 2;
public static final int AGENT_LEVEL_3 = 3;
public static final int AGENT_LEVEL_4 = 4;
public static final String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
public static final String DISTRIBUTE_REDIS_LOCK_KEY = "huhu:partner:distribute:redis:key";
public static final String PARENT_COLUMN_NAME_CENGJI = "parent_agent_id";
public static final String PARENT_COLUMN_NAME_PINGTUI = "presenter_id";
......
package com.lanren.huhu.partner.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lanren.huhu.partner.domain.PartnerInviteRelation;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import java.util.List;
@Mapper
public interface PartnerInviteRelationMapper extends BaseMapper<PartnerInviteRelation> {
......@@ -18,6 +19,14 @@ public interface PartnerInviteRelationMapper extends BaseMapper<PartnerInviteRel
int insertOrUpdateSelective(PartnerInviteRelation record);
@SelectProvider(type = PartnerInviteRelationSqlProvider.class, method = "getPartnerInviteRelationListByRegDay")
List<PartnerInviteRelation> getPartnerInviteRelationListByRegDay(String datStr);
/**
* <p>
* 查询 : 根据state状态查询用户列表,分页显示
* 注意!!: 如果入参是有多个,需要加注解指定参数名才能在xml中取值
* </p>
*
* @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象)
* @return 分页对象
*/
IPage<PartnerInviteRelation> selectPageByTs(Page<PartnerInviteRelation> page, @Param("beginTs") Long beginTs, @Param("endTs") Long endTs);
}
\ No newline at end of file
package com.lanren.huhu.partner.dao;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* @author chen
* @title: PartnerInviteRelationSqlProvider
* @projectName partner
* @description: TODO
* @package com.lanren.huhu.partner.dao
* @date 2019-07-08 17:57
*/
public class PartnerInviteRelationSqlProvider {
public String getPartnerInviteRelationListByRegDay(@Param("datStr") String datStr) {
return "SELECT * " +
"FROM partner_invite_relation " +
"WHERE regiter_time " +
"BETWEEN UNIX_TIMESTAMP('" + datStr + " 00:00:00') " +
"AND UNIX_TIMESTAMP('" + datStr + " 23:59:59');";
}
}
......@@ -39,7 +39,7 @@ public interface UserAgentMapper extends BaseMapper<UserAgent> {
// @Select("SELECT b.* " +
// "FROM user_agent a " +
// "JOIN user_agent b on a.#{parentColumnName}=b.agent_id " +
// "WHERE a.user_id=#{userId}")
// "WHERE b.user_id=#{userId}")
// List<UserAgent> getChildListByUserId(Integer userId, String parentColumnName);
@SelectProvider(type = UserAgentSqlProvider.class, method = "getChildListByUserId")
......
......@@ -71,6 +71,7 @@ public class AgentManager {
agentRewardMessage.setOrderSn("507596802910534728");
agentRewardMessage.setSubOrderSn("507596802910534728");
agentRewardMessage.setOrderCommission(new BigDecimal("35.400000"));
agentRewardMessage.setSourceOrder("8888");
logger.info("写入队列");
ops.leftPush(AGENT_REWARD_QUEUE_KEY, JSON.toJSONString(agentRewardMessage));
return new Result<>();
......
......@@ -31,6 +31,7 @@ public class AgentRewardMessage extends BaseModel {
String orderTitle;
String rewardTypeChild;
String orderRateArray;
String sourceOrder;
// public AgentRewardMessage(int rewardType, String rechargeTime, int sourceUserId, String referenceId, int agentId, BigDecimal agentReward, int settleState, String orderType, String orderSn, String subOrderSn, BigDecimal orderCommission) {
// this.rewardType = rewardType;
// this.rechargeTime = rechargeTime;
......
package com.lanren.huhu.partner.schedule;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.lanren.huhu.partner.constants.Constants;
import com.lanren.huhu.partner.domain.AgentExpandDaily;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lanren.huhu.partner.domain.AgentExpandDetail;
import com.lanren.huhu.partner.domain.PartnerInviteRelation;
import com.lanren.huhu.partner.domain.UserAgent;
import com.lanren.huhu.partner.model.User;
import com.lanren.huhu.partner.model.ParentAgent;
import com.lanren.huhu.partner.service.AgentExpandDailyService;
import com.lanren.huhu.partner.service.AgentExpandDetailService;
import com.lanren.huhu.partner.service.PartnerInviteRelationService;
import com.lanren.huhu.partner.service.UserService;
import com.lanren.huhu.partner.util.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,9 +17,6 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
......@@ -37,6 +33,8 @@ import static com.lanren.huhu.partner.constants.Constants.PARENT_COLUMN_NAME_CEN
@Component
public class AgentDailyExpandTask {
private static Logger logger = LoggerFactory.getLogger(AgentDailyExpandTask.class);
private static final int PAGE_SIZE = 1000;
private static final long DELAY = 2 * 60 * 60 * 1000L;
@Autowired
PartnerInviteRelationService partnerInviteRelationService;
......@@ -46,41 +44,56 @@ public class AgentDailyExpandTask {
AgentExpandDetailService agentExpandDetailService;
@Autowired
AgentExpandDailyService agentExpandDailyService;
@Autowired
MybatisPlusProperties mybatisPlusProperties;
// @Scheduled(cron="0 5 */2 * * *")
@Scheduled(fixedDelay = 10000L)
@Scheduled(fixedDelay = DELAY)
public void runScheduledTask() {
logger.info("MapperLocations is: {}", mybatisPlusProperties.getMapperLocations());
// logger.info("run AgentDailyExpandTask");
// runSummary();
try {
Date dat = new Date(System.currentTimeMillis() - DELAY);
String datStr = DateUtils.format(dat, DateUtils.FORMAT_SHORT);
logger.info("run AgentDailyExpandTask {}", datStr);
runSummary(datStr);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
@Async
public void runSummary() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
int now = (int)(System.currentTimeMillis() / 1000L);
Date dat = new Date(System.currentTimeMillis() - 10 * 60 * 1000L);
String datStr = df.format(dat);
datStr = "2019-07-06";
List<PartnerInviteRelation> partnerInviteRelationList = partnerInviteRelationService.getPartnerInviteRelationListByRegDay(datStr);
for (PartnerInviteRelation partnerInviteRelation : partnerInviteRelationList) {
List<UserAgent> userAgentList = userService.getUserAgentChildListByUserId(partnerInviteRelation.getUserId(), PARENT_COLUMN_NAME_CENGJI);
for (UserAgent userAgent : userAgentList) {
AgentExpandDetail detail = new AgentExpandDetail();
detail.setDat(dat);
detail.setAgentId(userAgent.getAgentId());
detail.setUserId(userAgent.getUserId());
detail.setExpandUserId(partnerInviteRelation.getUserId());
detail.setExpandUserRegTime(new Date(partnerInviteRelation.getRegiterTime() * 1000L));
detail.setCreatedAt(now);
detail.setUpdatedAt(now);
agentExpandDetailService.insertOrUpdate(detail);
public void runSummary(String datStr) {
try {
Date dat = DateUtils.parse(datStr, DateUtils.FORMAT_SHORT);
int now = (int)(System.currentTimeMillis() / 1000L);
int pageNo = 1;
long beginTs = DateUtils.parse(datStr, DateUtils.FORMAT_SHORT).getTime() / 1000L;
long endTs = beginTs + 24 * 60 * 60L - 1L;
while (true) {
Page<PartnerInviteRelation> page = new Page<PartnerInviteRelation>(pageNo, PAGE_SIZE);
IPage<PartnerInviteRelation> ipage = partnerInviteRelationService.selectPageByTs(page, beginTs, endTs);
List<PartnerInviteRelation> partnerInviteRelationList = ipage.getRecords();
if (partnerInviteRelationList != null && partnerInviteRelationList.size() > 0) {
for (PartnerInviteRelation partnerInviteRelation : partnerInviteRelationList) {
List<ParentAgent> parentAgentList = userService.getAgentListByUserId(partnerInviteRelation.getUserId(), PARENT_COLUMN_NAME_CENGJI);
for (ParentAgent parentAgent : parentAgentList) {
AgentExpandDetail detail = new AgentExpandDetail();
detail.setDat(dat);
detail.setAgentId(parentAgent.getAgentId());
detail.setUserId(parentAgent.getUserId());
detail.setExpandUserId(partnerInviteRelation.getUserId());
detail.setExpandUserRegTime(new Date(partnerInviteRelation.getRegiterTime() * 1000L));
detail.setCreatedAt(now);
detail.setUpdatedAt(now);
agentExpandDetailService.insertOrUpdate(detail);
}
}
if (partnerInviteRelationList.size() > 0) {
agentExpandDailyService.updateByDatByDetail(datStr);
}
pageNo++;
} else {
break;
}
}
}
if (partnerInviteRelationList.size() > 0) {
agentExpandDailyService.updateByDatByDetail(datStr);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}
......@@ -25,8 +25,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import sun.management.resources.agent;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -240,7 +239,11 @@ public class AgentRewardQueueTask {
agentReward.setAgentLevel(agent.getLevel());
agentReward.setUserId(agent.getUserId());
agentReward.setRewardRemark(AGENT_REWARD_REMARK.get(message.getRewardType()));
agentReward.setSourceOrder(message.getReferenceId());
if (StringUtils.isEmpty(message.getSourceOrder())) {
agentReward.setSourceOrder(message.getReferenceId());
} else {
agentReward.setSourceOrder(message.getSourceOrder());
}
agentReward.setSourceUserLevel(sourceUserLevel);
agentReward.setCreatedAt(System.currentTimeMillis() / 1000L);
agentReward.setCommissionRate(commissionRate);
......
......@@ -2,7 +2,6 @@ package com.lanren.huhu.partner.schedule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* @author chen
......@@ -12,7 +11,7 @@ import org.springframework.stereotype.Component;
* @package com.lanren.huhu.partner.schedule
* @date 2019-07-02 15:45
*/
@Component
//@Component
public class PartnerSettleTask {
private static Logger logger = LoggerFactory.getLogger(PartnerSettleTask.class);
......
package com.lanren.huhu.partner.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lanren.huhu.partner.domain.PartnerInviteRelation;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @title: ${NAME}
* @projectName partner
......@@ -22,10 +25,5 @@ public interface PartnerInviteRelationService extends IService<PartnerInviteRela
int insertOrUpdateSelective(PartnerInviteRelation record);
/**
* 根据日期查找新增用户
* @param datStr
* @return
*/
List<PartnerInviteRelation> getPartnerInviteRelationListByRegDay(String datStr);
IPage<PartnerInviteRelation> selectPageByTs(Page<PartnerInviteRelation> page, Long beginTs, Long endTs);
}
package com.lanren.huhu.partner.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.dao.PartnerInviteRelationMapper;
import com.lanren.huhu.partner.domain.PartnerInviteRelation;
import com.lanren.huhu.partner.service.PartnerInviteRelationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lanren.huhu.partner.domain.PartnerInviteRelation;
import java.util.List;
import com.lanren.huhu.partner.dao.PartnerInviteRelationMapper;
import com.lanren.huhu.partner.service.PartnerInviteRelationService;
/**
* @title: ${NAME}
* @projectName partner
......@@ -41,8 +41,11 @@ public class PartnerInviteRelationServiceImpl extends ServiceImpl<PartnerInviteR
}
@Override
public List<PartnerInviteRelation> getPartnerInviteRelationListByRegDay(String datStr) {
logger.info("datStr is: {}", datStr);
return baseMapper.getPartnerInviteRelationListByRegDay(datStr);
public IPage<PartnerInviteRelation> selectPageByTs(Page<PartnerInviteRelation> page, Long beginTs, Long endTs) {
// 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
// page.setOptimizeCountSql(false);
// 当 total 为非 0 时(默认为 0),分页插件不会进行 count 查询
// 要点!! 分页返回的对象与传入的对象是同一个
return baseMapper.selectPageByTs(page, beginTs, endTs);
}
}
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; } /** * ****************************************分割线****代理商*************************************************************** */ /** * 代理商数据 * @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); } /** * 按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.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; } /** * ****************************************分割线****代理商*************************************************************** */ /** * 代理商数据 * @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); } /** * 按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>(); /** * 无限找 * 先无限找上级合伙人, 直到找到第一个是代理商的合伙人 */ 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 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
......
......@@ -102,7 +102,7 @@ mybatis-plus:
logging:
level:
#打印SQL信息
com.lanren.huhu.partner.dao: debug
com.lanren.huhu.partner.dao: info
......
......@@ -2,9 +2,9 @@
<configuration>
<property name="pattern" value="[%level] %d{yy-MM-dd HH:mm:ss.SSS} [%thread] %logger{50}:%line - %msg%n"/>
<property name="log_file" value="@logfile_path@/@profiles.active@/@artifactId@-@profiles.active@"/>
<property name="MaxHistory" value="15"/><!--日志保留天数-->
<property name="MaxFileSize" value="1024MB"/><!--单个文件大小-->
<property name="totalSizeCap" value="1024MB"/><!--单个文件大小-->
<property name="MaxHistory" value="7"/><!--日志保留天数-->
<property name="MaxFileSize" value="256MB"/><!--单个文件大小-->
<property name="totalSizeCap" value="256MB"/><!--单个文件大小-->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
......
......@@ -37,11 +37,11 @@
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, user_id, direct_num, indirect_num, partner_level, invite_type, regiter_time,
agent_id, parent_agent_list, active_order_id, invite_user_id, invite_partner_level,
amount, reward_type, coupon_id, indirect_invite_uid, indirect_partner_level, indirect_amount,
indirect_reward_type, indirect_coupon_id, `state`, active_time, settle_time, created_at,
updated_at, last_active_order_id, agent_level_one, agent_level_two, agent_level_three,
id, user_id, direct_num, indirect_num, partner_level, invite_type, regiter_time,
agent_id, parent_agent_list, active_order_id, invite_user_id, invite_partner_level,
amount, reward_type, coupon_id, indirect_invite_uid, indirect_partner_level, indirect_amount,
indirect_reward_type, indirect_coupon_id, `state`, active_time, settle_time, created_at,
updated_at, last_active_order_id, agent_level_one, agent_level_two, agent_level_three,
agent_level_four, agent_level_five
</sql>
<update id="updateBatch" parameterType="java.util.List">
......@@ -207,22 +207,22 @@
<insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into partner_invite_relation
(user_id, direct_num, indirect_num, partner_level, invite_type, regiter_time, agent_id,
parent_agent_list, active_order_id, invite_user_id, invite_partner_level, amount,
reward_type, coupon_id, indirect_invite_uid, indirect_partner_level, indirect_amount,
indirect_reward_type, indirect_coupon_id, `state`, active_time, settle_time, created_at,
updated_at, last_active_order_id, agent_level_one, agent_level_two, agent_level_three,
agent_level_four, agent_level_five)
(user_id, direct_num, indirect_num, partner_level, invite_type, regiter_time, agent_id,
parent_agent_list, active_order_id, invite_user_id, invite_partner_level, amount,
reward_type, coupon_id, indirect_invite_uid, indirect_partner_level, indirect_amount,
indirect_reward_type, indirect_coupon_id, `state`, active_time, settle_time, created_at,
updated_at, last_active_order_id, agent_level_one, agent_level_two, agent_level_three,
agent_level_four, agent_level_five)
values
<foreach collection="list" item="item" separator=",">
(#{item.userId}, #{item.directNum}, #{item.indirectNum}, #{item.partnerLevel}, #{item.inviteType},
#{item.regiterTime}, #{item.agentId}, #{item.parentAgentList}, #{item.activeOrderId},
#{item.inviteUserId}, #{item.invitePartnerLevel}, #{item.amount}, #{item.rewardType},
#{item.couponId}, #{item.indirectInviteUid}, #{item.indirectPartnerLevel}, #{item.indirectAmount},
#{item.indirectRewardType}, #{item.indirectCouponId}, #{item.state}, #{item.activeTime},
#{item.settleTime}, #{item.createdAt}, #{item.updatedAt}, #{item.lastActiveOrderId},
#{item.agentLevelOne}, #{item.agentLevelTwo}, #{item.agentLevelThree}, #{item.agentLevelFour},
#{item.agentLevelFive})
(#{item.userId}, #{item.directNum}, #{item.indirectNum}, #{item.partnerLevel}, #{item.inviteType},
#{item.regiterTime}, #{item.agentId}, #{item.parentAgentList}, #{item.activeOrderId},
#{item.inviteUserId}, #{item.invitePartnerLevel}, #{item.amount}, #{item.rewardType},
#{item.couponId}, #{item.indirectInviteUid}, #{item.indirectPartnerLevel}, #{item.indirectAmount},
#{item.indirectRewardType}, #{item.indirectCouponId}, #{item.state}, #{item.activeTime},
#{item.settleTime}, #{item.createdAt}, #{item.updatedAt}, #{item.lastActiveOrderId},
#{item.agentLevelOne}, #{item.agentLevelTwo}, #{item.agentLevelThree}, #{item.agentLevelFour},
#{item.agentLevelFive})
</foreach>
</insert>
<insert id="insertOrUpdate" keyColumn="id" keyProperty="id" parameterType="com.lanren.huhu.partner.domain.PartnerInviteRelation" useGeneratedKeys="true">
......@@ -299,7 +299,7 @@
#{agentLevelFour},
#{agentLevelFive},
</trim>
on duplicate key update
on duplicate key update
<trim suffixOverrides=",">
<if test="id != null">
id = #{id},
......@@ -530,7 +530,7 @@
#{agentLevelFive},
</if>
</trim>
on duplicate key update
on duplicate key update
<trim suffixOverrides=",">
<if test="id != null">
id = #{id},
......@@ -627,4 +627,7 @@
</if>
</trim>
</insert>
<select id="selectPageByTs" resultType="com.lanren.huhu.partner.domain.PartnerInviteRelation">
SELECT * FROM partner_invite_relation WHERE regiter_time BETWEEN #{beginTs} AND #{endTs}
</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