Commit e04a0340 by 田超

Merge branch 'feature/1004243' into 'master'

feat: [1004243] 本书服务阅读人数

See merge request rays/pcloud-book!1184
parents efbf6613 aa62c7ab
......@@ -5,6 +5,7 @@ import com.google.common.collect.Maps;
import com.pcloud.common.constant.CacheConstant;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
......@@ -405,4 +406,33 @@ public class BookConstant {
public static final String JOB_NAME_BANNER_PUT_OFF = "BannerAutoPutOff";
public static final Map<Integer, List<Integer>> READER_COUNT_MAP = new HashMap<Integer, List<Integer>>(){
{
put(1, Lists.newArrayList(20, 137));
put(2, Lists.newArrayList(20, 137));
put(3, Lists.newArrayList(20, 137));
put(4, Lists.newArrayList(20, 137));
put(5, Lists.newArrayList(20, 137));
put(6, Lists.newArrayList(335, 970));
put(7, Lists.newArrayList(480, 2280));
put(8, Lists.newArrayList(664, 5091));
put(9, Lists.newArrayList(1095, 10859));
put(10, Lists.newArrayList(992, 15224));
put(11, Lists.newArrayList(772, 11455));
put(12, Lists.newArrayList(1162, 12907));
put(13, Lists.newArrayList(687, 11108));
put(14, Lists.newArrayList(795, 10891));
put(15, Lists.newArrayList(1100, 12153));
put(16, Lists.newArrayList(890, 11433));
put(17, Lists.newArrayList(1336, 9118));
put(18, Lists.newArrayList(2448, 11952));
put(19, Lists.newArrayList(3106, 14088));
put(20, Lists.newArrayList(3179, 14980));
put(21, Lists.newArrayList(2249, 12156));
put(22, Lists.newArrayList(1050, 7955));
put(23, Lists.newArrayList(628, 3280));
put(0, Lists.newArrayList(890, 2250));
}
};
}
......@@ -2,6 +2,7 @@ package com.pcloud.book.applet.biz;
import com.pcloud.book.applet.dto.AppletAppOrProductDTO;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.applet.dto.ReadBookRecordDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.common.page.PageBeanNew;
......@@ -93,4 +94,10 @@ public interface AppletRecordBiz {
* 手动处理应用作品和资讯的typeCode
*/
void HandleTypeCode();
/**
* 新增用户阅读记录
* @param readBookRecordDTO
*/
void addReadBookRecord(ReadBookRecordDTO readBookRecordDTO);
}
......@@ -6,6 +6,7 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.applet.biz.AppletBooklistBiz;
......@@ -22,11 +23,13 @@ import com.pcloud.book.applet.dto.AppletOuterBooklistDTO;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.applet.dto.AppletUserBookcaseDTO;
import com.pcloud.book.applet.dto.BookDTO4Booklist;
import com.pcloud.book.applet.dto.ReadBookRecordDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.book.applet.entity.AppletRecordDayServe;
import com.pcloud.book.applet.entity.AppletRecordServe;
import com.pcloud.book.applet.enums.AppletRecordTypeEnum;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
......@@ -37,9 +40,11 @@ import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.skill.biz.PcloudGroupActivityBiz;
import com.pcloud.book.applet.dto.GroupActivity4AppletDTO;
import com.pcloud.book.skill.remind.RedisTool;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.mybatis.cache.redis.RedisCache;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
......@@ -47,6 +52,7 @@ import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.cache.redis.RedisSessionUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.readercenter.common.enums.YesOrNoNumEnum;
import com.pcloud.resourcecenter.product.dto.ProductDto;
......@@ -68,6 +74,8 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
import static com.pcloud.book.book.constant.BookConstant.READER_COUNT_MAP;
/**
* (AppletRecord)表服务实现类
*
......@@ -338,6 +346,33 @@ public class AppletRecordBizImpl implements AppletRecordBiz {
}
}
@Override
@ParamLog("新增用户阅读本书服务记录")
public void addReadBookRecord(ReadBookRecordDTO readBookRecordDTO) {
ThreadPoolUtils.BOOK_READ_RECORD.execute(() -> {
Long bookId = readBookRecordDTO.getBookId();
Long channelId = readBookRecordDTO.getChannelId();
Long adviserId = readBookRecordDTO.getAdviserId();
String redisKey4Random = "BOOK:READER_COUNT:" + bookId + ":" + channelId + ":" + adviserId;
String redisKey4Set = "BOOK:READER_SET:" + bookId + ":" + channelId + ":" + adviserId;
Integer readerCount = null;
if (JedisClusterUtils.exists(redisKey4Random)) {
JedisClusterUtils.expire(redisKey4Random, BookConstant.BOOK_CACHE_SECOUND);
} else {
List<Integer> readerCountList = READER_COUNT_MAP.get(DateUtil.hour(new Date(), Boolean.TRUE));
readerCount = RandomUtil.randomInt(readerCountList.get(0), readerCountList.get(1));
JedisClusterUtils.set(redisKey4Random, readerCount.toString(), BookConstant.BOOK_CACHE_SECOUND);
}
if ( Objects.equals(YesOrNoNumEnum.YES.getValue(), readBookRecordDTO.getRecordType())) {
JedisClusterUtils.sadd(redisKey4Set, readBookRecordDTO.getWechatUserId().toString());
JedisClusterUtils.expire(redisKey4Set, BookConstant.BOOK_CACHE_SECOUND);
} else if (Objects.equals(YesOrNoNumEnum.NO.getValue(), readBookRecordDTO.getRecordType())) {
JedisClusterUtils.srem(redisKey4Set, readBookRecordDTO.getWechatUserId().toString());
JedisClusterUtils.expire(redisKey4Set, BookConstant.BOOK_CACHE_SECOUND);
}
});
}
private void HandleTypeCode4ListDay(List<AppletRecordDTO> recordList) {
fillTypeCode(recordList);
appletRecordDayServeDao.batchUpdate(recordList);
......
package com.pcloud.book.applet.dto;
import lombok.Data;
@Data
public class ReadBookRecordDTO {
/**
* 书刊id
*/
private Long bookId;
/**
* 渠道id
*/
private Long channelId;
/**
* 编辑id
*/
private Long adviserId;
/**
* 记录类型 1进入 0 离开
*/
private Integer recordType;
/**
* 用户id
*/
private Long wechatUserId;
}
......@@ -2,6 +2,7 @@ package com.pcloud.book.applet.facade;
import com.pcloud.book.applet.biz.AppletRecordBiz;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.applet.dto.ReadBookRecordDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.book.applet.vo.AppletRecordQueryVO;
import com.pcloud.book.base.exception.BookBizException;
......@@ -117,5 +118,15 @@ public class AppletRecordFacade {
return new ResponseDto<>();
}
@ApiOperation("本书服务页阅读记录")
@RequestMapping(value = "addReadBookRecord", method = RequestMethod.POST)
public ResponseDto<?> addReadBookRecord(@CookieValue("userInfo") String userInfo,
@RequestBody ReadBookRecordDTO readBookRecordDTO){
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
readBookRecordDTO.setWechatUserId(wechatUserId);
appletRecordBiz.addReadBookRecord(readBookRecordDTO);
return new ResponseDto<>();
}
}
\ No newline at end of file
package com.pcloud.book.group.biz.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
......@@ -223,6 +224,7 @@ import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.BeanUtils;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.UUIDUitl;
......@@ -316,6 +318,8 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import lombok.SneakyThrows;
import static com.pcloud.book.book.constant.BookConstant.READER_COUNT_MAP;
/**
* Description 社群书群二维码业务逻辑层接口实现类 Created by PENG on 2019/4/17.
*/
......@@ -5531,6 +5535,24 @@ public class BookGroupBizImpl implements BookGroupBiz {
/* List<BookServeDTO> serveDTOList = this.getBookAndBookGroupServeIds(adviserId, bookId, channelId);
this.removeCanNotBuy(serveDTOList);
map.put("resourceCount", ListUtils.isEmpty(serveDTOList) ? 0 : serveDTOList.size());*/
//获取本书阅读人数
String redisKey4Random = "BOOK:READER_COUNT:" + bookId + ":" + channelId + ":" + adviserId;
String redisKey4Set = "BOOK:READER_SET:" + bookId + ":" + channelId + ":" + adviserId;
String readerCountStr = JedisClusterUtils.get(redisKey4Random);
Integer readerCount4Random = null;
Integer readerCount4Set = null;
if (null != readerCountStr && NumberUtil.isNumber(readerCountStr)) {
readerCount4Random = Integer.valueOf(readerCountStr);
} else {
List<Integer> readerCountList = READER_COUNT_MAP.get(DateUtil.hour(new Date(), Boolean.TRUE));
readerCount4Random = RandomUtil.randomInt(readerCountList.get(0), readerCountList.get(1));
}
if (JedisClusterUtils.exists(redisKey4Set)) {
readerCount4Set = JedisClusterUtils.scard(redisKey4Set).intValue();
} else {
readerCount4Set = 0;
}
map.put("readerCount", readerCount4Random + readerCount4Set);
return map;
}
......
......@@ -68,4 +68,8 @@ public class ThreadPoolUtils {
public static final ExecutorService APPLET_RECORD = new ThreadPoolExecutor(8,8,0L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setNameFormat("applet_record-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy());
public static final ExecutorService BOOK_READ_RECORD = new ThreadPoolExecutor(8,8,0L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setNameFormat("book_read_record-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy());
}
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