Commit 31b50d61 by 吴博

Revert "feat: [1003881] 小睿读书报告"

This reverts commit 755888a2
parent dac60dbb
......@@ -67,12 +67,4 @@ public interface AppletService {
ResponseEntity<ResponseDto<Integer>> getPopupCount(@RequestParam("wechatUserId") Long wechatUserId,
@RequestParam("bookId") Long bookId,
@RequestParam("popupType") Integer popupType);
@ApiOperation("删除指定周的统计数据")
@GetMapping("deleteWeekAppletRecordStatis")
void deleteWeekAppletRecordStatis(@RequestParam("mondayDate")String mondayDate);
@ApiOperation("统计指定周的数据")
@GetMapping("addWeekAppletRecordStatis")
void addWeekAppletRecordStatis(@RequestParam("mondayDate")String mondayDate);
}
package com.pcloud.book.applet.biz;
import com.pcloud.book.applet.dto.AppletRecordStatisDTO;
import com.pcloud.book.applet.dto.ReadBookWeekStatisDTO;
import com.pcloud.book.applet.entity.AppletRecordStatis;
import com.pcloud.common.page.PageBeanNew;
import java.util.Date;
import java.util.List;
/**
* 小睿小程序点击量统计(AppletRecordStatis)表服务接口
*
* @author makejava
* @since 2020-12-10 17:58:06
*/
public interface AppletRecordStatisBiz {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AppletRecordStatis getById(Long id);
/**
* 分页查询
*/
PageBeanNew getList(Integer currentPage, Integer numPerPage);
/**
* 新增数据
*
* @param appletRecordStatis 实例对象
* @return 主键
*/
Long insert(AppletRecordStatis appletRecordStatis);
/**
* 修改数据
*
* @param appletRecordStatis 实例对象
*/
void update(AppletRecordStatis appletRecordStatis);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
void deleteById(Long id);
ReadBookWeekStatisDTO getReadBookWeekStatis(Long wechatUserId, String mondayDate);
/**
* 本周读书相关信息(阅读本数等)
*/
ReadBookWeekStatisDTO getReadBookWeekStatisDTO(Long wechatUserId, Date monday, Date sunday);
List<AppletRecordStatisDTO> getBookSourceWeekStatis(Long wechatUserId, String mondayDate);
List<AppletRecordStatisDTO> getBookNewsWeekStatis(Long wechatUserId, String mondayDate);
/**
* 删除指定日期的统计数据
*/
void deleteWeekAppletRecordStatis(String mondayDate);
/**
* 添加应用作品周统计数据
*/
void addWeekAppletRecordStatis(String mondayDate);
}
package com.pcloud.book.applet.biz;
import com.pcloud.book.applet.dto.AppletRecordStatisReportDTO;
import com.pcloud.book.applet.entity.AppletRecordStatisReport;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
/**
* 个人阅读报告总结(AppletRecordStatisReport)表服务接口
*
* @author makejava
* @since 2020-12-11 16:22:46
*/
public interface AppletRecordStatisReportBiz {
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
AppletRecordStatisReport getById(Long id);
/**
* 分页查询
*/
PageBeanNew getList(Integer currentPage, Integer numPerPage);
/**
* 新增数据
*
* @param appletRecordStatisReport 实例对象
* @return 主键
*/
Long insert(AppletRecordStatisReport appletRecordStatisReport);
/**
* 修改数据
*
* @param appletRecordStatisReport 实例对象
*/
void update(AppletRecordStatisReport appletRecordStatisReport);
/**
* 通过主键删除数据
*
* @param id 主键
* @return 是否成功
*/
void deleteById(Long id);
AppletRecordStatisReport getReadReport4Week(Long wechatUserId, String mondayDate);
PageBeanNew getReadReportList(Long wechatUserId, Integer currentPage, Integer numPerPage);
String shareReadReport(Long wechatUserId, String mondayDate);
}
package com.pcloud.book.applet.biz.impl;
import com.google.common.collect.Lists;
import com.pcloud.appcenter.app.dto.AppTypeDto;
import com.pcloud.book.applet.contants.AppletConstants;
import com.pcloud.book.applet.dao.AppletRecordDao;
import com.pcloud.book.applet.dto.AppletRecordBookDTO;
import com.pcloud.book.applet.dto.AppletRecordStatisDTO;
import com.pcloud.book.applet.dto.ReadBookDayStatisDTO;
import com.pcloud.book.applet.dto.ReadBookWeekStatisDTO;
import com.pcloud.book.applet.entity.AppletRecordStatis;
import com.pcloud.book.applet.dao.AppletRecordStatisDao;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.DateUtils;
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.string.StringUtil;
import com.pcloud.resourcecenter.product.dto.ProductTypeDto;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* 小睿小程序点击量统计(AppletRecordStatis)表服务实现类
*
* @author makejava
* @since 2020-12-10 17:58:06
*/
@Service("appletRecordStatisBiz")
public class AppletRecordStatisBizImpl implements AppletRecordStatisBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(AppletRecordStatisBizImpl.class);
@Autowired
private AppletRecordStatisDao appletRecordStatisDao;
@Autowired
private AppletRecordDao appletRecordDao;
@Autowired
private AppConsr appConsr;
@Autowired
private ProductConsr productConsr;
@Override
@ParamLog("通过ID查询单条数据")
public AppletRecordStatis getById(Long id) {
return appletRecordStatisDao.getById(id);
}
@Override
@ParamLog("查询多条数据")
public PageBeanNew getList(Integer currentPage, Integer numPerPage) {
PageBeanNew pageBeanNew = appletRecordStatisDao.listPageNew(new PageParam(currentPage, numPerPage), null, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
// 加载其它数据
return pageBeanNew;
}
@Override
@ParamLog("新增")
public Long insert(AppletRecordStatis appletRecordStatis) {
appletRecordStatisDao.insert(appletRecordStatis);
return appletRecordStatis.getId();
}
@Override
@ParamLog("修改")
public void update(AppletRecordStatis appletRecordStatis) {
if(appletRecordStatis == null || !NumberUtil.isNumber(appletRecordStatis.getId())){
throw BizException.PARAM_IS_NULL;
}
appletRecordStatisDao.update(appletRecordStatis);
}
@Override
@ParamLog("删除")
public void deleteById(Long id) {
appletRecordStatisDao.deleteById(id);
}
@Override
public ReadBookWeekStatisDTO getReadBookWeekStatis(Long wechatUserId, String mondayDate) {
if(mondayDate == null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(),"mondayDate不能为空");
}
Date monday = DateUtils.getDateFromString(mondayDate, "yyyy-MM-dd");
// 校准周一
monday = DateUtils.addDay(DateUtils.getWeekStart(monday), 1);
Date sunday = DateUtils.addDay(monday, 6);
// 计算本周读书本数,已读新书本数
ReadBookWeekStatisDTO weekStatisDTO = getReadBookWeekStatisDTO(wechatUserId, monday, sunday);
// 本周每天的读书详情数据图表
weekStatisDTO.setReadBookDayStatisList(getDayStatisList(wechatUserId, monday, sunday));
return weekStatisDTO;
}
// 计算本周读书本数,已读新书本数
@Override
public ReadBookWeekStatisDTO getReadBookWeekStatisDTO(Long wechatUserId, Date monday, Date sunday) {
ReadBookWeekStatisDTO weekStatisDTO = new ReadBookWeekStatisDTO();
List<AppletRecordBookDTO> allUserBookRecordList = getAllUserBookRecordList(wechatUserId);
if(CollectionUtils.isEmpty(allUserBookRecordList)){
weekStatisDTO.setReadBookCount(0);
weekStatisDTO.setReadNewBookCount(0);
}
// 本周之前的读书数据
List<AppletRecordBookDTO> beforeUserBookRecordList = allUserBookRecordList.stream().filter(x -> monday.compareTo(x.getCreateDate()) == 1).collect(Collectors.toList());
// 本周的读书数据
List<AppletRecordBookDTO> weekUserBookRecordList = allUserBookRecordList.stream().filter(x -> monday.compareTo(x.getCreateDate()) <= 0 && sunday.compareTo(x.getCreateDate()) >= 0).collect(Collectors.toList());
weekStatisDTO.setReadBookCount(weekUserBookRecordList.size());
// 用户本周之前所有的bookId
List<Long> beforeBookIds = beforeUserBookRecordList.stream().map(x -> x.getBookId()).collect(Collectors.toList());
// 用户本周的bookid
List<Long> weekBookIds = weekUserBookRecordList.stream().map(x -> x.getBookId()).collect(Collectors.toList());
weekBookIds.removeAll(beforeBookIds);
// 新书去重? weekBookIds.stream().distinct().collect(Collectors.toList()).size()
weekStatisDTO.setReadNewBookCount(weekBookIds.size());
weekStatisDTO.setBeginDate(monday);
weekStatisDTO.setEndDate(sunday);
return weekStatisDTO;
}
// 获取用户所有的读书记录
private List<AppletRecordBookDTO> getAllUserBookRecordList(Long wechatUserId) {
String userBooksRedisKey = AppletConstants.APPLET_RECORD_USER_BOOK_LIST + "_" + wechatUserId+"_" + DateUtils.getShortDateStr();
List<AppletRecordBookDTO> userBooks = JedisClusterUtils.getJsonList(userBooksRedisKey, AppletRecordBookDTO.class);
// 测试时临时取消缓存
// if(CollectionUtils.isEmpty(userBooks)){
userBooks = appletRecordDao.getBooksByWechatUserId(wechatUserId);
if(CollectionUtils.isEmpty(userBooks)){
return Lists.newArrayList();
}
JedisClusterUtils.setJsonList(userBooksRedisKey, userBooks, 3600 * 24);
// }
return userBooks;
}
// 本周每天的读书量统计
private List<ReadBookDayStatisDTO> getDayStatisList(Long wechatUserId, Date monday, Date sunday) {
List<ReadBookDayStatisDTO> resultList = appletRecordDao.getReadBookWeekStatis(wechatUserId, DateUtils.formatDate(monday, "yyyy-MM-dd"), DateUtils.formatDate(sunday, "yyyy-MM-dd"));
if(CollectionUtils.isEmpty(resultList)){
resultList = Lists.newArrayList();
}
ArrayList<Date> weekDate = Lists.newArrayList(
monday,
DateUtils.addDay(monday, 1),
DateUtils.addDay(monday, 2),
DateUtils.addDay(monday, 3),
DateUtils.addDay(monday, 4),
DateUtils.addDay(monday, 5),
sunday);
ArrayList<String> week = Lists.newArrayList("周一", "周二", "周三", "周四", "周五", "周六", "周日");
Map<Long, ReadBookDayStatisDTO> dayStatisMap = resultList.stream().collect(Collectors.toMap(x -> x.getCreateDate().getTime(), x -> x));
for (Date date : weekDate) {
ReadBookDayStatisDTO dto = dayStatisMap.get(date.getTime());
if(dto == null){
dto = new ReadBookDayStatisDTO();
dto.setCreateDate(date);
dto.setReadBookCount(0);
resultList.add(dto);
}
dto.setDayOfWeek(week.get(weekDate.indexOf(date)));
}
resultList.sort(Comparator.comparing(ReadBookDayStatisDTO::getCreateDate));
return resultList;
}
@Override
public List<AppletRecordStatisDTO> getBookSourceWeekStatis(Long wechatUserId, String mondayDate){
if(mondayDate == null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(),"mondayDate不能为空");
}
Date monday = DateUtils.getDateFromString(mondayDate, "yyyy-MM-dd");
// 校准周一
monday = DateUtils.addDay(DateUtils.getWeekStart(monday), 1);
List<AppletRecordStatisDTO> resultList = appletRecordStatisDao.getBookSourceWeekStatis(wechatUserId, monday);
if(CollectionUtils.isEmpty(resultList)){
return Lists.newArrayList();
}
Integer totalClickCount = appletRecordStatisDao.getBookSourceTotalClickCount(wechatUserId, monday);
if(totalClickCount == 0){
return resultList;
}
// 计算占比
calculateRatio(resultList, totalClickCount);
// 填充应用、作品类型名称
fillAppOrProductName(resultList);
return resultList;
}
private void fillAppOrProductName(List<AppletRecordStatisDTO> resultList) {
Map<String, AppTypeDto> appTypeDtoMap = appConsr.listAllCode();
Map<String, ProductTypeDto> productTypeDtoMap = productConsr.getProType();
for (AppletRecordStatisDTO dto : resultList) {
if(dto.getRecordType() == null){
continue;
}
if(dto.getRecordType() == 5){
ProductTypeDto productTypeDto = productTypeDtoMap.get(dto.getSourceType());
if(productTypeDto == null || StringUtil.isEmpty(productTypeDto.getTypeName())){
continue;
}
dto.setSourceTypeName("新" + productTypeDto.getTypeName());
}
if(dto.getRecordType() == 6){
dto.setSourceTypeName(Optional.ofNullable(appTypeDtoMap.get(dto.getSourceType())).orElse(new AppTypeDto()).getTypeName());
}
}
}
private void calculateRatio(List<AppletRecordStatisDTO> resultList, Integer totalClickCount) {
BigDecimal top5TotalRatio = BigDecimal.ZERO;
Long totalCount = 0L;
for (int i = 0; i < resultList.size(); i++) {
AppletRecordStatisDTO item = resultList.get(i);
BigDecimal ratio = new BigDecimal(item.getClickCount()).divide(new BigDecimal(totalClickCount), 2, BigDecimal.ROUND_HALF_UP);
item.setClickRatio(ratio);
item.setStrClickRatio(ratio.multiply(new BigDecimal(100)).setScale(0)+ "%");
item.setSourceTypeName(item.getSourceType());
top5TotalRatio = top5TotalRatio.add(ratio);
totalCount += item.getClickCount();
// 如果已经到5个了,并且占比还没到100%,则增加一个其它
if(i == resultList.size() - 1 && i == 4 && new BigDecimal(1).compareTo(top5TotalRatio) == 1){
AppletRecordStatisDTO other = new AppletRecordStatisDTO();
BigDecimal subtract = new BigDecimal(1).subtract(top5TotalRatio);
other.setClickCount(totalClickCount - totalCount);
other.setClickRatio(subtract);
other.setStrClickRatio(subtract.multiply(new BigDecimal(100)).setScale(0) + "%");
other.setSourceType("其它");
other.setSourceTypeName("其它");
resultList.add(other);
break;
}
}
}
@Override
public List<AppletRecordStatisDTO> getBookNewsWeekStatis(Long wechatUserId, String mondayDate) {
if(mondayDate == null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(),"mondayDate不能为空");
}
Date monday = DateUtils.getDateFromString(mondayDate, "yyyy-MM-dd");
// 校准周一
monday = DateUtils.addDay(DateUtils.getWeekStart(monday), 1);
List<AppletRecordStatisDTO> resultList = appletRecordStatisDao.getBookNewsWeekStatics(wechatUserId, monday);
if(CollectionUtils.isEmpty(resultList)){
return Lists.newArrayList();
}
Integer totalClickCount = appletRecordStatisDao.getBookNewsTotalClickCount(wechatUserId, monday);
if(totalClickCount == 0){
return resultList;
}
// 计算占比
calculateRatio(resultList, totalClickCount);
return resultList;
}
@Override
public void deleteWeekAppletRecordStatis(String mondayDate){
appletRecordStatisDao.deleteWeekAppletRecordStatis(mondayDate);
}
@Override
public void addWeekAppletRecordStatis(String mondayDate) {
// 获取7天前的日期
Date prevWeekDay = DateUtils.addDay(new Date(), -7);
if(mondayDate != null){
prevWeekDay = DateUtils.getDateByStr(mondayDate);
}
// 校准日期为上周一(加一天是因为这里它把周日当成是一周的起点)
Date prevMonday = DateUtils.addDay(DateUtils.getWeekStart(prevWeekDay), 1);
Date prevSunday = DateUtils.addDay(prevMonday, 6);
if(AppletConstants.APPLET_RECORD_STATIS_REPORT_START_DATE.compareTo(prevMonday) == 1){
LOGGER.info("addWeekAppletRecordStatis 统计时间从"+AppletConstants.APPLET_RECORD_STATIS_REPORT_START_DATE+"开始;");
return;
}
Long statisUserCount = appletRecordDao.getStatisUserCount(prevMonday, prevSunday);
if(statisUserCount == 0){
LOGGER.info("addWeekAppletRecordStatis 没有查询到用户量,请注意相关功能情况;");
return;
}
LOGGER.info(MessageFormat.format("addWeekAppletRecordStatis 开始更新上周【小程序用户报告】统计数据: 时间:{0};统计日期的范围:{1}-{2};", DateUtils.getLongDateStr(), prevMonday, prevSunday));
// 每次更新1000个用户
Long limitNumber = 1000L;
long limitTotalPage = statisUserCount % limitNumber == 0 ? (statisUserCount / limitNumber) : (statisUserCount / limitNumber + 1);
for (int i = 0; i < limitTotalPage; i++) {
long startTime = System.currentTimeMillis();
LOGGER.info(MessageFormat.format("addWeekAppletRecordStatis-startTime:{0};i:{1}", startTime, i));
// 周统计数据(应用、作品)
appletRecordStatisDao.addWeekAppletRecordStatis4App(prevMonday, prevSunday, i * limitNumber, limitNumber);
long endTime = System.currentTimeMillis();
LOGGER.info("addWeekAppletRecordStatis4App-endTime:" + endTime + ";间隔:"+ (startTime - endTime));
startTime = System.currentTimeMillis();
// 周统计数据(资讯)
appletRecordStatisDao.addWeekAppletRecordStatis4News(prevMonday, prevSunday, i * limitNumber, limitNumber);
endTime = System.currentTimeMillis();
LOGGER.info("addWeekAppletRecordStatis4News-startTime:"+startTime+";endTime:" + endTime + ";间隔:"+ (startTime - endTime));
}
}
}
package com.pcloud.book.applet.biz.impl;
import com.google.common.collect.Lists;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.applet.dao.AppletRecordStatisDao;
import com.pcloud.book.applet.dto.ReadBookWeekStatisDTO;
import com.pcloud.book.applet.entity.AppletRecordStatisReport;
import com.pcloud.book.applet.dao.AppletRecordStatisReportDao;
import com.pcloud.book.applet.biz.AppletRecordStatisReportBiz;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.facade.shareimage.dto.HtmlDto;
import com.pcloud.facade.shareimage.facade.Htm2ImgService;
import com.pcloud.readercenter.wechat.dto.Wechat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import com.pcloud.book.applet.contants.AppletConstants;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
/**
* 个人阅读报告总结(AppletRecordStatisReport)表服务实现类
*
* @author makejava
* @since 2020-12-11 16:22:46
*/
@Service("appletRecordStatisReportBiz")
public class AppletRecordStatisReportBizImpl implements AppletRecordStatisReportBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(AppletRecordStatisReportBizImpl.class);
@Autowired
private AppletRecordStatisReportDao appletRecordStatisReportDao;
@Autowired
private AppletRecordStatisBiz appletRecordStatisBiz;
@Autowired
private AppletRecordStatisDao appletRecordStatisDao;
@Autowired
private ReaderConsr readerConsr;
@Autowired
private Htm2ImgService htm2ImgService;
@Override
@ParamLog("通过ID查询单条数据")
public AppletRecordStatisReport getById(Long id) {
return appletRecordStatisReportDao.getById(id);
}
@Override
@ParamLog("查询多条数据")
public PageBeanNew getList(Integer currentPage, Integer numPerPage) {
PageBeanNew pageBeanNew = appletRecordStatisReportDao.listPageNew(new PageParam(currentPage, numPerPage), null, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
// 加载其它数据
return pageBeanNew;
}
@Override
@ParamLog("新增")
public Long insert(AppletRecordStatisReport appletRecordStatisReport) {
appletRecordStatisReportDao.insert(appletRecordStatisReport);
return appletRecordStatisReport.getId();
}
@Override
@ParamLog("修改")
public void update(AppletRecordStatisReport appletRecordStatisReport) {
if(appletRecordStatisReport == null || !NumberUtil.isNumber(appletRecordStatisReport.getId())){
throw BizException.PARAM_IS_NULL;
}
appletRecordStatisReportDao.update(appletRecordStatisReport);
}
@Override
@ParamLog("删除")
public void deleteById(Long id) {
appletRecordStatisReportDao.deleteById(id);
}
@Override
public AppletRecordStatisReport getReadReport4Week(Long wechatUserId, String mondayDate) {
if(mondayDate == null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(),"mondayDate不能为空");
}
Date monday = DateUtils.getDateFromString(mondayDate, "yyyy-MM-dd");
// 校准周一
monday = DateUtils.addDay(DateUtils.getWeekStart(monday), 1);
Date sunday = DateUtils.addDay(monday, 6);
Date thisMonday = DateUtils.addDay(DateUtils.getWeekStart(new Date()), 1);
if(monday.compareTo(thisMonday) > -1 || monday.compareTo(AppletConstants.APPLET_RECORD_STATIS_REPORT_START_DATE) == -1){
throw new BizException(BizException.PARAM_IS_NULL.getCode(), "未找到该周的报告");
}
// 直接获取本周分数结果
AppletRecordStatisReport thisWeekReport = appletRecordStatisReportDao.getByWechatUserId(wechatUserId, monday);
if(thisWeekReport != null){
return thisWeekReport;
}
// 计算本周分数结果
BigDecimal score = getReportScore(wechatUserId, monday, sunday);
if(BigDecimal.ZERO.compareTo(score) == 0){
AppletRecordStatisReport report = new AppletRecordStatisReport();
report.setBeginDate(monday);
report.setEndDate(sunday);
report.setScore(BigDecimal.ZERO);
return report;
}
// 上周的统计结果
AppletRecordStatisReport prevWeekReport = appletRecordStatisReportDao.getByWechatUserId(wechatUserId, DateUtils.addDay(monday, -7));
BigDecimal prevWeekScore = BigDecimal.ZERO.setScale(1);
// 分数不为空,并且大于0
if(prevWeekReport != null && prevWeekReport.getScore() != null && BigDecimal.ZERO.compareTo(prevWeekReport.getScore()) == -1){
prevWeekScore = prevWeekReport.getScore();
}
AppletRecordStatisReport report = new AppletRecordStatisReport();
report.setWechatUserId(wechatUserId);
report.setBeginDate(monday);
report.setEndDate(sunday);
report.setScore(score);
report.setCompareScore(score.subtract(prevWeekScore).setScale(1));
report.setCompareUserRatio(getCompareUserRatio(score));
appletRecordStatisReportDao.insert(report);
return report;
}
private BigDecimal getReportScore(Long wechatUserId, Date monday, Date sunday) {
/**
* 满分 10 分
* 1.阅读新书达到 10 本
* 2.阅读书达到 10 本
* 3.点击应用作品 10 次
* 4.点击资讯 10 次
* 5.点击社群 10 个(暂时排除)
*/
// 总分10分,每个规则占比25%
BigDecimal totalScore = BigDecimal.valueOf(10.00);
BigDecimal ratio = BigDecimal.valueOf(0.25);
BigDecimal score = BigDecimal.ZERO;
// 1.阅读新书达到 10 本;2.阅读书达到 10 本
ReadBookWeekStatisDTO readBookWeekStatisDTO = appletRecordStatisBiz.getReadBookWeekStatisDTO(wechatUserId, monday, sunday);
// 3.点击应用作品 10 次
Integer appProductClickCount = appletRecordStatisDao.getBookSourceTotalClickCount(wechatUserId, monday);
// 4.点击资讯 10 次
Integer newsClickCount = appletRecordStatisDao.getBookNewsTotalClickCount(wechatUserId, monday);
score = score.add(totalScore.multiply(ratio).multiply(new BigDecimal(getCount(readBookWeekStatisDTO.getReadBookCount())).divide(BigDecimal.valueOf(10))));
score = score.add(totalScore.multiply(ratio).multiply(new BigDecimal(getCount(readBookWeekStatisDTO.getReadNewBookCount())).divide(BigDecimal.valueOf(10))));
score = score.add(totalScore.multiply(ratio).multiply(new BigDecimal(getCount(appProductClickCount)).divide(BigDecimal.valueOf(10))));
score = score.add(totalScore.multiply(ratio).multiply(new BigDecimal(getCount(newsClickCount)).divide(BigDecimal.valueOf(10))));
return score.setScale(1, BigDecimal.ROUND_UP);
}
Integer getCount(Integer count){
return count > 10 ? 10 : count;
}
// 计算超过用户的百分比
BigDecimal getCompareUserRatio(BigDecimal score){
// 因为是用户点击了才生成报告,所以用户每次进去报告页面会导致看到不同的占比,所以根据分数来随机一个占比,这个数据其实也没有实际用处
BigDecimal userRatio = new BigDecimal(100);
if(new BigDecimal(10).compareTo(score) == 1){
// 先舍去小数点,然后乘10,再加上10以内的小数;
// 例如 8.6 = 8.0*10=80+(10以内的小数)=88.8;所以就是 88.8 就是 8.6 对应的超过用户占比
userRatio = score
.setScale(0,1)
.multiply(new BigDecimal(10))
.add(new BigDecimal(new Random().nextDouble()).multiply(new BigDecimal(10)).setScale(1,1));
}
return userRatio;
}
@Override
public PageBeanNew getReadReportList(Long wechatUserId, Integer currentPage, Integer numPerPage ) {
HashMap<String, Object> params = new HashMap<>();
params.put("wechatUserId", wechatUserId);
// 补充历史记录报告
replenishHistoryReport(wechatUserId);
// 查询列表
PageBeanNew pageBeanNew = appletRecordStatisReportDao.listPageNew(new PageParam(currentPage, numPerPage), params, "getList");
List recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
return pageBeanNew;
}
/**
* 补充历史记录报告
*/
private void replenishHistoryReport(Long wechatUserId) {
// 检测上次生成历史记录的时间
String redisKey = AppletConstants.APPLET_RECORD_HISTORY_STATIS_REPORT_LAST_DATE + wechatUserId;
String lastDate = JedisClusterUtils.get(redisKey);
String monday = DateUtils.getReqDate(DateUtils.addDay(DateUtils.getWeekStart(new Date()), 1));
// 测试时临时取消缓存
// 如果本周已经生成过,则return
// if(monday.equals(lastDate)){
// return;
// }
// 本周已经生成记录标识
JedisClusterUtils.set(redisKey, monday, 3600 * 24 * 7);
// 获取开始时间到上周所有的周一
List<Date> allMonday = getAllMonday(AppletConstants.APPLET_RECORD_STATIS_REPORT_START_DATE, DateUtils.addDay(DateUtils.getWeekStart(new Date()), -6));
// 获取所有的历史记录
List<AppletRecordStatisReport> historyReportList = appletRecordStatisReportDao.getUserHistoryReport(wechatUserId, allMonday);
// 检测缺省的历史记录
if(historyReportList == null){
historyReportList = Lists.newArrayList();
}
List<Date> existsReportList = historyReportList.stream().map(x -> x.getBeginDate()).collect(Collectors.toList());
allMonday.removeAll(existsReportList);
if(CollectionUtils.isEmpty(allMonday)){
return;
}
// 循环生成缺省的历史记录,添加到所有历史记录表
AppletRecordStatisReport statisReport;
Date sunday;
for (Date _monday : allMonday) {
sunday = DateUtils.addDay(_monday, 7);
statisReport = new AppletRecordStatisReport();
// 计算本周分数结果
BigDecimal score = getReportScore(wechatUserId, _monday, sunday);
if(BigDecimal.ZERO.compareTo(score) == 0){
continue;
}
statisReport.setWechatUserId(wechatUserId);
statisReport.setBeginDate(_monday);
statisReport.setEndDate(sunday);
statisReport.setScore(score);
statisReport.setCompareUserRatio(getCompareUserRatio(score));
historyReportList.add(statisReport);
}
// 重新计算比上周的分数值,并更新缺省下一周记录的比上周的值
Map<String, AppletRecordStatisReport> statisReportMap = historyReportList.stream().collect(Collectors.toMap(x -> DateUtils.getReqDate(x.getBeginDate()), x -> x));
for (AppletRecordStatisReport report : statisReportMap.values()) {
AppletRecordStatisReport prevReport = statisReportMap.get(DateUtils.getReqDate(DateUtils.addDay(report.getBeginDate(), -7)));
if(prevReport == null || prevReport.getScore() == null){
report.setCompareScore(report.getScore().setScale(1));
continue;
}
report.setCompareScore(report.getScore().subtract(prevReport.getScore()).setScale(1));
}
// 批量插入、更新
appletRecordStatisReportDao.insertOrUpdate(historyReportList);
}
private List<Date> getAllMonday(Date beginDate, Date endDate){
List<Date> mondayList = Lists.newArrayList();
if(beginDate == null){
return mondayList;
}
// 如果结束时间为null,则将其赋值为当前时间
if(endDate == null){
endDate = new Date();
}
Date beginMonday = DateUtils.addDay(DateUtils.getWeekStart(beginDate), 1);
Date endMonday = DateUtils.addDay(DateUtils.getWeekStart(endDate), 1);
// 如果开始时间比结束时间大,直接返回
if(beginMonday.compareTo(endMonday) == 1){
return mondayList;
}
mondayList.add(beginMonday);
while (beginMonday.compareTo(endMonday) == -1){
beginMonday = DateUtils.addDay(beginMonday, 7);
mondayList.add(beginMonday);
}
return mondayList;
}
@Override
public String shareReadReport(Long wechatUserId, String mondayDate) {
if(mondayDate == null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(),"mondayDate不能为空");
}
// 生成分享图
HtmlDto htmlDto=new HtmlDto();
htmlDto.setHeight(1206);
htmlDto.setWidth(750);
htmlDto.setHtmlCode(builderShareHtml(wechatUserId, mondayDate));
htmlDto.setSnapshot(new Long(System.currentTimeMillis()).toString());
return ResponseHandleUtil.parseResponse(htm2ImgService.toJPGByChrome(htmlDto), String.class);
}
private String builderShareHtml(Long wechatUserId, String mondayDate) {
Date monday = DateUtils.getDateFromString(mondayDate, "yyyy-MM-dd");
// 校准周一
monday = DateUtils.addDay(DateUtils.getWeekStart(monday), 1);
// 直接获取本周分数结果
AppletRecordStatisReport thisWeekReport = appletRecordStatisReportDao.getByWechatUserId(wechatUserId, monday);
if(thisWeekReport == null){
throw new BizException(BizException.DB_SELECT_IS_FAIL.getCode(), "没有找到阅读报告,它可能去火星啦");
}
// 获取用户信息
Wechat wechat = readerConsr.getWechatUserInfo(wechatUserId);
// HTML生成
return "\n" +
"<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"\n" +
"<head>\n" +
" <meta charset=\"GBK\">\n" +
" <!-- <meta charset=\"utf-8\"> -->\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
" <title>report-share</title>\n" +
"</head>\n" +
"<style>\n" +
" * {\n" +
" margin: 0;\n" +
" padding: 0;\n" +
" }\n" +
"\n" +
" body {\n" +
" font-family: sans-serif;\n" +
" color:#333;\n" +
" box-sizing: border-box;\n" +
" }\n" +
" .report-shareInfo{\n" +
" width:750px;\n" +
" height:100vh;\n" +
" background:url('https://file.5rs.me/oss/uploadfe/png/6841a46a78818b3014d604a13f10c39f.png') no-repeat;\n" +
" background-size: cover;\n" +
" margin:0 auto;\n" +
" position: relative;\n" +
" padding-top: 80px;\n" +
" box-sizing: border-box;\n" +
" }\n" +
" .title-bg{\n" +
" width:462px;\n" +
" height:110px;\n" +
" position: absolute;\n" +
" left: 145px;\n" +
" top:44px;\n" +
" z-index: 1;\n" +
" }\n" +
" .report-content{\n" +
" position: relative;\n" +
" width:640px;\n" +
" height:922px;\n" +
" background: url('https://file.5rs.me/oss/uploadfe/png/83dcdfb55be87c6aabaf808e343fd07a.png') no-repeat;\n" +
" background-size: 640px 922px;\n" +
" margin:0 auto;\n" +
" padding: 80px 36px 0;\n" +
" box-sizing: border-box;\n" +
" display: flex;\n" +
" flex-direction: column;\n" +
" align-items: center;\n" +
" }\n" +
" .user-info{\n" +
" display: flex;\n" +
" align-items: center;\n" +
" width:100%;\n" +
" }\n" +
" .head-url{\n" +
" width: 80px;\n" +
" height:80px;\n" +
" display: flex;\n" +
" border: 4px solid #2470FB;\n" +
" border-radius: 100%;\n" +
" overflow: hidden;\n" +
" background: url('"+wechat.getPicUrl()+"') no-repeat;\n" +
" background-size: contain;\n" +
" background-position: center;\n" +
" margin-right: 14px;\n" +
" margin-left: 14px;\n" +
" }\n" +
" .user-right{\n" +
" display: flex;\n" +
" flex-direction: column;\n" +
" justify-content: space-around;\n" +
" }\n" +
" .username{\n" +
" font-size: 32px;\n" +
" line-height: 1.4;\n" +
" }\n" +
" .loginDays{\n" +
" font-size: 24px;\n" +
" }\n" +
" .loginDays span{\n" +
" font-size: 24px;\n" +
" color: #FE5E47;\n" +
" }\n" +
" .score-content{\n" +
" width:402px;\n" +
" height:316px;\n" +
" background: url('https://file.5rs.me/oss/uploadfe/png/0fafcb400d753d9fd6b62041b5df664b.png') no-repeat;\n" +
" display: flex;\n" +
" flex-direction: column;\n" +
" align-items: center;\n" +
" justify-content: center;\n" +
" margin-top: 26px;\n" +
" box-sizing: border-box;\n" +
" padding-top: 46px;\n" +
" }\n" +
" .score-tips{\n" +
" color: #80413B;\n" +
" font-size: 24px;\n" +
" }\n" +
" .score{\n" +
" font-size: 48px;\n" +
" color: #80413B;\n" +
" font-weight: bold;\n" +
" display: flex;\n" +
" align-items: center;\n" +
" }\n" +
" .danwei{\n" +
" color: #80413B;\n" +
" font-size: 24px;\n" +
" font-weight: normal;\n" +
" }\n" +
" .score-compare{\n" +
" display: flex;\n" +
" flex-direction: column;\n" +
" justify-content: center;\n" +
" align-items: center;\n" +
" font-size: 32px;\n" +
" color: #333;\n" +
" font-weight: bold;\n" +
" }\n" +
" .score-compare span{\n" +
" color:#FE5E47;\n" +
" margin-top: 8px;\n" +
" }\n" +
" .compareScore{\n" +
" display: flex;\n" +
" align-items: center;\n" +
" }\n" +
" .qrcode-content{\n" +
" position: absolute;\n" +
" left: 50px;\n" +
" bottom: 40px;\n" +
" display: flex;\n" +
" flex-direction: column;\n" +
" align-items: center;\n" +
" justify-content: center;\n" +
" }\n" +
" .qrcoe-img{\n" +
" width:160px;\n" +
" height:160px;\n" +
" overflow: hidden;\n" +
" }\n" +
" .qrcode-content span{\n" +
" color: #999;\n" +
" font-size: 20px;\n" +
" margin-top:10px;\n" +
" }\n" +
" .time-line{\n" +
" color: #333;\n" +
" font-size: 24px;\n" +
" position: absolute;\n" +
" right: 50px;\n" +
" bottom:36px;\n" +
" }\n" +
" .share-btn{\n" +
" position: absolute;\n" +
" z-index: 2;\n" +
" width:284px;\n" +
" height:76px;\n" +
" left:180px;\n" +
" right:180px;\n" +
" bottom: 240px;\n" +
" }\n" +
"</style>\n" +
"\n" +
"<body>\n" +
" <div class=\"report-shareInfo\">\n" +
" <img class='title-bg' src='https://file.5rs.me/oss/uploadfe/png/0278d5cff4ee667fc973000de2460b4b.png' />\n" +
" <div class=\"report-content\">\n" +
" <div class=\"user-info\">\n" +
" <div class=\"head-url\"></div>\n" +
" <div class=\"user-right\">\n" +
" <div class=\"username\">\n" +
" "+wechat.getNickName()+"\n" +
" </div>\n" +
" <div class=\"loginDays\">\n" +
" 书僮小睿已陪伴我<span>"+ wechat.getLoginDays() +"天</span>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" <div class=\"score-content\">\n" +
" <span class=\"score-tips\">综合评分</span>\n" +
" <div class=\"score\">"+thisWeekReport.getScore()+"<span class=\"danwei\">分</span></div>\n" +
" </div>\n" +
" <div class=\"score-compare\">\n" +
" <div>当前阅读评估分值超过了</div>\n" +
" <div class=\"compareScore\"><span>"+thisWeekReport.getCompareUserRatio()+"%</span>的用户</div>\n" +
" </div>\n" +
" <div class=\"qrcode-content\">\n" +
" <img class=\"qrcoe-img\" src='https://file.5rs.me/oss/uploadfe/png/52b9033dd2e80d059c12a29204ca9b45.png' />\n" +
" <span>识别二维码进入小程序</span>\n" +
" </div>\n" +
" <div class=\"time-line\">"+DateUtils.formatDate(thisWeekReport.getBeginDate(), "yyyy/MM/dd")+"至"+DateUtils.formatDate(thisWeekReport.getEndDate(), "MM/dd")+"</div>\n" +
" <!-- <img class=\"share-btn\" src='https://file.5rs.me/oss/uploadfe/png/a11217df439f101c34737c360da02f17.png' /> -->\n" +
" </div>\n" +
" </div>\n" +
"</body>\n" +
"\n" +
"</html>";
}
}
package com.pcloud.book.applet.contants;
import com.pcloud.common.constant.CacheConstant;
import com.pcloud.common.utils.DateUtils;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
......@@ -60,21 +58,6 @@ public class AppletConstants {
public static final String APPLET_AGENT_STATISTIC = CacheConstant.BOOK +"APPLET:applet_agent_statistic";
/**
* 已读书刊列表
*/
public static final String APPLET_RECORD_USER_BOOK_LIST = CacheConstant.BOOK+"APPLET:getAllUserBookRecordList";
/**
* 阅读报告开始时间
*/
public static final Date APPLET_RECORD_STATIS_REPORT_START_DATE = DateUtils.getDateByStr("2020-11-30");
/**
* 最后一次历史统计报告的时间
*/
public static final String APPLET_RECORD_HISTORY_STATIS_REPORT_LAST_DATE = CacheConstant.BOOK + "APPLET:HISTORY_REPORT_LAST_DATE_";
/**
* 未配置答案的书刊
*/
public static final List<Long> NO_ANSWER_BOOK = Arrays.asList(
......
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.dto.AppletRecordBookDTO;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.applet.dto.AppletUserBookcaseDTO;
import com.pcloud.book.applet.dto.ReadBookDayStatisDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.common.core.dao.BaseDao;
......@@ -24,10 +22,4 @@ public interface AppletRecordDao extends BaseDao<AppletRecord> {
void updateDeleteState(Long fromId, Integer recordType);
List<Date> listReachableDate(Long wechatUserId);
List<ReadBookDayStatisDTO> getReadBookWeekStatis(Long wechatUserId, String mondayDate, String sundayDate);
List<AppletRecordBookDTO> getBooksByWechatUserId(Long wechatUserId);
Long getStatisUserCount(Date prevMonday, Date prevSunday);
}
}
\ No newline at end of file
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.dto.AppletRecordStatisDTO;
import com.pcloud.book.applet.dto.ReadBookDayStatisDTO;
import com.pcloud.book.applet.entity.AppletRecordStatis;
import com.pcloud.common.core.dao.BaseDao;
import java.util.Date;
import java.util.List;
/**
* 小睿小程序点击量统计(AppletRecordStatis)表数据库访问层
*
* @author makejava
* @since 2020-12-10 17:58:06
*/
public interface AppletRecordStatisDao extends BaseDao<AppletRecordStatis> {
/**
* 每个应用、作品点击量详情
*/
List<AppletRecordStatisDTO> getBookSourceWeekStatis(Long wechatUserId, Date mondayDate);
/**
* 本周的应用作品总点击量
*/
Integer getBookSourceTotalClickCount(Long wechatUserId, Date mondayDate);
List<AppletRecordStatisDTO> getBookNewsWeekStatics(Long wechatUserId, Date mondayDate);
Integer getBookNewsTotalClickCount(Long wechatUserId, Date mondayDate);
void addWeekAppletRecordStatis4App(Date prevMonday, Date prevSunday, Long limitStart, Long limitNumber);
void addWeekAppletRecordStatis4News(Date prevMonday, Date prevSunday, Long limitStart, Long limitNumber);
void deleteWeekAppletRecordStatis(String monday);
}
package com.pcloud.book.applet.dao;
import com.pcloud.book.applet.entity.AppletRecordStatisReport;
import com.pcloud.common.core.dao.BaseDao;
import java.util.Date;
import java.util.List;
/**
* 个人阅读报告总结(AppletRecordStatisReport)表数据库访问层
*
* @author makejava
* @since 2020-12-11 16:22:46
*/
public interface AppletRecordStatisReportDao extends BaseDao<AppletRecordStatisReport> {
AppletRecordStatisReport getByWechatUserId(Long wechatUserId, Date beginDate);
List<AppletRecordStatisReport> getUserHistoryReport(Long wechatUserId, List<Date> allMonday);
void insertOrUpdate(List<AppletRecordStatisReport> historyReportList);
AppletRecordStatisReport getFirstStatisReport(Long wechatUserId);
}
......@@ -2,10 +2,8 @@ package com.pcloud.book.applet.dao.impl;
import cn.hutool.core.map.MapUtil;
import com.pcloud.book.applet.dao.AppletRecordDao;
import com.pcloud.book.applet.dto.AppletRecordBookDTO;
import com.pcloud.book.applet.dto.AppletRecordDTO;
import com.pcloud.book.applet.dto.AppletUserBookcaseDTO;
import com.pcloud.book.applet.dto.ReadBookDayStatisDTO;
import com.pcloud.book.applet.entity.AppletRecord;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
......@@ -41,28 +39,4 @@ public class AppletRecordDaoImpl extends BaseDaoImpl<AppletRecord> implements Ap
public List<Date> listReachableDate(Long wechatUserId) {
return getSqlSession().selectList("listReachableDate", MapUtil.of("wechatUserId",wechatUserId));
}
@Override
public List<ReadBookDayStatisDTO> getReadBookWeekStatis(Long wechatUserId, String mondayDate, String sundayDate) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId", wechatUserId);
paramMap.put("mondayDate", mondayDate);
paramMap.put("sundayDate", sundayDate);
return this.sqlSessionTemplate.selectList(getStatement("getReadBookWeekStatis"),paramMap);
}
@Override
public List<AppletRecordBookDTO> getBooksByWechatUserId(Long wechatUserId) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId", wechatUserId);
return this.sqlSessionTemplate.selectList(getStatement("getBooksByWechatUserId"),paramMap);
}
@Override
public Long getStatisUserCount(Date prevMonday, Date prevSunday) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("prevMonday", prevMonday);
paramMap.put("prevSunday", prevSunday);
return this.sqlSessionTemplate.selectOne(getStatement("getStatisUserCount"), paramMap);
}
}
}
\ No newline at end of file
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.dto.AppletRecordStatisDTO;
import com.pcloud.book.applet.entity.AppletRecordStatis;
import com.pcloud.book.applet.dao.AppletRecordStatisDao;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* 小睿小程序点击量统计(AppletRecordStatis)表数据库访问层
*
* @author makejava
* @since 2020-12-10 17:58:06
*/
@Repository("appletRecordStatisDaoImpl")
public class AppletRecordStatisDaoImpl extends BaseDaoImpl<AppletRecordStatis> implements AppletRecordStatisDao {
@Override
public List<AppletRecordStatisDTO> getBookSourceWeekStatis(Long wechatUserId, Date mondayDate){
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId",wechatUserId);
paramMap.put("statisDate",mondayDate);
return this.sqlSessionTemplate.selectList(getStatement("getBookSourceWeekStatis"),paramMap);
}
@Override
public Integer getBookSourceTotalClickCount(Long wechatUserId, Date mondayDate) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId",wechatUserId);
paramMap.put("statisDate",mondayDate);
return this.sqlSessionTemplate.selectOne(getStatement("getBookSourceTotalClickCount"),paramMap);
}
@Override
public List<AppletRecordStatisDTO> getBookNewsWeekStatics(Long wechatUserId, Date mondayDate) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId",wechatUserId);
paramMap.put("statisDate",mondayDate);
return this.sqlSessionTemplate.selectList(getStatement("getBookNewsWeekStatics"),paramMap);
}
@Override
public Integer getBookNewsTotalClickCount(Long wechatUserId, Date mondayDate) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId",wechatUserId);
paramMap.put("statisDate",mondayDate);
return this.sqlSessionTemplate.selectOne(getStatement("getBookNewsTotalClickCount"),paramMap);
}
@Override
public void addWeekAppletRecordStatis4App(Date prevMonday, Date prevSunday, Long limitStart, Long limitNumber) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("prevMonday", prevMonday);
paramMap.put("prevSunday", prevSunday);
paramMap.put("limitStart", limitStart);
paramMap.put("limitNumber", limitNumber);
this.sqlSessionTemplate.insert(getStatement("addWeekAppletRecordStatis4App"), paramMap);
}
@Override
public void addWeekAppletRecordStatis4News(Date prevMonday, Date prevSunday, Long limitStart, Long limitNumber) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("prevMonday", prevMonday);
paramMap.put("prevSunday", prevSunday);
paramMap.put("limitStart", limitStart);
paramMap.put("limitNumber", limitNumber);
this.sqlSessionTemplate.insert(getStatement("addWeekAppletRecordStatis4News"), paramMap);
}
@Override
public void deleteWeekAppletRecordStatis(String monday) {
HashMap<String,Object> paramMap = new HashMap<>();
paramMap.put("monday", monday);
this.sqlSessionTemplate.insert(getStatement("deleteWeekAppletRecordStatis"), paramMap);
}
}
package com.pcloud.book.applet.dao.impl;
import com.pcloud.book.applet.entity.AppletRecordStatisReport;
import com.pcloud.book.applet.dao.AppletRecordStatisReportDao;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
import org.apache.ibatis.annotations.Param;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
* 个人阅读报告总结(AppletRecordStatisReport)表数据库访问层
*
* @author makejava
* @since 2020-12-11 16:22:46
*/
@Repository("appletRecordStatisReportDaoImpl")
public class AppletRecordStatisReportDaoImpl extends BaseDaoImpl<AppletRecordStatisReport> implements AppletRecordStatisReportDao {
@Override
public AppletRecordStatisReport getByWechatUserId(Long wechatUserId, Date beginDate) {
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId", wechatUserId);
paramMap.put("beginDate", beginDate);
return this.sqlSessionTemplate.selectOne(getStatement("getByWechatUserId"), paramMap);
}
@Override
public List<AppletRecordStatisReport> getUserHistoryReport(Long wechatUserId, List<Date> allMonday) {
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId", wechatUserId);
paramMap.put("allMonday", allMonday);
return this.sqlSessionTemplate.selectList(getStatement("getUserHistoryReport"), paramMap);
}
@Override
public void insertOrUpdate(List<AppletRecordStatisReport> historyReportList) {
if(CollectionUtils.isEmpty(historyReportList)){
return;
}
this.sqlSessionTemplate.insert(getStatement("insertOrUpdate"), historyReportList);
}
@Override
public AppletRecordStatisReport getFirstStatisReport(Long wechatUserId) {
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("wechatUserId", wechatUserId);
return this.sqlSessionTemplate.selectOne(getStatement("getFirstStatisReport"), paramMap);
}
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class AppletRecordBookDTO {
private Long bookId;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date createDate;
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 小睿小程序点击量统计(AppletRecordStatics)实体类
*
* @author makejava
* @since 2020-12-10 16:08:46
*/
@Data
public class AppletRecordStatisDTO {
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("用户id")
private Long wechatUserId;
@ApiModelProperty("记录类型")
private Integer recordType;
@ApiModelProperty("应用/作品类型/资源类型")
private String sourceType;
@ApiModelProperty("应用/作品类型/资源类型")
private String sourceTypeName;
@ApiModelProperty("点击量")
private Long clickCount;
@ApiModelProperty("占比")
private BigDecimal clickRatio = BigDecimal.ZERO;
@ApiModelProperty("占比")
private String strClickRatio;
@ApiModelProperty("统计日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date statisDate;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 个人阅读报告总结(AppletRecordStatisReport)实体类
*
* @author makejava
* @since 2020-12-11 16:22:46
*/
@Data
public class AppletRecordStatisReportDTO {
@ApiModelProperty("个人阅读报告总结主键")
private Long id;
@ApiModelProperty("用户id")
private Long wechatUserId;
@ApiModelProperty("统计开始日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date beginDate;
@ApiModelProperty("统计结束日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endDate;
@ApiModelProperty("评分")
private BigDecimal score;
@ApiModelProperty("比上周")
private BigDecimal compareScore;
@ApiModelProperty("超过的用户占比")
private BigDecimal compareUserRatio;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReadBookDayStatisDTO {
private Long wechatUserId;
@ApiModelProperty("当天读书本数")
private Integer readBookCount;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date createDate;
@ApiModelProperty("周几")
private String dayOfWeek;
}
package com.pcloud.book.applet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ReadBookWeekStatisDTO {
private Long wechatUserId;
@ApiModelProperty("本周读书本数")
private Integer readBookCount;
@ApiModelProperty("本周已读新书本数")
private Integer readNewBookCount;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date beginDate;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endDate;
private List<ReadBookDayStatisDTO> readBookDayStatisList;
}
......@@ -59,6 +59,4 @@ public class AppletRecord extends BaseEntity {
@ApiModelProperty("应用或作品的跳转链接")
private String linkUrl;
@ApiModelProperty("应用、作品类型")
private String typeCode;
}
}
\ No newline at end of file
package com.pcloud.book.applet.entity;
import java.util.Date;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 小睿小程序点击量统计(AppletRecordStatis)实体类
*
* @author makejava
* @since 2020-12-10 18:03:37
*/
@Data
public class AppletRecordStatis extends BaseEntity {
private static final long serialVersionUID = -47890081209136384L;
@ApiModelProperty("主键id")
private Long id;
@ApiModelProperty("用户id")
private Long wechatUserId;
@ApiModelProperty("记录类型")
private Integer recordType;
@ApiModelProperty("应用/作品类型/资源类型")
private String sourceType;
@ApiModelProperty("点击量")
private Long clickCount;
@ApiModelProperty("统计日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date statisDate;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}
package com.pcloud.book.applet.entity;
import java.math.BigDecimal;
import java.util.Date;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 个人阅读报告总结(AppletRecordStatisReport)实体类
*
* @author makejava
* @since 2020-12-11 16:22:46
*/
@Data
public class AppletRecordStatisReport extends BaseEntity {
private static final long serialVersionUID = -66063403195993965L;
@ApiModelProperty("个人阅读报告总结主键")
private Long id;
@ApiModelProperty("用户id")
private Long wechatUserId;
@ApiModelProperty("统计开始日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date beginDate;
@ApiModelProperty("统计结束日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endDate;
@ApiModelProperty("评分")
private BigDecimal score;
@ApiModelProperty("比上周")
private BigDecimal compareScore;
@ApiModelProperty("超过的用户占比")
private BigDecimal compareUserRatio;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
package com.pcloud.book.applet.facade;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.applet.biz.AppletRecordStatisReportBiz;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.cookie.Cookie;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import io.swagger.annotations.ApiOperation;
/**
* 小睿小程序点击量统计(AppletRecordStatis)表控制层
*
* @author makejava
* @since 2020-12-10 17:58:06
*/
@RestController("appletRecordStatisFacade")
@RequestMapping("appletRecordStatis")
public class AppletRecordStatisFacade {
@Autowired
private AppletRecordStatisBiz appletRecordStatisBiz;
@Autowired
private AppletRecordStatisReportBiz appletRecordStatisReportBiz;
@ApiOperation("获取本周读书趋势")
@GetMapping("getReadBookWeekStatis")
public ResponseDto<?> getReadBookWeekStatis(@CookieValue("userInfo")String userInfo, @RequestParam("mondayDate")String mondayDate)throws BizException,PermissionException{
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordStatisBiz.getReadBookWeekStatis(wechatUserId, mondayDate));
}
@ApiOperation("获取本周资源使用频率分布")
@GetMapping("getBookSourceWeekStatis")
public ResponseDto<?> getBookSourceWeekStatis(@CookieValue("userInfo")String userInfo, @RequestParam("mondayDate")String mondayDate)throws BizException,PermissionException{
Long wechatUserId=Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordStatisBiz.getBookSourceWeekStatis(wechatUserId,mondayDate));
}
@ApiOperation("获取本周推荐资讯学习频率分布")
@GetMapping("getBookNewsWeekStatis")
public ResponseDto<?> getBookNewsWeekStatis(@CookieValue("userInfo")String userInfo, @RequestParam("mondayDate")String mondayDate)throws BizException,PermissionException{
Long wechatUserId=Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordStatisBiz.getBookNewsWeekStatis(wechatUserId, mondayDate));
}
@ApiOperation("本周综合评分")
@GetMapping("getReadReport4Week")
public ResponseDto<?> getReadReport4Week(@CookieValue("userInfo")String userInfo, @RequestParam("mondayDate")String mondayDate)throws BizException,PermissionException{
Long wechatUserId=Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordStatisReportBiz.getReadReport4Week(wechatUserId, mondayDate));
}
@ApiOperation("历史综合评分")
@GetMapping("getReadReportList")
public ResponseDto<?> getReadReportList(
@CookieValue("userInfo")String userInfo,
@RequestParam(value = "currentPage", defaultValue = "0") Integer currentPage,
@RequestParam(value = "numPerPage", defaultValue = "10") Integer numPerPage)throws BizException,PermissionException{
Long wechatUserId=Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordStatisReportBiz.getReadReportList(wechatUserId, currentPage, numPerPage));
}
@ApiOperation("分享阅读报告")
@GetMapping("shareReadReport")
public ResponseDto<?> shareReadReport(@CookieValue("userInfo")String userInfo, @RequestParam("mondayDate")String mondayDate)throws BizException,PermissionException{
Long wechatUserId=Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(appletRecordStatisReportBiz.shareReadReport(wechatUserId, mondayDate));
}
}
package com.pcloud.book.applet.scheduleds;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.skill.remind.RedisTool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component("appletRecordStatisSchedule")
public class AppletRecordStatisSchedule {
@Autowired
private AppletRecordStatisBiz appletRecordStatisBiz;
@Scheduled(cron = "0 0 1 ? * MON")
public void weekDataStatis() {
String key = "BOOK_APPLET_RECORD_WEEK_STATIS_SCHEDULE";
if (!RedisTool.lock(key)){
return;
}
new Thread(() -> {
appletRecordStatisBiz.addWeekAppletRecordStatis(null);
}).start();
}
}
......@@ -4,7 +4,6 @@ import com.pcloud.book.applet.biz.AnswerSubscribeBiz;
import com.pcloud.book.applet.biz.AppletBooklistBiz;
import com.pcloud.book.applet.biz.AppletBookClassifyBiz;
import com.pcloud.book.applet.biz.AppletNewsBiz;
import com.pcloud.book.applet.biz.AppletRecordStatisBiz;
import com.pcloud.book.applet.biz.AppletThirdResourcesStaticBiz;
import com.pcloud.book.applet.biz.ServeCollectBiz;
import com.pcloud.book.applet.dto.AppletNewsVO;
......@@ -18,7 +17,6 @@ import com.pcloud.book.skill.entity.PcloudGroupActivity;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.utils.ResponseHandleUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
......@@ -61,8 +59,6 @@ public class AppletServiceImpl implements AppletService {
private ServeCollectBiz serveCollectBiz;
@Autowired
private RightsSettingBiz rightsSettingBiz;
@Autowired
private AppletRecordStatisBiz appletRecordStatisBiz;
@Override
......@@ -123,18 +119,4 @@ public class AppletServiceImpl implements AppletService {
@RequestParam("popupType") Integer popupType){
return ResponseHandleUtil.toResponse(rightsSettingBiz.getPopupCount(wechatUserId, bookId, popupType));
}
@Override
@ApiOperation("删除指定周的统计数据")
@GetMapping("deleteWeekAppletRecordStatis")
public void deleteWeekAppletRecordStatis(@RequestParam("mondayDate")String mondayDate) {
appletRecordStatisBiz.deleteWeekAppletRecordStatis(mondayDate);
}
@Override
@ApiOperation("统计指定周的数据")
@GetMapping("addWeekAppletRecordStatis")
public void addWeekAppletRecordStatis(@RequestParam("mondayDate")String mondayDate) {
appletRecordStatisBiz.addWeekAppletRecordStatis(mondayDate);
}
}
package com.pcloud.book.consumer.app;
import com.pcloud.appcenter.app.dto.AppTypeDto;
import com.pcloud.appcenter.app.service.AppTypeService;
import com.pcloud.appcenter.base.dto.AppPriceCacheDTO;
import com.pcloud.appcenter.cache.service.AppPriceCacheService;
import java.math.BigDecimal;
......@@ -43,8 +41,6 @@ public class AppConsr {
private AppService appService;
@Autowired
private AppPriceCacheService appPriceCacheService;
@Autowired
private AppTypeService appTypeService;
/**
* 获取审核通过的应用
......@@ -216,22 +212,4 @@ public class AppConsr {
}
return appDtos;
}
public Map<String, AppTypeDto> listAllCode(){
try {
Map<String, AppTypeDto> appTypeDtoMap = new HashMap<>();
ResponseEntity<ResponseDto<Map<String, AppTypeDto>>> appDtosEntity = appTypeService.listAllCode();
appTypeDtoMap = ResponseHandleUtil.parseMapResponse(appDtosEntity, String.class, AppTypeDto.class);
if (appTypeDtoMap == null) {
return new HashMap<>();
}
return appTypeDtoMap;
} catch (BizException e) {
LOGGER.warn("获取应用类型名称[appTypeService.listAllCode]:" + e.getMessage(), e);
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
LOGGER.error("获取应用类型名称[appTypeService.listAllCode]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_USER_ERROR, "listAllCode 获取应用类型名称失败~!");
}
}
}
......@@ -18,7 +18,6 @@ import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.readercenter.wechat.dto.SpecialBookDTO4Reader;
import com.pcloud.readercenter.wechat.dto.SpecialBookQueryDTO4Reader;
import com.pcloud.readercenter.wechat.dto.Wechat;
import com.pcloud.usercenter.party.agent.dto.AgentCity;
import com.pcloud.usercenter.party.agent.service.AgentService;
import org.slf4j.Logger;
......@@ -324,18 +323,6 @@ public class ReaderConsr {
}
}
public Wechat getWechatUserInfo(Long wechatUserId) throws BizException {
if (wechatUserId == null) {
return null;
}
try {
return ResponseHandleUtil.parseResponse(wechatUserService.getWechatUserInfo(wechatUserId), Wechat.class);
} catch (Exception e) {
LOGGER.error("获取微信用户信息失败[wechatUserService.getWechatUserInfo]:" + e.getMessage(), e);
}
return null;
}
}
......@@ -12,7 +12,6 @@ import com.pcloud.resourcecenter.product.dto.ProDto;
import com.pcloud.resourcecenter.product.dto.Product4BookDTO;
import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.resourcecenter.product.dto.ProductLabelDto;
import com.pcloud.resourcecenter.product.dto.ProductTypeDto;
import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO;
import com.pcloud.resourcecenter.product.entity.Product;
import com.pcloud.resourcecenter.product.service.ProductService;
......@@ -21,13 +20,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @描述:商品中间件
......@@ -329,22 +326,4 @@ public class ProductConsr {
LOGGER.info("获取商品id集合对应商品信息【end】 [productService.getProBasesByIds]");
return productDtoMap == null ? new HashMap<>() : productDtoMap;
}
public Map<String, ProductTypeDto> getProType() {
Map<String, ProductTypeDto> productDtoMap = new HashMap<>();
try {
List<ProductTypeDto> productTypeDtos = ResponseHandleUtil.parseListResponse(productService.getProType(), ProductTypeDto.class);
if(CollectionUtils.isEmpty(productTypeDtos)){
return productDtoMap;
}
productDtoMap = productTypeDtos.stream().collect(Collectors.toMap(x->x.getTypeCode(),x->x,(v1,v2)->v2));
} catch (BizException e) {
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
LOGGER.error("获取商品id集合对应商品信息失败[productService.getProBasesByIds]:" + e.getMessage(), e);
throw new ChannelBizException(ChannelBizException.INVOKE_RES_ERROR, "获取商品信息失败~!");
}
return productDtoMap == null ? new HashMap<>() : productDtoMap;
}
}
......@@ -63,8 +63,7 @@
channel_id,
adviser_id,
from_id,
from_name,
type_code,
from_name,
account_setting_id,
create_time,
create_date,
......@@ -78,8 +77,7 @@
#{channelId, jdbcType=BIGINT},
#{adviserId, jdbcType=BIGINT},
#{fromId, jdbcType=BIGINT},
#{fromName, jdbcType=VARCHAR},
#{typeCode, jdbcType=VARCHAR},
#{fromName, jdbcType=VARCHAR},
#{accountSettingId, jdbcType=BIGINT},
now(),
DATE_FORMAT(now(),"%Y-%m-%d"),
......@@ -98,7 +96,6 @@
adviser_id,
from_id,
from_name,
type_code,
account_setting_id,
create_time,
create_date,
......@@ -115,7 +112,6 @@
#{item.adviserId, jdbcType=BIGINT},
#{item.fromId, jdbcType=BIGINT},
#{item.fromName, jdbcType=VARCHAR},
#{item.typeCode, jdbcType=VARCHAR},
#{item.accountSettingId, jdbcType=BIGINT},
now(),
DATE_FORMAT(now(),"%Y-%m-%d"),
......@@ -284,37 +280,4 @@
create_date
</select>
<select id="getReadBookWeekStatis" parameterType="map" resultType="com.pcloud.book.applet.dto.ReadBookDayStatisDTO">
SELECT
COUNT(book_id) readBookCount,
create_date createDate
FROM
applet_record
WHERE
record_type = 7
AND wechat_user_id = #{wechatUserId}
AND create_date BETWEEN #{mondayDate, jdbcType=DATE} AND #{sundayDate, jdbcType=DATE}
GROUP BY
create_date
</select>
<select id="getBooksByWechatUserId" parameterType="map" resultType="com.pcloud.book.applet.dto.AppletRecordBookDTO">
SELECT
book_id bookId,
create_date createDate
FROM
applet_record
WHERE
record_type = 7
AND wechat_user_id = #{wechatUserId}
</select>
<select id="getStatisUserCount" parameterType="map" resultType="long">
SELECT COUNT(DISTINCT wechat_user_id)
FROM
applet_record
WHERE
create_date BETWEEN #{prevMonday, jdbcType=DATE} AND #{prevSunday, jdbcType=DATE}
</select>
</mapper>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.applet.dao.impl.AppletRecordStatisDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.applet.entity.AppletRecordStatis">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="wechat_user_id" property="wechatUserId" jdbcType="BIGINT"/>
<result column="record_type" property="recordType" jdbcType="INTEGER"/>
<result column="source_type" property="sourceType" jdbcType="VARCHAR"/>
<result column="click_count" property="clickCount" jdbcType="BIGINT"/>
<result column="statis_date" property="statisDate" jdbcType="DATE"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<resultMap id="BaseResultDTOMap" type="com.pcloud.book.applet.dto.AppletRecordStatisDTO">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="wechat_user_id" property="wechatUserId" jdbcType="BIGINT"/>
<result column="record_type" property="recordType" jdbcType="INTEGER"/>
<result column="source_type" property="sourceType" jdbcType="VARCHAR"/>
<result column="click_count" property="clickCount" jdbcType="BIGINT"/>
<result column="statis_date" property="statisDate" jdbcType="DATE"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id, wechat_user_id, record_type, source_type, click_count, statis_date, create_time, update_time
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis
WHERE id = #{id}
</select>
<select id="getBookSourceWeekStatis" resultMap="BaseResultDTOMap">
SELECT
<include refid="Base_Column_List"/>
FROM
`applet_record_statis`
WHERE
wechat_user_id = #{wechatUserId}
AND record_type IN (5,6)
AND statis_date = #{statisDate, jdbcType=DATE}
ORDER BY
click_count DESC
LIMIT 5;
</select>
<select id="getBookSourceTotalClickCount" resultType="integer">
SELECT IFNULL(SUM(click_count),0)
FROM
`applet_record_statis`
WHERE
wechat_user_id = #{wechatUserId}
AND statis_date = #{statisDate, jdbcType=DATE}
AND record_type IN (5,6)
</select>
<select id="getBookNewsWeekStatics" resultMap="BaseResultDTOMap">
SELECT
<include refid="Base_Column_List"/>
FROM
`applet_record_statis`
WHERE
wechat_user_id = #{wechatUserId}
AND statis_date = #{statisDate, jdbcType=DATE}
AND record_type = 1
ORDER BY
click_count DESC
LIMIT 5;
</select>
<select id="getBookNewsTotalClickCount" resultType="integer">
SELECT IFNULL(SUM(click_count),0)
FROM
`applet_record_statis`
WHERE
wechat_user_id = #{wechatUserId}
AND statis_date = #{statisDate, jdbcType=DATE}
AND record_type = 1
</select>
<select id="getList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis
</select>
<insert id="addWeekAppletRecordStatis4App">
INSERT INTO applet_record_statis (
wechat_user_id,
record_type,
source_type,
click_count,
statis_date,
create_time,
update_time
)
SELECT ar.wechat_user_id, ar.record_type, ar.type_code, COUNT(1), #{prevMonday}, NOW(), NOW()
FROM `applet_record` ar
INNER JOIN (SELECT DISTINCT wechat_user_id FROM applet_record WHERE create_date BETWEEN #{prevMonday, jdbcType=DATE} AND #{prevSunday, jdbcType=DATE} ORDER BY wechat_user_id LIMIT #{limitStart}, #{limitNumber}) t ON t.wechat_user_id = ar.wechat_user_id
WHERE ar.record_type IN (5,6) AND ar.create_date BETWEEN #{prevMonday, jdbcType=DATE} AND #{prevSunday, jdbcType=DATE}
GROUP BY ar.wechat_user_id, ar.record_type, ar.type_code
</insert>
<insert id="addWeekAppletRecordStatis4News">
INSERT INTO applet_record_statis (
wechat_user_id,
record_type,
source_type,
click_count,
statis_date,
create_time,
update_time
)
SELECT ar.wechat_user_id, record_type, an.source, COUNT(1), #{prevMonday}, NOW(), NOW()
FROM applet_record ar
INNER JOIN (SELECT DISTINCT wechat_user_id FROM applet_record WHERE create_date BETWEEN #{prevMonday, jdbcType=DATE} AND #{prevSunday, jdbcType=DATE} ORDER BY wechat_user_id LIMIT #{limitStart}, #{limitNumber}) t ON t.wechat_user_id = ar.wechat_user_id
INNER JOIN applet_news an ON ar.from_id = an.id
WHERE record_type = 1 AND create_date BETWEEN #{prevMonday, jdbcType=DATE} AND #{prevSunday, jdbcType=DATE}
GROUP BY ar.wechat_user_id, an.source
</insert>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO applet_record_statis(
wechat_user_id,
record_type,
source_type,
click_count,
statis_date,
create_time,
update_time
) VALUES (
#{wechatUserId, jdbcType=BIGINT},
#{recordType, jdbcType=INTEGER},
#{sourceType, jdbcType=VARCHAR},
#{clickCount, jdbcType=BIGINT},
#{statisDate, jdbcType=DATE},
#{createTime, jdbcType=TIMESTAMP},
#{updateTime, jdbcType=TIMESTAMP}
)
</insert>
<insert id="batchInsert">
INSERT INTO applet_record_statis (
wechat_user_id,
record_type,
source_type,
click_count,
statis_date,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.wechatUserId, jdbcType=BIGINT},
#{item.recordType, jdbcType=INTEGER},
#{item.sourceType, jdbcType=VARCHAR},
#{item.clickCount, jdbcType=BIGINT},
#{item.statisDate, jdbcType=DATE},
#{item.createTime, jdbcType=TIMESTAMP},
#{item.updateTime, jdbcType=TIMESTAMP}
)
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
UPDATE applet_record_statis
<set>
<if test="wechatUserId != null">
wechat_user_id = #{wechatUserId},
</if>
<if test="recordType != null">
record_type = #{recordType},
</if>
<if test="sourceType != null and sourceType != ''">
source_type = #{sourceType},
</if>
<if test="clickCount != null">
click_count = #{clickCount},
</if>
<if test="statisDate != null">
statis_date = #{statisDate},
</if>
<if test="createTime != null">
create_time = #{createTime},
</if>
<if test="updateTime != null">
update_time = #{updateTime},
</if>
</set>
WHERE id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteWeekAppletRecordStatis">
DELETE FROM applet_record_statis where statis_date = #{monday}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.applet.dao.impl.AppletRecordStatisReportDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.applet.entity.AppletRecordStatisReport">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="wechat_user_id" property="wechatUserId" jdbcType="BIGINT"/>
<result column="begin_date" property="beginDate" jdbcType="DATE"/>
<result column="end_date" property="endDate" jdbcType="DATE"/>
<result column="score" property="score" jdbcType="DECIMAL"/>
<result column="compare_score" property="compareScore" jdbcType="DECIMAL"/>
<result column="compare_user_ratio" property="compareUserRatio" jdbcType="DECIMAL"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id, wechat_user_id, begin_date, end_date, score, compare_score, compare_user_ratio, create_time
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis_report
WHERE id = #{id}
</select>
<select id="getByWechatUserId" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis_report
WHERE wechat_user_id = #{wechatUserId} AND begin_date = #{beginDate, jdbcType=DATE}
</select>
<select id="getFirstStatisReport" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis_report
WHERE wechat_user_id = #{wechatUserId}
ORDER BY id
LIMIT 1
</select>
<select id="getUserHistoryReport" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis_report
WHERE wechat_user_id = #{wechatUserId} AND begin_date IN
<foreach collection="allMonday" item="item" separator="," open="(" close=")">
#{item, jdbcType=DATE}
</foreach>
</select>
<select id="getList" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM applet_record_statis_report
WHERE
wechat_user_id = #{wechatUserId}
ORDER BY begin_date DESC
</select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO applet_record_statis_report(
wechat_user_id,
begin_date,
end_date,
score,
compare_score,
compare_user_ratio,
create_time,
update_time
) VALUES (
#{wechatUserId, jdbcType=BIGINT},
#{beginDate, jdbcType=DATE},
#{endDate, jdbcType=DATE},
#{score, jdbcType=DECIMAL},
#{compareScore, jdbcType=DECIMAL},
#{compareUserRatio, jdbcType=DECIMAL},
NOW(),
NOW()
)
</insert>
<insert id="insertOrUpdate" keyProperty="id" useGeneratedKeys="true">
INSERT INTO applet_record_statis_report(
wechat_user_id,
begin_date,
end_date,
score,
compare_score,
compare_user_ratio,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.wechatUserId, jdbcType=BIGINT},
#{item.beginDate, jdbcType=DATE},
#{item.endDate, jdbcType=DATE},
#{item.score, jdbcType=DECIMAL},
#{item.compareScore, jdbcType=DECIMAL},
#{item.compareUserRatio, jdbcType=DECIMAL},
NOW(),
NOW()
)
</foreach>
ON DUPLICATE KEY UPDATE
score = VALUES(score),
compare_score = VALUES(compare_score),
compare_user_ratio = VALUES(compare_user_ratio),
update_time = NOW()
</insert>
<insert id="batchInsert">
INSERT INTO applet_record_statis_report (
wechat_user_id,
begin_date,
end_date,
score,
compare_score,
compare_user_ratio,
create_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.wechatUserId, jdbcType=BIGINT},
#{item.beginDate, jdbcType=DATE},
#{item.endDate, jdbcType=DATE},
#{item.score, jdbcType=DECIMAL},
#{item.compareScore, jdbcType=DECIMAL},
#{item.compareUserRatio, jdbcType=DECIMAL},
NOW()
)
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
UPDATE applet_record_statis_report
<set>
<if test="wechatUserId != null">
wechat_user_id = #{wechatUserId},
</if>
<if test="beginDate != null">
begin_date = #{beginDate},
</if>
<if test="endDate != null">
end_date = #{endDate},
</if>
<if test="score != null">
score = #{score},
</if>
<if test="compareScore != null">
compare_score = #{compareScore},
</if>
<if test="compareUserRatio != null">
compare_user_ratio = #{compareUserRatio},
</if>
<if test="createTime != null">
create_time = #{createTime},
</if>
</set>
WHERE id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
DELETE FROM applet_record_statis_report where id = #{id}
</delete>
</mapper>
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