Authored by mlge

种草--增粉修改

... ... @@ -17,6 +17,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.yoho.tools.common.utils.RandomUtil.getRandom;
... ... @@ -41,7 +42,7 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
@Autowired
private ConfigReader configReader;
public static final long INTERVAL = 3 * 24 * 60 * 60 * 1000l;//72小时
public static final long INTERVAL = 60 * 60 * 1000l;//1小时
// public static final long INTERVAL = 1 * 60 * 60 * 1000l;//1小时
... ... @@ -55,7 +56,10 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
public void addVirtualPraise() {
logger.info("enter addVirtualPraise ");
long currentTime = System.currentTimeMillis();
long startTime = currentTime - INTERVAL;
//时间间隔
int timeConfig = configReader.getInt("platform.grass.virtual.time.interval", 1);
logger.info("addVirtualPraise virtual.time.interval is {}", timeConfig);
long startTime = currentTime - timeConfig * INTERVAL;
List<GrassArticle> articleList = grassArticleDao.selectByRecommendTime(startTime,currentTime);
if(CollectionUtils.isEmpty(articleList)){
logger.info("addVirtualPraise articleList is empty");
... ... @@ -134,7 +138,10 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
public void addVirtualFans() {
logger.info("enter addVirtualFans ");
Long currentTime = System.currentTimeMillis();
Long startTime = currentTime - INTERVAL;
//时间间隔
int timeConfig = configReader.getInt("platform.grass.virtual.time.interval", 1);
logger.info("addVirtualPraise virtual.time.interval is {}", timeConfig);
long startTime = currentTime - timeConfig * INTERVAL;
List<GrassArticle> articleList = grassArticleDao.selectByRecommendTime(startTime,currentTime);
if(CollectionUtils.isEmpty(articleList)){
... ... @@ -176,7 +183,7 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
Map<Integer,List<Integer>> commonUserFansMap = new HashMap<>();
Map<Integer,List<Integer>> guangUserFansMap = new HashMap<>();
//(普通作者的粉丝 && 逛小编的粉丝)
//(普通作者的粉丝 && 逛小编的粉丝)--已有的粉丝
//粉丝本身一定是有货用户,不需要区分类型
for(GrassUserAttention temp : fansList){
int authorUid = temp.getFollowUid();//作者
... ... @@ -200,7 +207,7 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
}
List<GrassUserAttention> userAttentions = new ArrayList<>();
List<GrassUserAchieve> userAchieveList = new ArrayList<>();
List<GrassUserAchieve> userAchieveFansList = new ArrayList<>();
//普通作者--增粉数据
for(Integer authorUid : commonUid){
List<Integer> oldFansList = commonUserFansMap.get(authorUid);
... ... @@ -212,7 +219,7 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
}
Set<Integer> randomUidList = getRandomFans(tempList, min, max);
//随机增粉
addFans(randomUidList,authorUid,GrassUserTypeEnum.COMMON.getValue(),userAttentions, userAchieveList,currentTime);
addFans(randomUidList,authorUid,GrassUserTypeEnum.COMMON.getValue(),userAttentions, userAchieveFansList,currentTime);
}
//逛作者--增粉数据
... ... @@ -226,7 +233,7 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
}
Set<Integer> randomUidList = getRandomFans(tempList, min, max);
//随机增粉
addFans(randomUidList,authorUid,GrassUserTypeEnum.GUANG.getValue(),userAttentions, userAchieveList,currentTime);
addFans(randomUidList,authorUid,GrassUserTypeEnum.GUANG.getValue(),userAttentions, userAchieveFansList,currentTime);
}
//更新数据库
... ... @@ -236,14 +243,35 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
return ;
}
//马甲的关注数
Map<Integer, Long> attMap = userAttentions.stream()
.collect(Collectors.groupingBy(GrassUserAttention::getUid,Collectors.counting()));
List<GrassUserAchieve> userAchieveAttList = new ArrayList<>();
for(Integer uid : attMap.keySet()){
GrassUserAchieve user = new GrassUserAchieve();
Integer attNum = Math.toIntExact(attMap.get(uid));
user.setUserType(GrassUserTypeEnum.COMMON.getValue());
user.setUid(uid);
user.setAttCount(attNum);
user.setCreateTime((int) (currentTime / 1000l));
user.setUpdateTime((int) (currentTime / 1000l));
userAchieveAttList.add(user);
}
logger.info("addVirtualFans update grassUserAttention,userAttentions={}", userAttentions);
logger.info("addVirtualFans update userAchieve userAchieveList={}",userAchieveList);
//更新关注明细表
logger.info("addVirtualFans update userAchieve userAchieveFansList={}",userAchieveFansList);
logger.info("addVirtualFans update userAchieve userAchieveAttList={}",userAchieveAttList);
//1)更新关注明细表
grassUserAttentionDao.batchInsert(userAttentions);
logger.info("addVirtualFans update grassUserAttention success!");
//批量更新作者表
userAchieveDAO.batchUpdateFans(userAchieveList);
logger.info("addVirtualFans success!");
//2)批量更新作者表,增加作者对应的粉丝数
userAchieveDAO.batchUpdateFans(userAchieveFansList);
logger.info("addVirtualFans batchUpdateFans success!");
//3)批量更新作者表,增加粉丝对应的关注数
userAchieveDAO.batchInsertOrUpAttentions(userAchieveAttList);
logger.info("addVirtualFans success!");
}
... ... @@ -268,6 +296,7 @@ public class GrassUserVirtualImpl implements IGrassVirtualService{
userAttentions.add(attention);
}
//作者的粉丝需要增加
//粉丝总数表(一条数据)
GrassUserAchieve userAchieve = new GrassUserAchieve();
userAchieve.setUid(authorUid);//作者
... ...
... ... @@ -22,5 +22,7 @@ platform.grass.virtualpraise.threshold = 1,5
platform.grass.virtualfans.threshold = 1,5
platform.grass.virtual.time.interval = 1
... ...