Commit fc235a94 by 朱亚洁

社群书分析

parent b833badf
......@@ -6,4 +6,5 @@
*.classpath
*logs/
*.idea/
*bin/
\ No newline at end of file
*bin/
*download/
\ No newline at end of file
package com.pcloud.book.group.dto;
import com.pcloud.common.dto.BaseDto;
/**
* @描述:社群码下关键词关联的资源
* @作者:zhuyajie
* @创建时间:11:01 2019/9/30
* @版本:1.0
*/
public class BookGroupKeywordResourceDTO extends BaseDto {
/**
* 类型(PRODUCT、APP)
*/
private String serveType;
/**
* 商品或应用id
*/
private Long serveId;
public String getServeType() {
return serveType;
}
public void setServeType(String serveType) {
this.serveType = serveType;
}
public Long getServeId() {
return serveId;
}
public void setServeId(Long serveId) {
this.serveId = serveId;
}
@Override
public String toString() {
return "BookGroupKeywordResourceDTO{" +
"serveType='" + serveType + '\'' +
", serveId=" + serveId +
'}';
}
}
package com.pcloud.book.group.service;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
......@@ -113,4 +114,13 @@ public interface BookGroupService {
@GetMapping("dealBookGroupServerChannel")
void dealBookGroupServerChannel();
@ApiOperation("获取社群书关键词关联的资源(关键词及1v1配置资源)")
@GetMapping("getKeyWordResourceByBookGroup")
ResponseEntity<ResponseDto<List<BookGroupKeywordResourceDTO>>> getKeyWordResourceByBookGroup(
@RequestParam("bookGroupId") Long bookGroupId);
@ApiOperation(value = "查社群码下二维码id", httpMethod = "GET")
@GetMapping("getQrcodeIdsByBookGroupId")
ResponseEntity<ResponseDto<List<Long>>> getQrcodeIdsByBookGroupId(@RequestParam("bookGroupId") Long bookGroupId);
}
......@@ -4,12 +4,14 @@
package com.pcloud.book.consumer.analysisengine;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
import com.pcloud.analysisengine.browse.dto.GroupBrowseStatisticVO;
import com.pcloud.analysisengine.browse.dto.SBookAnalyzeDto;
import com.pcloud.analysisengine.browse.service.BrowseRecordService;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -126,4 +128,15 @@ public class BrowseRecordConsr {
return sBookAnalyzeDtoMap;
}
@ParamLog("获取社群码资源浏览量")
public Map<Long, GroupBrowseStatisticVO> mapGroupBrowseStatistic(List<Long> bookGroupIds, String monthDate) {
Map<Long, GroupBrowseStatisticVO> map = null;
try {
map = ResponseHandleUtil.parseMapResponse(browseRecordService.mapGroupBrowseStatistic(bookGroupIds, monthDate), Long.class, GroupBrowseStatisticVO.class);
} catch (Exception e) {
LOGGER.error("获取社群码资源浏览量失败" + e.getMessage(), e);
}
return map;
}
}
......@@ -5,8 +5,17 @@ import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.facade.tradecenter.dto.*;
import com.pcloud.facade.tradecenter.dto.ClassifyPayDetailDto;
import com.pcloud.facade.tradecenter.dto.GroupIncomeSearchDto;
import com.pcloud.facade.tradecenter.dto.GroupMoneyDto;
import com.pcloud.facade.tradecenter.dto.OrderSearchDto;
import com.pcloud.facade.tradecenter.dto.ProductSaleDetailDto;
import com.pcloud.facade.tradecenter.dto.QrGroupBuyDetailDto;
import com.pcloud.facade.tradecenter.dto.SaleDetailByQrcodeDto;
import com.pcloud.facade.tradecenter.dto.SpeWechatGroupDto;
import com.pcloud.facade.tradecenter.dto.WechatGroupDto;
import com.pcloud.facade.tradecenter.service.OrderFormService;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -15,7 +24,11 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author:lili
......@@ -179,4 +192,19 @@ public class TradeConsr {
return totalSale;
}
@ParamLog("查社群码资源购买情况")
public Map<Long, ProductSaleDetailDto> getSaleInfo4Group(List<Long> bookGroupIds, String month) {
Map<Long, ProductSaleDetailDto> map = new HashMap<>();
try {
OrderSearchDto orderSearchDto = new OrderSearchDto();
orderSearchDto.setBookGroupIds(bookGroupIds);
orderSearchDto.setDate(month);
map = ResponseHandleUtil.parseMapResponse(orderFormService.getSaleInfo4Group(orderSearchDto), Long.class, ProductSaleDetailDto.class);
} catch (Exception e) {
LOGGER.error("查社群码资源购买情况失败" + e.getMessage(), e);
}
return map;
}
}
......@@ -8,6 +8,7 @@ import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
import com.pcloud.wechatgroup.group.service.GroupMemberService;
......@@ -385,6 +386,36 @@ public class WechatGroupConsr {
return map;
}
@ParamLog("获取社群码扫码次数/人数")
public Map<Long, GroupUserCountDTO> getScanCountByGroup(List<Long> bookGroupIds, String monthDate) {
Map<Long, GroupUserCountDTO> map = new HashMap<>();
if (ListUtils.isEmpty(bookGroupIds)){
return map;
}
try {
map = ResponseHandleUtil.parseMapResponse(groupMemberService.getScanCountByGroup(bookGroupIds, monthDate), Long.class, GroupUserCountDTO.class);
} catch (Exception e) {
log.error("获取社群码扫码次数/人数.[getScanCountByGroup]失败" + e.getMessage(), e);
}
return map;
}
@ParamLog("获取社群码累计进群人数")
public Map<Long, GroupUserCountDTO> mapBookGroupJoinUserCount(List<Long> bookGroupIds, String monthDate) {
Map<Long, GroupUserCountDTO> map = new HashMap<>();
if (ListUtils.isEmpty(bookGroupIds)){
return map;
}
try {
map = ResponseHandleUtil.parseMapResponse(groupMemberService.mapBookGroupJoinUserCount(bookGroupIds, monthDate), Long.class, GroupUserCountDTO.class);
} catch (Exception e) {
log.error("获取社群码累计进群人数.[mapBookGroupJoinUserCount]失败" + e.getMessage(), e);
}
return map;
}
@ParamLog("查询链接发送次数")
public Map<String, Integer> getLinkSendCount(List<LinkGroupParamDTO> paramDTOList) {
Map<String, Integer> map = new HashMap<>();
......
......@@ -3,6 +3,7 @@ package com.pcloud.book.group.biz;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.group.dto.AppStatisticsDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.BookGroupStatisticsDTO;
import com.pcloud.book.group.dto.ClassifyKeywordDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
......@@ -16,6 +17,8 @@ import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.vo.BookGroupAnalysisParam;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.group.vo.FriendsVO;
import com.pcloud.book.group.vo.GroupIncomeStaticParamVO;
import com.pcloud.book.group.vo.GroupScanTrendParamVO;
......@@ -294,7 +297,6 @@ public interface BookGroupBiz {
* 根据社群码id获取个人二维码信息
*/
OwnAltQrcodeInfoDTO getOwnAltQrcodeInfoDTOByBookGroupId(Long wechatUserId, Long bookGroupId);
/**
* 根据分类id获取个人二维码信息
*/
......@@ -402,7 +404,6 @@ public interface BookGroupBiz {
* @return
*/
Map<String, Integer> getBookGroupFriendsCountByDay(Long bookGroupId, String startDate, String endDate);
/**
* 好友数据统计列表
* @param bookGroupId
......@@ -459,4 +460,26 @@ public interface BookGroupBiz {
* 将之前的配置资源取的社群码运营更新为应用本身的运营
*/
void dealBookGroupServerChannel();
/**
* 社群书分析
* @param bookGroupAnalysisParam
* @return
*/
PageBeanNew<BookGroupAnalysisVO> listPageBookGroupAnalysis(BookGroupAnalysisParam bookGroupAnalysisParam);
/**
* 社群书分析--导出
* @param bookGroupAnalysisParam
*/
void exportBookGroupAnalysis(BookGroupAnalysisParam bookGroupAnalysisParam, Long partyId);
/**
* 社群书关键词关联的资源(关键词及1v1配置资源)
*/
List<BookGroupKeywordResourceDTO> getKeyWordResourceByBookGroup(Long bookGroupId);
/**
* 社群书下二维码
*/
List<Long> getQrcodeIdsByBookGroupId(Long bookGroupId);
}
......@@ -15,6 +15,7 @@ import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.set.BookSet;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.message.MessageConsr;
import com.pcloud.book.consumer.raystask.MainLineConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.consumer.settlement.BookConsr;
......@@ -37,6 +38,7 @@ import com.pcloud.book.group.dao.TempletRelevanceDao;
import com.pcloud.book.group.dao.WeixinQrcodeDao;
import com.pcloud.book.group.dto.AppStatisticsDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.BookGroupStatisticsDTO;
import com.pcloud.book.group.dto.ClassifyDTO;
......@@ -61,7 +63,10 @@ import com.pcloud.book.group.entity.TempletRelevance;
import com.pcloud.book.group.enums.CipherTypeEnum;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.enums.LargTempletEnum;
import com.pcloud.book.group.set.GroupSet;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.BookGroupAnalysisParam;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.group.vo.ClassifyAndGroupCountVO;
import com.pcloud.book.group.vo.ClassifyQrcodeVO;
import com.pcloud.book.group.vo.FriendsVO;
......@@ -84,10 +89,8 @@ import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.biz.MessageBiz;
import com.pcloud.common.core.constant.ProductTypeConstant;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.core.dto.SendNotifyDto;
import com.pcloud.common.core.enums.NotifyOriginTypeEnum;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.dto.StoreFlowInfoDto;
......@@ -206,8 +209,6 @@ public class BookGroupBizImpl implements BookGroupBiz {
@Autowired
private MainLineConsr mainLineConsr;
@Autowired
private MessageBiz messageBiz;
@Autowired
private BookGroupClassifyDao bookGroupClassifyDao;
@Autowired
private BookKeywordDao bookKeywordDao;
......@@ -237,6 +238,11 @@ public class BookGroupBizImpl implements BookGroupBiz {
private GroupQrcodeDao groupQrcodeDao;
@Autowired
private BookGroupCipherUserDao bookGroupCipherUserDao;
@Autowired
private GroupSet groupSet;
@Autowired
private MessageConsr messageConsr;
@Override
......@@ -1160,21 +1166,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
JSONObject content = new JSONObject();
content.put("commitTime", DateUtils.formatDate(new Date()));
content.put("type", "社群码导出");
SendNotifyDto sendNotifyDto = new SendNotifyDto();
sendNotifyDto.setCreatedTime(new Date());
sendNotifyDto.setFromId(adviserId);
sendNotifyDto.setToId(adviserId);
sendNotifyDto.setNotifyContent(content.toJSONString());
sendNotifyDto.setSystemCode(SystemCode.adviser.code);
sendNotifyDto.setTypeCode("qrcode_download");
sendNotifyDto.setResourceId(zipUrl);
sendNotifyDto.setFileName(fileName);
sendNotifyDto.setOriginType(NotifyOriginTypeEnum.BOOK_GROUP.value);
try {
messageBiz.sendLetter(sendNotifyDto);
} catch (Exception e) {
LOGGER.error("【站内信(消)】发送站内信.[sendLetter]:" + e.getMessage(), e);
}
messageConsr.sendLetter(adviserId, adviserId, content.toJSONString(), SystemCode.adviser.code, "qrcode_download", zipUrl, fileName, NotifyOriginTypeEnum.BOOK_GROUP.value, null);
}
});
}
......@@ -2404,5 +2396,124 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
return s;
}
@Override
public PageBeanNew<BookGroupAnalysisVO> listPageBookGroupAnalysis(BookGroupAnalysisParam bookGroupAnalysisParam) {
List<Long> adviserIdList = new ArrayList<>();
if (!ListUtils.isEmpty(bookGroupAnalysisParam.getAdviserIds())) {
adviserIdList.addAll(bookGroupAnalysisParam.getAdviserIds());
} else {
if (!ListUtils.isEmpty(bookGroupAnalysisParam.getAgentIds())) {
List<Long> agentIds = bookGroupAnalysisParam.getAgentIds();
agentIds.forEach(agentId -> {
List<Long> adviserIds = adviserConsr.getByAgentId(agentId);
if (!ListUtils.isEmpty(adviserIds)) {
adviserIdList.addAll(adviserIds);
}
});
}
}
Map<String, Object> paramMap = new HashMap<>();
if (!ListUtils.isEmpty(bookGroupAnalysisParam.getBookIds())){
paramMap.put("bookIds", bookGroupAnalysisParam.getBookIds());
}
if (!ListUtils.isEmpty(adviserIdList)) {
paramMap.put("adviserIds", adviserIdList);
}
paramMap.put("isFundSupport", bookGroupAnalysisParam.getIsFundSupport());
paramMap.put("isCopyright", bookGroupAnalysisParam.getIsCopyright());
PageBeanNew<BookGroupAnalysisVO> pageBeanNew = bookGroupDao.listPageNew(
new PageParam(bookGroupAnalysisParam.getCurrentPage(), bookGroupAnalysisParam.getNumPerPage()), paramMap, "listPageBookGroupAnalysis");
if (null == pageBeanNew || ListUtils.isEmpty(pageBeanNew.getRecordList())) {
return new PageBeanNew<>(bookGroupAnalysisParam.getCurrentPage(), bookGroupAnalysisParam.getNumPerPage(), 0, new ArrayList<>());
}
String monthDate = bookGroupAnalysisParam.getMonthDate();
//设置书刊分类名称
groupSet.setTempletName(pageBeanNew.getRecordList());
//设置出版运营编辑名称
groupSet.setPartyInfo(pageBeanNew.getRecordList());
//设置社群码扫码量
groupSet.setGroupScanCount(pageBeanNew.getRecordList(), monthDate);
//设置微信群数据(分类数,群数,群人数,好友数,资源数)
groupSet.setGroupStatistic(pageBeanNew.getRecordList(), monthDate);
//设置资源数据(浏览量,读者量,销售额,支付率,客单价)
groupSet.setResourceStatistic(pageBeanNew.getRecordList(), monthDate);
return pageBeanNew;
}
@Override
public void exportBookGroupAnalysis(BookGroupAnalysisParam bookGroupAnalysisParam, Long partyId) {
ThreadPoolUtils.EXPORT_THREAD_POOL.execute(() -> {
List<Long> adviserIdList = new ArrayList<>();
if (!ListUtils.isEmpty(bookGroupAnalysisParam.getAdviserIds())) {
adviserIdList.addAll(bookGroupAnalysisParam.getAdviserIds());
} else {
if (!ListUtils.isEmpty(bookGroupAnalysisParam.getAgentIds())) {
List<Long> agentIds = bookGroupAnalysisParam.getAgentIds();
agentIds.forEach(agentId -> {
List<Long> adviserIds = adviserConsr.getByAgentId(agentId);
if (!ListUtils.isEmpty(adviserIds)) {
adviserIdList.addAll(adviserIds);
}
});
}
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bookIds", bookGroupAnalysisParam.getBookIds());
if (!ListUtils.isEmpty(adviserIdList)) {
paramMap.put("adviserIds", adviserIdList);
}
paramMap.put("isFundSupport", bookGroupAnalysisParam.getIsFundSupport());
paramMap.put("isCopyright", bookGroupAnalysisParam.getIsCopyright());
List<BookGroupAnalysisVO> list = bookGroupDao.listPageBookGroupAnalysis(paramMap);
if (ListUtils.isEmpty(list)) {
return;
}
String monthDate = bookGroupAnalysisParam.getMonthDate();
//设置书刊分类名称
groupSet.setTempletName(list);
//设置出版运营编辑名称
groupSet.setPartyInfo(list);
//设置社群码扫码量
groupSet.setGroupScanCount(list, monthDate);
//设置微信群数据(分类数,群数,群人数,好友数,资源数)
groupSet.setGroupStatistic(list, monthDate);
//设置资源数据(浏览量,读者量,销售额,支付率,客单价)
groupSet.setResourceStatistic(list, monthDate);
Boolean isSuccess = true;
String fileUrl = "";
String fileName = "社群书分析";
if (!StringUtil.isEmpty(monthDate)) {
String[] dateStr = monthDate.split("-");
fileName = dateStr[0] + "年" + Integer.parseInt(dateStr[1]) + "月" + fileName;
}
try {
fileUrl = groupSet.fillBookGroupExcel(list, fileName);
} catch (Exception e) {
isSuccess = false;
LOGGER.error("导出文件失败" + e.getMessage(), e);
}
if (isSuccess) {
JSONObject content = new JSONObject();
content.put("commitTime", DateUtils.formatDate(new Date()));
content.put("type", "社群书分析导出");
messageConsr.sendLetter(partyId, partyId, content.toJSONString(), SystemCode.pcloud.code, "book_download", fileUrl, fileName);
}
});
}
@Override
public List<BookGroupKeywordResourceDTO> getKeyWordResourceByBookGroup(Long bookGroupId) {
List<BookGroupKeywordResourceDTO> list = bookKeywordDao.getBookGroupResourceList(bookGroupId);
return list;
}
@Override
public List<Long> getQrcodeIdsByBookGroupId(Long bookGroupId) {
List<Long> ids=groupQrcodeDao.getIdsByBookGroupId(bookGroupId);
return ids;
}
}
......@@ -47,4 +47,5 @@ public interface AppClickRecordDao extends BaseDao<AppClickRecord> {
* 获取资源点击数
*/
List<ResourcesStatisticVO> getClickStatistics(Long bookGroupId,Long classifyId,Long qrcodeId,String type);
}
......@@ -30,4 +30,10 @@ public interface BookGroupCipherUserDao extends BaseDao<BookGroupCipherUser> {
* @return
*/
List<DayCountDTO> getBookGroupFriendsCountByDay(Long bookGroupId, String startTime, String endTime);
/**
* 根据时间查社群码好友数量
* @param bookGroupId
* @return
*/
public Integer getFriendsCountByBookGroupByTime(Long bookGroupId, String startTime, String endTime);
}
package com.pcloud.book.group.dao;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.dto.BookClassifyDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.ClassifyDTO;
import com.pcloud.book.group.dto.ClassifyKeywordDTO;
import com.pcloud.book.group.dto.ClickClassifyDTO;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.group.dto.GroupNameAndMaxSeqDTO;
import com.pcloud.book.group.dto.GroupQrcodeBaseDTO;
import com.pcloud.book.group.dto.ProAssocGroupAndUserNumberDTO;
import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.vo.BookGroupQrcodeStatisticVO;
import com.pcloud.book.group.vo.ClassifyNameVO;
......@@ -263,5 +271,6 @@ public interface BookGroupClassifyDao extends BaseDao<BookGroupClassify> {
List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId);
List<BookGroupClassify> getListByBookGroupId(Long bookGroupId);
public List<BookGroupClassify> getListByBookGroupId(Long bookGroupId);
}
......@@ -7,6 +7,7 @@ import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.common.core.dao.BaseDao;
/**
......@@ -196,4 +197,11 @@ public interface BookGroupDao extends BaseDao<BookGroup> {
* 更新入群方式
*/
void updateJoinGroupType(Long id, Integer joinGroupType);
/**
* 社群书分析
* @param paramMap
* @return
*/
List<BookGroupAnalysisVO> listPageBookGroupAnalysis(Map<String, Object> paramMap);
}
......@@ -266,4 +266,11 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
List<GroupQrcode> getListByBookGroupIds(List<Long> bookGroupIds);
Map<Long, GroupQrcodeInfo4Advertising> getWechatGroupInfoMap(List<Long> qrcodeIds);
/**
* 根据社群书id查群ids
* @param bookGroupId
* @return
*/
List<Long> getIdsByBookGroupId(Long bookGroupId);
}
......@@ -9,6 +9,7 @@ import com.pcloud.book.group.vo.GroupScanTrendVO;
import com.pcloud.book.group.vo.ResourceClickVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
......@@ -79,4 +80,5 @@ public class AppClickRecordDaoImpl extends BaseDaoImpl<AppClickRecord> implement
map.put("type", type);
return this.getSqlSession().selectList(this.getStatement("getClickStatistics"), map);
}
}
......@@ -36,4 +36,13 @@ public class BookGroupCipherUserDaoImpl extends BaseDaoImpl<BookGroupCipherUser>
map.put("endTime", endTime);
return getSessionTemplate().selectList(getStatement("getBookGroupFriendsCountByDay"), map);
}
@Override
public Integer getFriendsCountByBookGroupByTime(Long bookGroupId, String startTime, String endTime) {
Map<String, Object> map = new HashMap<>();
map.put("bookGroupId", bookGroupId);
map.put("startTime", startTime);
map.put("endTime", endTime);
return getSessionTemplate().selectOne(getStatement("getFriendsCountByBookGroupByTime"), map);
}
}
package com.pcloud.book.group.dao.impl;
import com.pcloud.book.group.dao.BookGroupClassifyDao;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.dto.BookClassifyDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.ClassifyDTO;
import com.pcloud.book.group.dto.ClassifyKeywordDTO;
import com.pcloud.book.group.dto.ClickClassifyDTO;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.group.dto.GroupNameAndMaxSeqDTO;
import com.pcloud.book.group.dto.GroupQrcodeBaseDTO;
import com.pcloud.book.group.dto.ProAssocGroupAndUserNumberDTO;
import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.vo.BookGroupQrcodeStatisticVO;
import com.pcloud.book.group.vo.ClassifyNameVO;
......@@ -253,4 +261,5 @@ public class BookGroupClassifyDaoImpl extends BaseDaoImpl<BookGroupClassify> imp
public List<BookGroupClassify> getListByBookGroupId(Long bookGroupId) {
return this.getSqlSession().selectList(this.getStatement("getListByBookGroupId"), bookGroupId);
}
}
......@@ -5,6 +5,7 @@ import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository;
......@@ -207,4 +208,9 @@ public class BookGroupDaoImpl extends BaseDaoImpl<BookGroup> implements BookGrou
paramMap.put("joinGroupType", joinGroupType);
super.getSqlSession().update(getStatement("updateJoinGroupType"), paramMap);
}
@Override
public List<BookGroupAnalysisVO> listPageBookGroupAnalysis(Map<String, Object> paramMap) {
return getSessionTemplate().selectList(getStatement("listPageBookGroupAnalysis"), paramMap);
}
}
......@@ -273,4 +273,8 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou
return getSessionTemplate().selectList(getStatement("listPageGroup4Brand"), map);
}
@Override
public List<Long> getIdsByBookGroupId(Long bookGroupId) {
return this.getSqlSession().selectList(this.getStatement("getIdsByBookGroupId"), bookGroupId);
}
}
......@@ -13,6 +13,17 @@ import com.pcloud.book.group.vo.UpdateRankTypeVO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean;
import com.pcloud.book.group.vo.BookGroupAnalysisParam;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.group.vo.GroupIncomeStaticParamVO;
import com.pcloud.book.group.vo.GroupScanTrendParamVO;
import com.pcloud.book.group.vo.GroupScanTrendVO;
import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.UpdateRankTypeVO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException;
......@@ -33,6 +44,8 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
/**
* Description 社群书群二维码接口
......@@ -296,7 +309,7 @@ public interface BookGroupFacade {
@RequestParam("bookGroupId") Long bookGroupId
) throws BizException, PermissionException, JsonParseException;
@ApiOperation("根据分类id获取个人二维码")
@ApiOperation("根据社群书id获取个人二维码")
@GetMapping("getOwnAltQrcodeInfoDTOByBookGroupId")
ResponseDto<?> getOwnAltQrcodeInfoDTOByBookGroupId(
@CookieValue("userInfo") String userInfo,
......@@ -431,4 +444,15 @@ public interface BookGroupFacade {
ResponseDto<?> getBookGroupCipher(
@RequestHeader("token") String token
) throws BizException, PermissionException, JsonParseException;
@ApiOperation(value = "平台端-社群书分析", httpMethod = "POST")
@PostMapping("listPageBookGroupAnalysis")
public ResponseDto<PageBeanNew<BookGroupAnalysisVO>> listPageBookGroupAnalysis(
@RequestHeader("token") String token, @RequestBody @ApiParam BookGroupAnalysisParam bookGroupAnalysisParam) throws PermissionException;
@ApiOperation(value = "平台端-社群书分析-异步导出", httpMethod = "POST")
@PostMapping("exportBookGroupAnalysis")
public ResponseDto<?>exportBookGroupAnalysis(
@RequestHeader("token") String token, @RequestBody @ApiParam BookGroupAnalysisParam bookGroupAnalysisParam) throws PermissionException;
}
......@@ -18,6 +18,17 @@ import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.TotalRescourceDataVO;
import com.pcloud.book.group.vo.UpdateRankTypeVO;
import com.pcloud.book.group.vo.WxGroupStatisticVO;
import com.pcloud.book.group.vo.BookGroupAnalysisParam;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.group.vo.GroupIncomeStaticParamVO;
import com.pcloud.book.group.vo.GroupScanTrendParamVO;
import com.pcloud.book.group.vo.GroupScanTrendVO;
import com.pcloud.book.group.vo.GroupStatisticVO;
import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO;
import com.pcloud.book.group.vo.ResourcesStatisticVO;
import com.pcloud.book.group.vo.TotalRescourceDataVO;
import com.pcloud.book.group.vo.UpdateRankTypeVO;
import com.pcloud.book.group.vo.WxGroupStatisticVO;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean;
......@@ -28,6 +39,8 @@ import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.message.enums.IsSystem;
import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
......@@ -45,6 +58,7 @@ import java.util.List;
import java.util.Map;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
/**
* Description 社群书群二维码接口实现类
......@@ -544,7 +558,6 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
Map<String, String> resultMap = bookGroupBiz.exportRescourceIncomeData(bookGroupId, adviserId);
return new ResponseDto<>(resultMap);
}
@Override
......@@ -615,4 +628,32 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
return new ResponseDto<>(bookGroupBiz.getBookGroupCipher());
}
@Override
@PostMapping("listPageBookGroupAnalysis")
public ResponseDto<PageBeanNew<BookGroupAnalysisVO>> listPageBookGroupAnalysis(
@RequestHeader("token") String token, @RequestBody @ApiParam BookGroupAnalysisParam bookGroupAnalysisParam) throws PermissionException {
SessionUtil.getToken4Redis(token);
if (null == bookGroupAnalysisParam) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数为空");
}
if (null == bookGroupAnalysisParam.getCurrentPage() || null == bookGroupAnalysisParam.getNumPerPage()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少分页参数");
}
PageBeanNew<BookGroupAnalysisVO> pageBeanNew = bookGroupBiz.listPageBookGroupAnalysis(bookGroupAnalysisParam);
return new ResponseDto<>(pageBeanNew);
}
@Override
@PostMapping("exportBookGroupAnalysis")
public ResponseDto<?> exportBookGroupAnalysis(
@RequestHeader("token") String token, @RequestBody @ApiParam BookGroupAnalysisParam bookGroupAnalysisParam) throws PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
String isSystem = (String) map.get(SessionUtil.IS_SYSTEM);
Long partyId = (Long) map.get(SessionUtil.PARTY_ID);
if (IsSystem.NOT_SYSTEM.code.equals(isSystem)) {
partyId = (Long) map.get(SessionUtil.MEMBER_ID);
}
bookGroupBiz.exportBookGroupAnalysis(bookGroupAnalysisParam, partyId);
return new ResponseDto<>();
}
}
......@@ -2,10 +2,10 @@ package com.pcloud.book.group.service.impl;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QueryByBookAdviserDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import com.pcloud.book.group.service.BookGroupService;
......@@ -191,4 +191,18 @@ public class BookGroupServiceImpl implements BookGroupService {
}
@Override
@GetMapping("getKeyWordResourceByBookGroup")
public ResponseEntity<ResponseDto<List<BookGroupKeywordResourceDTO>>> getKeyWordResourceByBookGroup(
@RequestParam("bookGroupId") Long bookGroupId) {
List<BookGroupKeywordResourceDTO> list = bookGroupBiz.getKeyWordResourceByBookGroup(bookGroupId);
return ResponseHandleUtil.toResponse(list);
}
@Override
@GetMapping("getQrcodeIdsByBookGroupId")
public ResponseEntity<ResponseDto<List<Long>>> getQrcodeIdsByBookGroupId(@RequestParam("bookGroupId") Long bookGroupId) {
List<Long> qrcodeIds = bookGroupBiz.getQrcodeIdsByBookGroupId(bookGroupId);
return ResponseHandleUtil.toResponse(qrcodeIds);
}
}
package com.pcloud.book.group.set;
import com.pcloud.analysisengine.browse.dto.GroupBrowseStatisticVO;
import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.app.AssistTempletConsr;
import com.pcloud.book.consumer.common.ExportConsr;
import com.pcloud.book.consumer.trade.TradeConsr;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.dao.BookGroupCipherUserDao;
import com.pcloud.book.group.dao.BookGroupClassifyDao;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.GroupTopicDTO;
import com.pcloud.book.group.vo.BookGroupAnalysisVO;
import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.dto.KeywordResourceDTO;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.MQTopicProducer;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.facade.tradecenter.dto.ProductSaleDetailDto;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @描述:
* @作者:zhuyajie
......@@ -21,6 +53,26 @@ public class GroupSet {
@Autowired
private AmqpTemplate amqpTemplate;
@Autowired
private AssistTempletConsr assistTempletConsr;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private ChannelConsr channelConsr;
@Autowired
private WechatGroupConsr wechatGroupConsr;
@Autowired
private BookGroupClassifyDao bookGroupClassifyDao;
@Autowired
private BookKeywordDao bookKeywordDao;
@Autowired
private ExportConsr exportConsr;
@Autowired
private TradeConsr tradeConsr;
@Autowired
private BookGroupCipherUserDao bookGroupCipherUserDao;
@Autowired
private BrowseRecordConsr browseRecordConsr;
/**
* 群分类删除topic
......@@ -37,4 +89,236 @@ public class GroupSet {
}
}
/**
* 设置书刊分类名称
* @param recordList
*/
@ParamLog("设置书刊分类名称")
public void setTempletName(List<BookGroupAnalysisVO> recordList) {
if (ListUtils.isEmpty(recordList)) {
return;
}
List<Long> templetIds = new ArrayList<>();
recordList.forEach(bookGroupAnalysisVO -> {
if (Objects.nonNull(bookGroupAnalysisVO.getTempletId())) {
templetIds.add(bookGroupAnalysisVO.getTempletId());
}
if (Objects.nonNull(bookGroupAnalysisVO.getSecondTempletId())) {
templetIds.add(bookGroupAnalysisVO.getSecondTempletId());
}
});
final Map<Long, AssistTempletDTO> assistTempletIds = assistTempletConsr.mapByIds(templetIds);
if (MapUtils.isEmpty(assistTempletIds)) {
return;
}
recordList.forEach(analysisVO -> {
Long secondTempletId = analysisVO.getSecondTempletId();
Long templetId = analysisVO.getTempletId();
if (Objects.nonNull(secondTempletId)) {
AssistTempletDTO templetDTO = assistTempletIds.get(secondTempletId);
analysisVO.setSecondTempletName(Optional.ofNullable(templetDTO).map(AssistTempletDTO::getTempletName).orElse(null));
}
if (Objects.nonNull(templetId)) {
AssistTempletDTO templetDTO = assistTempletIds.get(templetId);
analysisVO.setTempletName(Optional.ofNullable(templetDTO).map(AssistTempletDTO::getTempletName).orElse(null));
}
});
}
/**
* 设置出版运营编辑名称
* @param recordList
*/
@ParamLog("设置出版运营编辑名称")
public void setPartyInfo(List<BookGroupAnalysisVO> recordList) {
if (ListUtils.isEmpty(recordList)) {
return;
}
List<Long> adviserIds = recordList.stream().filter(s -> s.getAdviserId() != null).map(BookGroupAnalysisVO::getAdviserId).distinct().collect(Collectors.toList());
List<Long> channelIds = recordList.stream().filter(s -> s.getChannelId() != null).map(BookGroupAnalysisVO::getChannelId).distinct().collect(Collectors.toList());
Map<Long, AdviserBaseInfoDto> adviserBaseInfoDtoMap = adviserConsr.getAdviserId2AdviserInfoDtoMap(adviserIds);
Map<Long, String> channelNameMap = channelConsr.getNamesByIdList(channelIds);
recordList.forEach(bookGroupAnalysisVO -> {
if (!MapUtils.isEmpty(adviserBaseInfoDtoMap) && adviserBaseInfoDtoMap.containsKey(bookGroupAnalysisVO.getAdviserId())) {
AdviserBaseInfoDto adviserBaseInfoDto = adviserBaseInfoDtoMap.get(bookGroupAnalysisVO.getAdviserId());
if (null != adviserBaseInfoDto) {
bookGroupAnalysisVO.setAdviserName(adviserBaseInfoDto.getPartyName());
bookGroupAnalysisVO.setAgentId(adviserBaseInfoDto.getAgentId());
bookGroupAnalysisVO.setAgentName(adviserBaseInfoDto.getAgentName());
}
}
if (!MapUtils.isEmpty(channelNameMap) && channelNameMap.containsKey(bookGroupAnalysisVO.getChannelId())) {
bookGroupAnalysisVO.setChannelName(channelNameMap.get(bookGroupAnalysisVO.getChannelId()));
}
});
}
/**
* 设置社群码扫码量
* @param recordList
* @param monthDate
*/
@ParamLog("设置社群码扫码量")
public void setGroupScanCount(List<BookGroupAnalysisVO> recordList, String monthDate) {
if (ListUtils.isEmpty(recordList)) {
return;
}
List<Long> bookGroupIds = recordList.stream().filter(s -> s.getBookGroupId() != null).map(BookGroupAnalysisVO::getBookGroupId).distinct().collect(Collectors.toList());
Map<Long, GroupUserCountDTO> userCountDTOMap = wechatGroupConsr.getScanCountByGroup(bookGroupIds, monthDate);
if (MapUtils.isEmpty(userCountDTOMap)) {
return;
}
recordList.forEach(bookGroupAnalysisVO -> {
GroupUserCountDTO groupUserCountDTO = userCountDTOMap.get(bookGroupAnalysisVO.getBookGroupId());
if (null != groupUserCountDTO) {
bookGroupAnalysisVO.setScanCount(groupUserCountDTO.getCount());
bookGroupAnalysisVO.setScanUserCount(groupUserCountDTO.getUserCount());
}
});
}
/**
* 设置微信群数据(分类数,群数,群人数,累计进群人数,好友数,资源数)
* @param recordList
* @param monthDate
*/
public void setGroupStatistic(List<BookGroupAnalysisVO> recordList, String monthDate) {
if (ListUtils.isEmpty(recordList)) {
return;
}
List<Long> bookGroupIds = recordList.stream().filter(s -> s.getBookGroupId() != null).map(BookGroupAnalysisVO::getBookGroupId).distinct().collect(Collectors.toList());
if (ListUtils.isEmpty(bookGroupIds)) {
return;
}
String startTime = null;
String endTime = null;
if (!StringUtil.isEmpty(monthDate)) {
startTime = monthDate + "-01";
endTime = DateUtils.formatDate(DateUtils.getMonthEnd(DateUtils.getDateByStr(startTime)), DateUtils.DATE_FORMAT_DATEONLY);
}
//分类数,群数,群人数
Map<Long, BookGroupStatisticDTO> bookGroupStatisticDTOMap = bookGroupClassifyDao.getBookGroupStatistic(bookGroupIds);
//社群码下资源数量(关键词及1v1配置资源)
Map<Long, KeywordResourceDTO> keywordResourceDTOMap = bookKeywordDao.getBookGroupResourceCount(bookGroupIds);
//累计进群人数-按月
Map<Long, GroupUserCountDTO> userCountDTOMap = wechatGroupConsr.mapBookGroupJoinUserCount(bookGroupIds, monthDate);
for (BookGroupAnalysisVO bookGroupAnalysisVO : recordList) {
if (!MapUtils.isEmpty(bookGroupStatisticDTOMap)) {
BookGroupStatisticDTO bookGroupStatisticDTO = bookGroupStatisticDTOMap.get(bookGroupAnalysisVO.getBookGroupId());
if (null != bookGroupStatisticDTO) {
bookGroupAnalysisVO.setClassifyCount(bookGroupStatisticDTO.getClassifyCount());
bookGroupAnalysisVO.setGroupCount(bookGroupStatisticDTO.getGroupNumber());
bookGroupAnalysisVO.setUserNumber(bookGroupStatisticDTO.getUserNumber());
}
}
if (!MapUtils.isEmpty(keywordResourceDTOMap)) {
KeywordResourceDTO resourceDTO = keywordResourceDTOMap.get(bookGroupAnalysisVO.getBookGroupId());
if (null != resourceDTO) {
bookGroupAnalysisVO.setResourceCount(resourceDTO.getCount());
}
}
if (!MapUtils.isEmpty(userCountDTOMap)) {
GroupUserCountDTO userCountDTO = userCountDTOMap.get(bookGroupAnalysisVO.getBookGroupId());
bookGroupAnalysisVO.setJoinUserCount(null == userCountDTO ? 0 : userCountDTO.getUserCount());
}
//好友数量-按月
Integer friendsCount = bookGroupCipherUserDao.getFriendsCountByBookGroupByTime(bookGroupAnalysisVO.getBookGroupId(), startTime, endTime);
bookGroupAnalysisVO.setFriendsCount(friendsCount);
}
}
/**
* 设置资源数据(浏览量,读者量,销售额,支付率,客单价)
* @param recordList
* @param monthDate
*/
public void setResourceStatistic(List<BookGroupAnalysisVO> recordList, String monthDate) {
List<Long> bookGroupIds = recordList.stream().filter(s -> s.getBookGroupId() != null).map(BookGroupAnalysisVO::getBookGroupId).distinct().collect(Collectors.toList());
if (ListUtils.isEmpty(bookGroupIds)) {
return;
}
Map<Long, GroupBrowseStatisticVO> browseStatisticVOMap = browseRecordConsr.mapGroupBrowseStatistic(bookGroupIds,monthDate);
Map<Long, ProductSaleDetailDto> saleDetailDtoMap = tradeConsr.getSaleInfo4Group(bookGroupIds, monthDate);
for (BookGroupAnalysisVO bookGroupAnalysisVO : recordList) {
Integer browserCount = 0;//读者量
Long payCount = 0L;//购买人数
//浏览量,读者量
if (!MapUtils.isEmpty(browseStatisticVOMap)) {
GroupBrowseStatisticVO statisticVO = browseStatisticVOMap.get(bookGroupAnalysisVO.getBookGroupId());
bookGroupAnalysisVO.setBrowseCount(null == statisticVO ? 0 : statisticVO.getBrowseCount());
browserCount = null == statisticVO ? 0 : statisticVO.getBrowserCount();
bookGroupAnalysisVO.setBrowserCount(browserCount);
}
//销售额,客单价
if (!MapUtils.isEmpty(saleDetailDtoMap)) {
ProductSaleDetailDto saleDetailDto = saleDetailDtoMap.get(bookGroupAnalysisVO.getBookGroupId());
payCount = (null == saleDetailDto || null == saleDetailDto.getPayCount()) ? 0L : saleDetailDto.getPayCount();
//销售额
BigDecimal saleMoney = (null == saleDetailDto || null == saleDetailDto.getSaleMoney()) ? BigDecimal.ZERO : BigDecimal.valueOf(saleDetailDto.getSaleMoney());
//购买次数
Long saleCount = (null == saleDetailDto || null == saleDetailDto.getSaleCount()) ? 0L : saleDetailDto.getSaleCount();
BigDecimal avgSaleAmount = saleCount.equals(0L) ? BigDecimal.ZERO : new BigDecimal(saleMoney.doubleValue() / saleCount).
setScale(2, BigDecimal.ROUND_HALF_UP);
bookGroupAnalysisVO.setSaleAmount(saleMoney);
bookGroupAnalysisVO.setAvgSaleAmount(avgSaleAmount);
}
//支付率(支付人数/读者量)
bookGroupAnalysisVO.setPayRate(browserCount.equals(0) ? BigDecimal.ZERO : new BigDecimal(payCount.doubleValue() / browserCount).
setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
}
}
/**
* 社群书分析-导出表格
* @param list
* @param fileName
* @return
*/
public String fillBookGroupExcel(List<BookGroupAnalysisVO> list, String fileName) {
String[] rowsName = {"序号", "图书名称", "ISBN", "书刊分类", "创建时间", "出版社名称", "运营平台", "编辑名称", "是否基金书", "扫码次数", "扫码人数",
"获取资源方式", "群分类数", "添加客服好友数", "微信群数", "累计进群人数", "资源数", "浏览量", "读者量", "支付率", "销售额", "客单价", "是否版权保护", "社群码"};
List<Object[]> dataList = new ArrayList<>();
Object[] objs;
for (int i = 0; i < list.size(); i++) {
BookGroupAnalysisVO analysisVO = list.get(i);
objs = new Object[rowsName.length];
objs[0] = i + 1;
objs[1] = analysisVO.getBookName();
objs[2] = analysisVO.getIsbn();
String templetName = "";
if (!StringUtil.isEmpty(analysisVO.getTempletName())) {
templetName = analysisVO.getTempletName();
if (!StringUtil.isEmpty(analysisVO.getSecondTempletName())) {
templetName = templetName + "-" + analysisVO.getSecondTempletName();
}
} else if (!StringUtil.isEmpty(analysisVO.getSecondTempletName())) {
templetName = analysisVO.getSecondTempletName();
}
objs[3] = templetName;
objs[4] = DateUtils.formatDate(analysisVO.getCreateTime(), DateUtils.DATE_FORMAT_DATETIME);
objs[5] = analysisVO.getAgentName();
objs[6] = analysisVO.getChannelName();
objs[7] = analysisVO.getAdviserName();
objs[8] = analysisVO.getIsFundSupport() ? "是" : "否";
objs[9] = analysisVO.getScanCount() == null ? 0 : analysisVO.getScanCount();
objs[10] = analysisVO.getScanUserCount() == null ? 0 : analysisVO.getScanUserCount();
objs[11] = analysisVO.getJoinGroupType() == 2 ? "1V1客服机器人" : "普通微信群";
objs[12] = analysisVO.getClassifyCount() == null ? 0 : analysisVO.getClassifyCount();
objs[13] = analysisVO.getFriendsCount() == null ? 0 : analysisVO.getFriendsCount();
objs[14] = analysisVO.getGroupCount() == null ? 0 : analysisVO.getGroupCount();
objs[15] = analysisVO.getJoinUserCount() == null ? 0 : analysisVO.getJoinUserCount();
objs[16] = analysisVO.getResourceCount() == null ? 0 : analysisVO.getResourceCount();
objs[17] = analysisVO.getBrowseCount() == null ? 0 : analysisVO.getBrowseCount();
objs[18] = analysisVO.getBrowserCount() == null ? 0 : analysisVO.getBrowserCount();
objs[19] = analysisVO.getPayRate() + "%";
objs[20] = analysisVO.getSaleAmount();
objs[21] = analysisVO.getAvgSaleAmount();
objs[22] = analysisVO.getIsCopyright() ? "是" : "否";
objs[23] = analysisVO.getGroupQrcodeUrl().replace("oss.5rs.me", "file.5rs.me");
dataList.add(objs);
}
String fileUrl = exportConsr.exportExcel(fileName, rowsName, dataList);
return fileUrl;
}
}
package com.pcloud.book.group.vo;
import java.util.List;
/**
* @描述:查询参数
* @作者:zhuyajie
* @创建时间:9:59 2019/9/29
* @版本:1.0
*/
public class BookGroupAnalysisParam {
/**
* 当前页
*/
private Integer currentPage;
/**
*每页数量
*/
private Integer numPerPage;
/**
*书id
*/
private List<Long> bookIds;
/**
*出版社id
*/
private List<Long> agentIds;
/**
*编辑id
*/
private List<Long> adviserIds;
/**
*统计月份
*/
private String monthDate;
/**
*是否基金支持
*/
private Boolean isFundSupport;
/**
*是否版权保护
*/
private Boolean isCopyright;
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getNumPerPage() {
return numPerPage;
}
public void setNumPerPage(Integer numPerPage) {
this.numPerPage = numPerPage;
}
public List<Long> getBookIds() {
return bookIds;
}
public void setBookIds(List<Long> bookIds) {
this.bookIds = bookIds;
}
public List<Long> getAgentIds() {
return agentIds;
}
public void setAgentIds(List<Long> agentIds) {
this.agentIds = agentIds;
}
public List<Long> getAdviserIds() {
return adviserIds;
}
public void setAdviserIds(List<Long> adviserIds) {
this.adviserIds = adviserIds;
}
public String getMonthDate() {
return monthDate;
}
public void setMonthDate(String monthDate) {
this.monthDate = monthDate;
}
public Boolean getIsFundSupport() {
return isFundSupport;
}
public void setIsFundSupport(Boolean isFundSupport) {
this.isFundSupport = isFundSupport;
}
public Boolean getIsCopyright() {
return isCopyright;
}
public void setIsCopyright(Boolean isCopyright) {
this.isCopyright = isCopyright;
}
@Override
public String toString() {
return "BookGroupAnalysisParam{" +
"currentPage=" + currentPage +
", numPerPage=" + numPerPage +
", bookIds=" + bookIds +
", agentIds=" + agentIds +
", adviserIds=" + adviserIds +
", monthDate='" + monthDate + '\'' +
", isFundSupport=" + isFundSupport +
", isCopyright=" + isCopyright +
'}';
}
}
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import java.math.BigDecimal;
import java.util.Date;
/**
* @描述:社群书分析-平台端
* @作者:zhuyajie
* @创建时间:9:07 2019/9/29
* @版本:1.0
*/
public class BookGroupAnalysisVO extends BaseDto {
/**
* 社群码ID
*/
private Long bookGroupId;
/**
* 社群码
*/
private String groupQrcodeUrl;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createTime;
/**
* 书籍标识
*/
private Long bookId;
/**
* 书籍ISBN码
*/
private String isbn;
/**
* 书籍名称
*/
private String bookName;
/**
* 一级分类id
*/
private Long templetId;
/**
* 一级分类名称
*/
private String templetName;
/**
* 二级分类id
*/
private Long secondTempletId;
/**
* 二级分类名称
*/
private String secondTempletName;
/**
* 编辑标识
*/
private Long adviserId;
/**
* 编辑名称
*/
private String adviserName;
/**
* 出版ID
*/
private Long agentId;
/**
* 出版社名称
*/
private String agentName;
/**
* 渠道标识
*/
private Long channelId;
/**
* 渠道名称
*/
private String channelName;
/**
* 书刊是否有基金支持
*/
private Boolean isFundSupport;
/**
* 是否版权保护
*/
private Boolean isCopyright;
//社群码 微信群数据
/**
* 扫码次数
*/
private Integer scanCount;
/**
* 扫码人数
*/
private Integer scanUserCount;
/**
* 进群方式:1群二维码,2客服机器人
*/
private Integer joinGroupType;
/**
* 群分类数量
*/
private Integer classifyCount;
/**
* 群总人数
*/
private Integer userNumber;
/**
* 累计进群人数
*/
private Integer joinUserCount;
/**
* 群数量
*/
private Integer groupCount;
/**
* 好友数量
*/
private Integer friendsCount;
//配置资源数据
/**
* 配置资源个数
*/
private Integer resourceCount;
/**
* 浏览量
*/
private Integer browseCount;
/**
* 读者量
*/
private Integer browserCount;
//资源销售数据
/**
* 销售额
*/
private BigDecimal saleAmount;
/**
*支付率
*/
private BigDecimal payRate;
/**
*客单价
*/
private BigDecimal avgSaleAmount;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public String getGroupQrcodeUrl() {
return groupQrcodeUrl;
}
public void setGroupQrcodeUrl(String groupQrcodeUrl) {
this.groupQrcodeUrl = groupQrcodeUrl;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Long getBookId() {
return bookId;
}
public void setBookId(Long bookId) {
this.bookId = bookId;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public Long getTempletId() {
return templetId;
}
public void setTempletId(Long templetId) {
this.templetId = templetId;
}
public String getTempletName() {
return templetName;
}
public void setTempletName(String templetName) {
this.templetName = templetName;
}
public Long getSecondTempletId() {
return secondTempletId;
}
public void setSecondTempletId(Long secondTempletId) {
this.secondTempletId = secondTempletId;
}
public String getSecondTempletName() {
return secondTempletName;
}
public void setSecondTempletName(String secondTempletName) {
this.secondTempletName = secondTempletName;
}
public Long getAdviserId() {
return adviserId;
}
public void setAdviserId(Long adviserId) {
this.adviserId = adviserId;
}
public String getAdviserName() {
return adviserName;
}
public void setAdviserName(String adviserName) {
this.adviserName = adviserName;
}
public Long getAgentId() {
return agentId;
}
public void setAgentId(Long agentId) {
this.agentId = agentId;
}
public String getAgentName() {
return agentName;
}
public void setAgentName(String agentName) {
this.agentName = agentName;
}
public Long getChannelId() {
return channelId;
}
public void setChannelId(Long channelId) {
this.channelId = channelId;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public Boolean getIsFundSupport() {
return isFundSupport;
}
public void setIsFundSupport(Boolean isFundSupport) {
this.isFundSupport = isFundSupport;
}
public Integer getScanCount() {
return scanCount;
}
public void setScanCount(Integer scanCount) {
this.scanCount = scanCount;
}
public Integer getScanUserCount() {
return scanUserCount;
}
public void setScanUserCount(Integer scanUserCount) {
this.scanUserCount = scanUserCount;
}
public Integer getJoinGroupType() {
return joinGroupType;
}
public void setJoinGroupType(Integer joinGroupType) {
this.joinGroupType = joinGroupType;
}
public Integer getClassifyCount() {
return classifyCount;
}
public void setClassifyCount(Integer classifyCount) {
this.classifyCount = classifyCount;
}
public Integer getUserNumber() {
return userNumber;
}
public void setUserNumber(Integer userNumber) {
this.userNumber = userNumber;
}
public Integer getGroupCount() {
return groupCount;
}
public void setGroupCount(Integer groupCount) {
this.groupCount = groupCount;
}
public Integer getFriendsCount() {
return friendsCount;
}
public void setFriendsCount(Integer friendsCount) {
this.friendsCount = friendsCount;
}
public Integer getResourceCount() {
return resourceCount;
}
public void setResourceCount(Integer resourceCount) {
this.resourceCount = resourceCount;
}
public Integer getBrowseCount() {
return browseCount;
}
public void setBrowseCount(Integer browseCount) {
this.browseCount = browseCount;
}
public Integer getBrowserCount() {
return browserCount;
}
public void setBrowserCount(Integer browserCount) {
this.browserCount = browserCount;
}
public BigDecimal getSaleAmount() {
return saleAmount;
}
public void setSaleAmount(BigDecimal saleAmount) {
this.saleAmount = saleAmount;
}
public BigDecimal getPayRate() {
return payRate;
}
public void setPayRate(BigDecimal payRate) {
this.payRate = payRate;
}
public BigDecimal getAvgSaleAmount() {
return avgSaleAmount;
}
public void setAvgSaleAmount(BigDecimal avgSaleAmount) {
this.avgSaleAmount = avgSaleAmount;
}
public Boolean getIsCopyright() {
return isCopyright;
}
public void setIsCopyright(Boolean isCopyright) {
this.isCopyright = isCopyright;
}
public Integer getJoinUserCount() {
return joinUserCount;
}
public void setJoinUserCount(Integer joinUserCount) {
this.joinUserCount = joinUserCount;
}
}
package com.pcloud.book.keywords.dao;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.vo.SyncKeyworsVO;
import com.pcloud.book.keywords.dto.KeywordDTO;
import com.pcloud.book.keywords.dto.KeywordResourceDTO;
import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
import com.pcloud.book.keywords.entity.BookKeyword;
import com.pcloud.book.keywords.vo.KeywordVO;
......@@ -9,6 +11,7 @@ import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
import java.util.Map;
/**
* @author lily
......@@ -132,4 +135,19 @@ public interface BookKeywordDao extends BaseDao<BookKeyword> {
* 根据社群码id逻辑删除
*/
void deleteByBookGroupIds(List<Long> bookGroupIds);
/**
* 社群码下资源数量(关键词及1v1配置资源)
* @param bookGroupIds
* @return
*/
public Map<Long, KeywordResourceDTO> getBookGroupResourceCount(List<Long> bookGroupIds);
/**
* 社群码下资源列表(关键词及1v1配置资源)
* @param bookGroupId
* @return
*/
public List<BookGroupKeywordResourceDTO> getBookGroupResourceList(Long bookGroupId);
}
......@@ -3,9 +3,11 @@ package com.pcloud.book.keywords.dao.impl;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.vo.SyncKeyworsVO;
import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.dto.KeywordDTO;
import com.pcloud.book.keywords.dto.KeywordResourceDTO;
import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
import com.pcloud.book.keywords.entity.BookKeyword;
import com.pcloud.book.keywords.vo.KeywordVO;
......@@ -169,4 +171,19 @@ public class BookKeywordDaoImpl extends BaseDaoImpl<BookKeyword> implements Book
public void deleteByBookGroupIds(List<Long> bookGroupIds) {
this.getSqlSession().update(this.getStatement("deleteByBookGroupIds"), bookGroupIds);
}
@Override
public Map<Long, KeywordResourceDTO> getBookGroupResourceCount(List<Long> bookGroupIds) {
Map<String, Object> paramMap = new HashMap();
paramMap.put("bookGroupIds", bookGroupIds);
return this.getSqlSession().selectMap(this.getStatement("getBookGroupResourceCount"), paramMap, "bookGroupId");
}
@Override
public List<BookGroupKeywordResourceDTO> getBookGroupResourceList(Long bookGroupId) {
Map<String, Object> paramMap = new HashMap();
paramMap.put("bookGroupId", bookGroupId);
return getSessionTemplate().selectList(getStatement("getBookGroupResourceList"), paramMap);
}
}
package com.pcloud.book.keywords.dto;
/**
* @描述:社群码下资源数量
* @作者:zhuyajie
* @创建时间:17:22 2019/9/29
* @版本:1.0
*/
public class KeywordResourceDTO {
/**
* 社群码id
*/
private Long bookGroupId;
/**
* 数量
*/
private Integer count;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
@Override
public String toString() {
return "KeywordResourceDTO{" +
"bookGroupId=" + bookGroupId +
", count=" + count +
'}';
}
}
......@@ -170,4 +170,6 @@
AND t.serve_type = #{type}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -86,4 +86,16 @@
create_time DESC,id DESC
</select>
<select id="getFriendsCountByBookGroupByTime" resultType="integer" parameterType="map">
SELECT
COUNT(DISTINCT wx_user_id)
FROM
book_group_cipher_user
WHERE
book_group_id = #{bookGroupId}
<if test="startTime != null and endTime != null">
AND create_time BETWEEN #{startTime} AND #{endTime}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -987,4 +987,5 @@
AND t.is_delete = 0
order by create_time asc
</select>
</mapper>
\ No newline at end of file
......@@ -99,7 +99,7 @@
and create_user = #{adviserId,jdbcType=BIGINT}
ORDER BY create_time ASC limit 1
</select>
<select id="getDTOByBookIdsAnsAdviserIds" resultMap="BookGroupDTO" parameterType="map">
select
<include refid="Base_Column_List"/>
......@@ -482,4 +482,83 @@
update_time=now()
where id=#{id}
</update>
<resultMap id="BookGroupAnalysisVO" type="com.pcloud.book.group.vo.BookGroupAnalysisVO">
<id column="BOOK_GROUP_ID" property="bookGroupId" jdbcType="BIGINT"/>
<result column="group_qrcode_url" property="groupQrcodeUrl" jdbcType="VARCHAR"/>
<result column="BOOK_ID" property="bookId" jdbcType="BIGINT"/>
<result column="ISBN" property="isbn" jdbcType="VARCHAR" />
<result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR" />
<result column="TEMPLET_ID" property="templetId" jdbcType="BIGINT" />
<result column="SECOND_TEMPLET_ID" property="secondTempletId" jdbcType="BIGINT" />
<result column="ADVISER_ID" property="adviserId" jdbcType="BIGINT" />
<result column="CHANNEL_ID" property="channelId" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="is_fund_support" property="isFundSupport" jdbcType="BIT" />
<result column="is_copyright" property="isCopyright" jdbcType="BIT" />
<result column="join_group_type" property="joinGroupType" jdbcType="INTEGER"/>
</resultMap>
<select id="listPageBookGroupAnalysis" parameterType="map" resultMap="BookGroupAnalysisVO">
SELECT
G.id BOOK_GROUP_ID,
G.group_qrcode_url,
A.BOOK_ID,
B.ISBN,
B.BOOK_NAME,
A.TEMPLET_ID,
A.SECOND_TEMPLET_ID,
G.channel_id CHANNEL_ID,
G.create_user ADVISER_ID,
G.create_time,
IF (ISNULL(BF.BOOK_FUND_ID), 0, 1) is_fund_support,
IF (ISNULL(i.id), 0, 1) is_copyright,
G.join_group_type
FROM
book_group G
LEFT JOIN BOOK_ADVISER A ON G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID
LEFT JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID
LEFT JOIN BOOK_FUND BF ON BF.BOOK_ID = A.BOOK_ID AND BF.END_TIME <![CDATA[ > ]]> NOW() AND BF.START_TIME <![CDATA[ < ]]> NOW()
LEFT JOIN book_auth_info i ON G.book_id = i.book_id AND i.book_status = 1 AND i.is_group_book = 1
WHERE 1 = 1
AND G.is_delete = 0
AND A.BOOK_ID IS NOT NULL
AND (
A.BOOK_ADVISER_ID IS NULL
OR A.IS_DELETE = 0
)
AND (
B.BOOK_ID IS NULL
OR B.IS_DELETE = 0
)
<if test="isFundSupport != null and isFundSupport == 1">
AND BF.BOOK_FUND_ID IS NOT NULL
</if>
<if test="isFundSupport != null and isFundSupport == 0">
AND BF.BOOK_FUND_ID IS NULL
</if>
<if test="isCopyright != null and isCopyright == 1">
AND i.id IS NOT NULL
</if>
<if test="isCopyright != null and isCopyright == 0">
AND i.id IS NULL
</if>
<if test="bookIds != null">
AND G.book_id IN
<foreach collection="bookIds" index="i" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
<if test="adviserIds != null">
AND G.create_user IN
<foreach collection="adviserIds" index="i" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
GROUP BY
G.id
ORDER BY
G.create_time DESC,
G.id DESC
</select>
</mapper>
\ No newline at end of file
......@@ -743,4 +743,14 @@
</foreach>
</select>
<select id="getIdsByBookGroupId" parameterType="long" resultType="long">
SELECT
q.id
FROM
book_group_qrcode q
LEFT JOIN book_group_classify c ON q.classify_id = c.id
WHERE
c.book_group_id = #{bookGroupId}
</select>
</mapper>
\ No newline at end of file
......@@ -487,4 +487,68 @@
#{item}
</foreach>
</update>
<!--社群码下资源数量(关键词及1v1配置资源)-->
<select id="getBookGroupResourceCount" parameterType="map" resultType="com.pcloud.book.keywords.dto.KeywordResourceDTO">
SELECT
COUNT(1) count,
a.book_group_id bookGroupId
FROM
(
SELECT
serve_id,
serve_type,
book_group_id
FROM
book_keyword b
JOIN keyword k ON b.keyword_id = k.id
WHERE
b.is_delete = 0
AND k.is_delete = 0
AND b.book_group_id IN
<foreach collection="bookGroupIds" index="index" item="item" open="(" separator="," close=")">
${item}
</foreach>
AND k.serve_type IN ('APP', 'PRODUCT')
UNION
SELECT
serve_id,
serve_type,
book_group_id
FROM
book_group_serve
WHERE 1 = 1
AND book_group_id IN
<foreach collection="bookGroupIds" index="index" item="item" open="(" separator="," close=")">
${item}
</foreach>
) AS a
GROUP BY
a.book_group_id
</select>
<!--社群码下资源列表(关键词及1v1配置资源)-->
<select id="getBookGroupResourceList" parameterType="map" resultType="com.pcloud.book.group.dto.BookGroupKeywordResourceDTO">
SELECT
serve_id serveId,
serve_type serveType
FROM
book_keyword b
JOIN keyword k ON b.keyword_id = k.id
WHERE
b.is_delete = 0
AND k.is_delete = 0
AND b.book_group_id = #{bookGroupId}
AND k.serve_type IN ('APP', 'PRODUCT')
UNION
SELECT
serve_id serveId,
serve_type serveType
FROM
book_group_serve
WHERE
1 = 1
AND book_group_id = #{bookGroupId}
</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