Commit 89d4b009 by daixing

收益管理

parents 496af94c 32ff305e
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/25 16:07
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BookClassifyDTO implements Serializable {
private Long bookId;
private Long bookGroupId;
private Long classifyCount;
public Long getBookId() {
return bookId;
}
public void setBookId(Long bookId) {
this.bookId = bookId;
}
public Long getClassifyCount() {
return classifyCount;
}
public void setClassifyCount(Long classifyCount) {
this.classifyCount = classifyCount;
}
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
@Override
public String toString() {
return "BookClassifyDTO{" +
"bookId=" + bookId +
", bookGroupId=" + bookGroupId +
", classifyCount=" + classifyCount +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/25 16:29
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BookGroupStatisticsDTO implements Serializable {
/**
* 群分类数
*/
private Long classifyCount;
/**
* 微信群数
*/
private Long wxGroupCount;
/**
* 当前群人数
*/
private Long groupPersonNum;
/**
* 推广应用次数
*/
private Long promAppCount;
/**
* 推广作品次数
*/
private Long promProductCount;
public Long getClassifyCount() {
return classifyCount;
}
public void setClassifyCount(Long classifyCount) {
this.classifyCount = classifyCount;
}
public Long getWxGroupCount() {
return wxGroupCount;
}
public void setWxGroupCount(Long wxGroupCount) {
this.wxGroupCount = wxGroupCount;
}
public Long getGroupPersonNum() {
return groupPersonNum;
}
public void setGroupPersonNum(Long groupPersonNum) {
this.groupPersonNum = groupPersonNum;
}
public Long getPromAppCount() {
return promAppCount;
}
public void setPromAppCount(Long promAppCount) {
this.promAppCount = promAppCount;
}
public Long getPromProductCount() {
return promProductCount;
}
public void setPromProductCount(Long promProductCount) {
this.promProductCount = promProductCount;
}
@Override
public String toString() {
return "BookGroupStatisticsDTO{" +
"classifyCount=" + classifyCount +
", wxGroupCount=" + wxGroupCount +
", groupPersonNum=" + groupPersonNum +
", promAppCount=" + promAppCount +
", promProductCount=" + promProductCount +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.dto;
import java.io.Serializable;
import java.util.List;
/**
* @author 戴兴
* @description TODO
* @date 2019/8/8 20:37
*/
public class ResourceBrowseParamDto implements Serializable {
private Long bookGroupId;
private Long classifyId;
private Long qrcodeId;
private String typeCode;
private List<Long> Ids;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public Long getClassifyId() {
return classifyId;
}
public void setClassifyId(Long classifyId) {
this.classifyId = classifyId;
}
public Long getQrcodeId() {
return qrcodeId;
}
public void setQrcodeId(Long qrcodeId) {
this.qrcodeId = qrcodeId;
}
public String getTypeCode() {
return typeCode;
}
public void setTypeCode(String typeCode) {
this.typeCode = typeCode;
}
public List<Long> getIds() {
return Ids;
}
public void setIds(List<Long> ids) {
Ids = ids;
}
@Override
public String toString() {
return "ResourceBrowseParamDto{" +
"bookGroupId=" + bookGroupId +
", classifyId=" + classifyId +
", qrcodeId=" + qrcodeId +
", typeCode='" + typeCode + '\'' +
", Ids=" + Ids +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.service;
import com.pcloud.book.group.dto.GroupClassifyQrcodeDTO;
import com.pcloud.book.group.dto.GroupQrcodeBaseDTO;
import com.pcloud.book.group.dto.GroupQrcodeInfo4Advertising;
import com.pcloud.book.group.dto.ProAssocGroupAndUserNumberDTO;
import com.pcloud.book.group.dto.*;
import com.pcloud.common.dto.ResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
......@@ -56,7 +53,13 @@ public interface BookGroupClassifyService {
@PostMapping("filterDeleteId")
ResponseEntity<ResponseDto<List<Long>>> filterDeleteId(@RequestBody List<String >wxGroupIdList);
@ApiOperation("获取用户支付金额")
@GetMapping("getPayPrice")
ResponseEntity<ResponseDto<BigDecimal>> getPayPrice(@RequestParam("qrcodeId") Long qrcodeId, @RequestParam("wxUserId") String wxUserId);
@ApiOperation("获取群分类个数")
@PostMapping("getGroupClassifyCount")
ResponseEntity<ResponseDto<Map<Long, BookClassifyDTO>>> getGroupClassifyCount(@RequestBody List<Long> bookIds);
}
......@@ -3,9 +3,12 @@ package com.pcloud.book.group.service;
import java.util.List;
import java.util.Map;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
......@@ -52,6 +55,7 @@ public interface BookGroupService {
@RequestMapping(value = "getBaseInfoBySceneId",method = RequestMethod.GET)
ResponseEntity<ResponseDto<BookGroupDTO>> getBaseInfoBySceneId(@RequestParam("sceneId")Long sceneId) throws BizException;
@ApiOperation("更新个人二维码")
@RequestMapping(value = "updatePersonQrcode",method = RequestMethod.POST)
void updatePersonQrcode(@RequestBody PersonalQrcodeDTO personalQrcodeDTO) throws BizException;
......@@ -72,4 +76,9 @@ public interface BookGroupService {
@GetMapping("/getJoinGroupCipher")
ResponseEntity<ResponseDto<GroupCipherDTO>> getJoinGroupCipher(@RequestParam("cipher")String cipher) throws BizException;
@ApiOperation("获取资源浏览数据")
@PostMapping("getResourcesBrowseCount")
ResponseEntity<ResponseDto<Map<Long, Long>>> getResourcesBrowseCount(@RequestBody ResourceBrowseParamDto resourceBrowseParamDto);
}
......@@ -83,6 +83,10 @@ public interface WeixinQrcodeService {
@RequestMapping(value = "getGroupVersionIp", method = RequestMethod.POST)
ResponseEntity<ResponseDto<Map<String, BookWxQrcodeDTO>>> getGroupVersionIp(@RequestBody List<String> wxGroupIds);
@ApiOperation(value = "通过群分类id获取微信群id", httpMethod = "GET")
@RequestMapping(value = "getWxGroupId", method = RequestMethod.GET)
ResponseEntity<ResponseDto<String>> getWxGroupId(@RequestParam("classifyId") Long classifyId);
}
package com.pcloud.book.consumer.settlement;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.settlementcenter.record.dto.GetGroupClassifyIncomeDTO;
import com.pcloud.settlementcenter.record.dto.GetGroupQrcodeIncomeDTO;
import com.pcloud.settlementcenter.record.dto.GroupRescourceIncomeParamDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import com.pcloud.book.base.exception.BookBizException;
......@@ -102,4 +109,52 @@ public class BookConsr {
LOGGER.info("【书刊-结算(消)】批量获取书刊总收益,<END>");
return resultMap;
}
@ParamLog(value = "批量获取社群码下资源的收益", isBefore = false, isAfterReturn = false)
public Map<Long, BigDecimal> getRescourceIncome(GroupRescourceIncomeParamDTO groupRescourceIncomeParamDTO) throws BizException {
Map<Long, BigDecimal> rescourceIncome = new HashMap<>();
try {
ResponseEntity<ResponseDto<Map<Long, BigDecimal>>> responseEntityP = bookService.getGroupRescourceIncome(groupRescourceIncomeParamDTO);
rescourceIncome = ResponseHandleUtil.parseMap(responseEntityP, Long.class, BigDecimal.class);
} catch (Exception e) {
LOGGER.error("批量获取社群码下资源的收益.[getRescourceIncome]:" + e.getMessage(), e);
}
return rescourceIncome;
}
@ParamLog(value = "批量获取社群码下资源的总收益", isBefore = false, isAfterReturn = false)
public BigDecimal getRescourceTotalIncome(GroupRescourceIncomeParamDTO groupRescourceIncomeParamDTO) throws BizException {
BigDecimal rescourceTotalIncome = new BigDecimal(0);
try {
ResponseEntity<ResponseDto<BigDecimal>> responseEntityP = bookService.getGroupRescourceTotalIncome(groupRescourceIncomeParamDTO);
rescourceTotalIncome = ResponseHandleUtil.parseResponse(responseEntityP, BigDecimal.class);
} catch (Exception e) {
LOGGER.error("批量获取社群码下资源的总收益.[getRescourceTotalIncome]:" + e.getMessage(), e);
}
return rescourceTotalIncome == null?BigDecimal.ZERO:rescourceTotalIncome;
}
@ParamLog(value = "批量获取社群码分类的收益", isBefore = false, isAfterReturn = false)
public Map<Long,BigDecimal> getClassifyIncome(GetGroupClassifyIncomeDTO getGroupClassifyIncomeDTO) throws BizException {
Map<Long,BigDecimal> classifyIncome = new HashMap<>();
try {
ResponseEntity<ResponseDto<Map<Long,BigDecimal>>> responseEntityP = bookService.getGroupClassifyIncome(getGroupClassifyIncomeDTO);
classifyIncome = ResponseHandleUtil.parseMap(responseEntityP, Long.class, BigDecimal.class);
} catch (Exception e) {
LOGGER.error("批量获取社群码分类的收益.[getClassifyIncome]:" + e.getMessage(), e);
}
return classifyIncome;
}
@ParamLog(value = "批量获取社群码分类下的微信群收益", isBefore = false, isAfterReturn = false)
public Map<Long,BigDecimal> getQrcodeIncome(GetGroupQrcodeIncomeDTO getGroupQrcodeIncomeDTO) throws BizException {
Map<Long,BigDecimal> qrcodeIncome = new HashMap<>();
try {
ResponseEntity<ResponseDto<Map<Long,BigDecimal>>> responseEntityP = bookService.getGroupQrcodeIncome(getGroupQrcodeIncomeDTO);
qrcodeIncome = ResponseHandleUtil.parseMap(responseEntityP, Long.class, BigDecimal.class);
} catch (Exception e) {
LOGGER.error("批量获取社群码分类下的微信群收益.[getQrcodeIncome]:" + e.getMessage(), e);
}
return qrcodeIncome;
}
}
......@@ -5,6 +5,9 @@ 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.settlementcenter.record.dto.ProductStaticUnderAppMapDTO;
import com.pcloud.settlementcenter.record.dto.ResourcesStatisticVO;
import com.pcloud.settlementcenter.record.service.BookService;
import com.pcloud.settlementcenter.record.service.SettlementService;
import org.slf4j.Logger;
......@@ -14,9 +17,8 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Component("settlementConsr")
public class SettlementConsr {
......@@ -27,6 +29,8 @@ public class SettlementConsr {
@Autowired
private SettlementService settlementService;
@Autowired
private BookService bookService;
@ParamLog(value = "获取收益", isBefore = false, isAfterReturn = false)
public Map<Long, BigDecimal> getWXGroupQrcodeIncomeByAdviser(List<Long> groupQrcodeIds, Long adviserId) throws BizException {
......@@ -55,4 +59,28 @@ public class SettlementConsr {
}
return map;
}
@ParamLog(value = "获取日期列表", isBefore = false, isAfterReturn = false)
public List<Date> getDateList(Integer dayNum,Date startDate, Date endDate) throws BizException {
List<Date> dateList = new ArrayList<>();
try {
ResponseEntity<ResponseDto<List<Date>>> responseEntityP = settlementService.getDateList(dayNum,startDate,endDate);
dateList = ResponseHandleUtil.parseList(responseEntityP, Date.class);
} catch (Exception e) {
LOGGER.error("获取日期列表.[getDateList]:" + e.getMessage(), e);
}
return dateList;
}
@ParamLog(value = "社群码应用下商品的收益", isBefore = false, isAfterReturn = false)
public Map<Long,List<ResourcesStatisticVO>> getProductStaticUnderApp(ProductStaticUnderAppMapDTO productStaticUnderAppMapDTO) throws BizException {
Map<Long,List<ResourcesStatisticVO>> resourcesStatisticVOS = new HashMap<>();
try {
ResponseEntity<ResponseDto<Map<Long,List<ResourcesStatisticVO>>>> responseEntityP = bookService.getProductStaticUnderAppMap(productStaticUnderAppMapDTO);
resourcesStatisticVOS = ResponseHandleUtil.parseMapList(responseEntityP, Long.class, ResourcesStatisticVO.class);
} catch (Exception e) {
LOGGER.error("社群码应用下商品的收益.[getProductStaticUnderApp]:" + e.getMessage(), e);
}
return resourcesStatisticVOS;
}
}
......@@ -7,6 +7,7 @@ import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.facade.tradecenter.dto.*;
import com.pcloud.facade.tradecenter.service.OrderFormService;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -14,10 +15,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* @Author:lili
......@@ -126,6 +124,7 @@ public class TradeConsr {
return amount;
}
@ParamLog("获取用户购买或者参与过的社群码ID")
public List<Long> getBuyBookGroupIdList(Long channelId, Long wechatUserId) throws BizException {
List<Long> results = new ArrayList<>();
......@@ -138,4 +137,46 @@ public class TradeConsr {
return results;
}
@ParamLog("获取社群码下的应用作品购买量")
public List<ClassifyPayDetailDto> getGroupBuyCount(Long bookGroupId, Long classifyId, Long qrcodeId, Date startDate, Date endDate) throws BizException{
List<ClassifyPayDetailDto> classifyPayDetailDtos = new ArrayList<>();
try {
ResponseEntity<ResponseDto<List<ClassifyPayDetailDto>>> responseEntity = orderFormService.getSaleVolume(startDate,endDate,bookGroupId,classifyId,qrcodeId);
classifyPayDetailDtos = ResponseHandleUtil.parseListResponse(responseEntity, ClassifyPayDetailDto.class);
} catch (Exception e) {
LOGGER.error("获取社群码下的应用作品购买量:" + e.getMessage(), e);
}
if (ListUtils.isEmpty(classifyPayDetailDtos)) {
classifyPayDetailDtos = new ArrayList<>();
}
return classifyPayDetailDtos;
}
@ParamLog("查询社区码下购买应用详情")
public Map<Long, GroupMoneyDto> getSaleDetail4Group(GroupIncomeSearchDto groupIncomeSearchDto) throws BizException {
Map<Long, GroupMoneyDto> groupMoneyDtoMap = new HashMap<>();
try {
ResponseEntity<ResponseDto<Map<Long, GroupMoneyDto>>> responseEntity = orderFormService.getSaleDetail4Group(groupIncomeSearchDto);
groupMoneyDtoMap = ResponseHandleUtil.parseMap(responseEntity, Long.class, GroupMoneyDto.class);
} catch (Exception e) {
LOGGER.error("查询社区码下购买应用详情:" + e.getMessage(), e);
}
if (MapUtils.isEmpty(groupMoneyDtoMap)) {
groupMoneyDtoMap = new HashMap<>();
}
return groupMoneyDtoMap;
}
@ParamLog("查询社群码下购买应用或作品的总销售额")
public BigDecimal getTotalSale(Long bookGroupId, Long classifyId, Long qrcodeId, String type) throws BizException {
BigDecimal totalSale = BigDecimal.ZERO;
try {
ResponseEntity<ResponseDto<BigDecimal>> responseEntity = orderFormService.getSaleAmount4Group(bookGroupId,classifyId,qrcodeId,type);
totalSale = ResponseHandleUtil.parseResponse(responseEntity, BigDecimal.class);
} catch (Exception e) {
LOGGER.error("查询社区码下购买应用详情:" + e.getMessage(), e);
}
return totalSale;
}
}
......@@ -178,6 +178,19 @@ public class WechatGroupConsr {
return null;
}
@ParamLog(value = "群分类累计进群人数与今日进群人数", isBefore = false, isAfterReturn = false)
public Map<Long, Long> getclassifyMemberCount(List<Long> classifyIds) throws BizException {
if (ListUtils.isEmpty(classifyIds)) {
return null;
}
try {
return ResponseHandleUtil.parseMapResponse(groupMemberService.mapGroupClassifyStatisInfo(classifyIds), Long.class, Long.class);
} catch (Exception e) {
log.error("群分类累计进群人数与今日进群人数.[getclassifyMemberCount]:" + e.getMessage(), e);
}
return null;
}
@ParamLog(value = "活跃人数与总发言数", isBefore = false, isAfterReturn = false)
public Map<Long, GroupChatCountDTO> getChatCountByGroup(List<Long> groupQrcodeIds, Long bookGroupId) throws BizException {
if (ListUtils.isEmpty(groupQrcodeIds)) {
......
......@@ -2,6 +2,7 @@ package com.pcloud.book.group.biz;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.dto.AppStatisticsDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.ClassifyKeywordDTO;
......@@ -9,6 +10,11 @@ import com.pcloud.book.group.dto.GroupStoreMyPayDto;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.vo.*;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.vo.*;
import com.pcloud.book.group.vo.StatisticVO;
import com.pcloud.common.dto.StoreFlowInfoDto;
import com.pcloud.common.exceptions.BizException;
......@@ -322,4 +328,47 @@ public interface BookGroupBiz {
* 获取用户购买或者参与过的社群书信息
*/
PageBeanNew<GroupStoreMyPayDto> getUserBrowseGroup4KnowLedgeMall(Long channelId, Long wechatUserId, Integer currentPage, Integer numPerPage);
/**
* 获取社群码相关数据
*/
BookGroupStatisticsDTO getBookGroupStatisByBookGroupId(Long bookGroupId);
/**
* 收益统计
*/
PageBeanNew<ResourcesStatisticVO> getGroupIncomeStatic(GroupIncomeStaticParamVO groupIncomeStaticParamVO, Long adviserId);
/**
* 社群码浏览趋势图
*/
List<GroupScanTrendVO> getGroupScanTrend(GroupScanTrendParamVO groupScanTrendParamVO, Long adviserId);
/**
* 社群码分类统计
*/
PageBeanNew<GroupStatisticVO> getClassifyStatistic(Long bookGroupId, Long adviserId, Integer currentPage, Integer numPerPage);
/**
* 社群码分类的微信群统计
*/
List<WxGroupStatisticVO> getQrcodeStatistic(Long bookGroupId, Long classifyId, Long adviserId);
/**
* 资源数据统计
*/
TotalRescourceDataVO getTotalRescourceData(Long bookGroupId,Long adviserId, Long classifyId, Long qrcodeId, String type);
/**
* 资源数据导出
*/
Map<String, String> exportRescourceIncomeData(Long bookGroupId,Long adviserId);
/**
* 获取资源浏览数据
*/
Map<Long, Long> getResourcesBrowseCount(ResourceBrowseParamDto resourceBrowseParamDto);
}
package com.pcloud.book.group.biz;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.ClassifyDTO;
import com.pcloud.book.group.dto.ClassifyLearningReportDto;
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.dto.*;
import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.vo.AddClassifyVO;
import com.pcloud.book.group.vo.AdviserClassifyParam;
......@@ -202,6 +196,9 @@ public interface BookGroupClassifyBiz {
PageBeanNew<ClassifyDTO> listSimpleBookGroupClassify4Adviser(Long adviserId, BookGroupClassify bookGroupClassify, PageParam pageParam);
PageBeanNew<AdviserClassifyVO> listAdviserClassify(Long adviserId, AdviserClassifyParam adviserClassifyParam);
Map<Long, BookClassifyDTO> getGroupClassifyCount(List<Long> bookIds);
/**
* 更新是否开启微学习报告
*/
......@@ -224,4 +221,12 @@ public interface BookGroupClassifyBiz {
* 拖动排序
*/
void dragSortClassify(List<Long> classifyIds);
/**
* 埋点记录点击群分类次数
*/
void clickClassify(Long wechatUserId, Long bookGroupId, Long classifyId);
List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId);
}
......@@ -65,6 +65,13 @@ public interface GroupQrcodeBiz {
PageBeanNew<ClassifyQrcodeVO> listQrcodeByClassify(ListQrcodeByClassifyParamVO listQrcodeByClassifyParamVO);
/**
* @description 获取社群码类别下的群---不分页
* @author 戴兴
* @date 2019/7/28 15:59
*/
List<ClassifyQrcodeVO> getQrcodeByClassify(Long bookGroupId, Long classifyId);
/**
* @Author:lili
* @Desr:修改微信群名称
* @Date:2019/4/1 11:22
......
......@@ -17,12 +17,14 @@ import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.raystask.MainLineConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.consumer.settlement.BookConsr;
import com.pcloud.book.consumer.settlement.SettlementConsr;
import com.pcloud.book.consumer.trade.TradeConsr;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.biz.BookGroupClassifyBiz;
import com.pcloud.book.group.dao.*;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.entity.BookGroup;
......@@ -30,11 +32,19 @@ import com.pcloud.book.group.entity.JoinGroupCipher;
import com.pcloud.book.group.entity.TempletRelevance;
import com.pcloud.book.group.enums.LargTempletEnum;
import com.pcloud.book.group.vo.StatisticVO;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.group.dao.AppClickRecordDao;
import com.pcloud.book.group.dao.AppTouchRecordDao;
import com.pcloud.book.group.dao.BookGroupClassifyDao;
import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.vo.ClassifyAndGroupCountVO;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.vo.*;
import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.enums.ReplyTypeEnum;
......@@ -56,11 +66,14 @@ import com.pcloud.common.page.PageBean;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.*;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.export.excel.ExcelExportor;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.common.utils.zip.CompressUtils;
import com.pcloud.facade.tradecenter.dto.GroupMoneyDto;
import com.pcloud.facade.tradecenter.dto.SpeWechatGroupDto;
import com.pcloud.facade.tradecenter.dto.WechatGroupDto;
import com.pcloud.facade.tradecenter.dto.*;
import com.pcloud.labelcenter.label.service.LabelService;
import com.pcloud.liveapp.live.dto.ProductIdSearchDto;
import com.pcloud.liveapp.live.service.TimeTableService;
......@@ -72,8 +85,14 @@ import com.pcloud.resourcecenter.product.dto.UpdateAppProductParamDTO;
import com.pcloud.resourcecenter.product.entity.Product;
import com.pcloud.resourcecenter.product.service.ProductService;
import com.pcloud.resourcecenter.store.constants.StoreCons;
import com.pcloud.settlementcenter.record.dto.GetGroupClassifyIncomeDTO;
import com.pcloud.settlementcenter.record.dto.GetGroupQrcodeIncomeDTO;
import com.pcloud.settlementcenter.record.dto.GroupRescourceIncomeParamDTO;
import com.pcloud.settlementcenter.record.dto.ProductStaticUnderAppMapDTO;
import com.pcloud.settlementcenter.record.service.SettlementService;
import com.pcloud.videolesson.schedule.service.ScheduleService;
import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO;
import com.pcloud.wechatgroup.group.service.GroupMemberService;
import com.pcloud.wechatgroup.selfrobot.dto.SelfRobotDTO;
......@@ -94,10 +113,10 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import static com.sun.tools.doclets.formats.html.markup.HtmlStyle.title;
/**
* Description 社群书群二维码业务逻辑层接口实现类
* Created by PENG on 2019/4/17.
......@@ -169,6 +188,11 @@ public class BookGroupBizImpl implements BookGroupBiz {
private WechatGroupConsr wechatGroupConsr;
@Autowired
private WeixinQrcodeDao weixinQrcodeDao;
@Autowired
private BookConsr bookConsr;
@Autowired
private GroupQrcodeBiz groupQrcodeBiz;
@Override
......@@ -268,9 +292,18 @@ public class BookGroupBizImpl implements BookGroupBiz {
return null;
}
List<BookGroupDTO> list = bookGroupDao.getDTOByIds(bookGroupIds);
List<Long> bookIds = list.stream().map(BookGroupDTO::getBookId).collect(Collectors.toList());
Map<Long, BookDto> mapByIds = bookDao.getMapByIds(bookIds);
if (ListUtils.isEmpty(list)) {
return null;
}
list.forEach(e ->{
if (!MapUtils.isEmpty(mapByIds) && mapByIds.get(e.getBookId()) != null){
e.setBookName(mapByIds.get(e.getBookId()).getBookName());
e.setIsbn(mapByIds.get(e.getBookId()).getIsbn());
e.setBookNumber("BK" + e.getBookId());
}
});
return list.stream().collect(Collectors.toMap(BookGroupDTO::getId, dto -> dto));
}
......@@ -1142,6 +1175,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
return bookGroupDao.getIsShowBookName(partyId);
}
@Transactional(rollbackFor = Exception.class)
@ParamLog("删除社群码")
@Override
......@@ -1444,4 +1478,420 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
return new PageBeanNew<>(currentPage, numPerPage, resultInfos.getTotalCount(), results);
}
@Override
public BookGroupStatisticsDTO getBookGroupStatisByBookGroupId(Long bookGroupId) {
Map<Long, BookGroupStatisticDTO> bookGroupStatisticMap = bookGroupClassifyBiz.getBookGroupStatistic(Arrays.asList(bookGroupId));
BookGroupStatisticsDTO bookGroupStatisticsDTO = new BookGroupStatisticsDTO();
Long appCount = appTouchRecordDao.getCountByBokkGroupId(bookGroupId, "APP");
Long productCount = appTouchRecordDao.getCountByBokkGroupId(bookGroupId, "PRODUCT");
if (MapUtils.isEmpty(bookGroupStatisticMap)){
bookGroupStatisticsDTO.setClassifyCount(0L);
bookGroupStatisticsDTO.setGroupPersonNum(0L);
bookGroupStatisticsDTO.setWxGroupCount(0L);
bookGroupStatisticsDTO.setPromAppCount(appCount);
bookGroupStatisticsDTO.setPromProductCount(productCount);
return bookGroupStatisticsDTO;
}
bookGroupStatisticsDTO.setClassifyCount(bookGroupStatisticMap.get(bookGroupId).getClassifyCount().longValue());
bookGroupStatisticsDTO.setGroupPersonNum(bookGroupStatisticMap.get(bookGroupId).getUserNumber().longValue());
bookGroupStatisticsDTO.setWxGroupCount(bookGroupStatisticMap.get(bookGroupId).getGroupNumber().longValue());
bookGroupStatisticsDTO.setPromAppCount(appCount);
bookGroupStatisticsDTO.setPromProductCount(productCount);
return bookGroupStatisticsDTO;
}
@Override
public PageBeanNew<ResourcesStatisticVO> getGroupIncomeStatic(GroupIncomeStaticParamVO groupIncomeStaticParamVO, Long adviserId) {
Long bookGroupId = groupIncomeStaticParamVO.getBookGroupId();
Integer currentPage = groupIncomeStaticParamVO.getCurrentPage();
Integer numPerPage = groupIncomeStaticParamVO.getNumPerPage();
String type = groupIncomeStaticParamVO.getType();
Long classifyId = groupIncomeStaticParamVO.getClassifyId();
Long wxGroupId = groupIncomeStaticParamVO.getWxGroupId();
if (currentPage==null||currentPage<0||numPerPage==null||numPerPage<=0){
throw new BookBizException(BookBizException.PARAM_IS_ERROR,"分页参数错误!");
}
if (bookGroupId==null){
throw new BookBizException(BookBizException.PARAM_IS_ERROR,"社群码id不能为空!");
}
if (type==null){
throw new BookBizException(BookBizException.PARAM_IS_ERROR,"类型不能为空");
}
PageParam pageParam = new PageParam(currentPage, numPerPage);
Map<String, Object> map = new HashMap<>();
map.put("bookGroupId", bookGroupId);
map.put("type", type);
if (null != classifyId){
map.put("classifyId", classifyId);
}
if (null != wxGroupId){
map.put("qrcodeId", wxGroupId);
}
PageBeanNew<ResourcesStatisticVO> pageBeanNew = appClickRecordDao.listPageNew(pageParam, map, "getClickStatistics");
List<ResourcesStatisticVO> recordList = pageBeanNew.getRecordList();
if (ListUtils.isEmpty(recordList)){
return pageBeanNew;
}
//填充数据
setInfo(recordList,bookGroupId,classifyId,wxGroupId,type,adviserId);
return pageBeanNew;
}
void setInfo(List<ResourcesStatisticVO> recordList,Long bookGroupId,Long classifyId, Long qrcodeId, String type,Long partyId){
List<Long> rescourceIds = recordList.stream().map(ResourcesStatisticVO::getRescourceId).collect(Collectors.toList());
// map.put("rescourceIds",rescourceIds);
GroupRescourceIncomeParamDTO groupRescourceIncomeParamDTO = new GroupRescourceIncomeParamDTO();
groupRescourceIncomeParamDTO.setBookGroupId(bookGroupId);
groupRescourceIncomeParamDTO.setClassifyId(classifyId);
groupRescourceIncomeParamDTO.setQrcodeId(qrcodeId);
groupRescourceIncomeParamDTO.setType(type);
groupRescourceIncomeParamDTO.setRescourceIds(rescourceIds);
groupRescourceIncomeParamDTO.setRoleId(5L);
groupRescourceIncomeParamDTO.setPartyId(partyId);
Map<Long, BigDecimal> rescourceIncome = bookConsr.getRescourceIncome(groupRescourceIncomeParamDTO);
GroupIncomeSearchDto groupIncomeSearchDto = new GroupIncomeSearchDto();
groupIncomeSearchDto.setBookGroupId(bookGroupId);
groupIncomeSearchDto.setClassifyId(classifyId);
groupIncomeSearchDto.setIds(rescourceIds);
groupIncomeSearchDto.setQrcodeId(qrcodeId);
groupIncomeSearchDto.setTypeCode(type);
Map<Long, GroupMoneyDto> saleDetail4Group = tradeConsr.getSaleDetail4Group(groupIncomeSearchDto);
Map<Long, AppDto> appDtoMap;
Map<Long, ProductDto> productDtoMap;
if ("APP".equals(type)){
appDtoMap = appConsr.mapByIds(rescourceIds);
recordList.forEach(e ->{
if (!MapUtils.isEmpty(appDtoMap) && null != appDtoMap.get(e.getRescourceId())){
e.setRescourceName(appDtoMap.get(e.getRescourceId()).getTitle());
}
if (!MapUtils.isEmpty(saleDetail4Group) && null != saleDetail4Group.get(e.getRescourceId())){
e.setSaleCount(saleDetail4Group.get(e.getRescourceId()).getSaleCount());
e.setTotalSale(new BigDecimal(saleDetail4Group.get(e.getRescourceId()).getSaleMoney()));
}else {
e.setSaleCount(0L);
e.setTotalSale(BigDecimal.ZERO);
}
e.setType("APP");
if (null == rescourceIncome.get(e.getRescourceId())){
e.setTotalIncome(BigDecimal.ZERO);
}else {
e.setTotalIncome(rescourceIncome.get(e.getRescourceId()));
}
});
}else {
productDtoMap = productConsr.getProBasesByIds(rescourceIds);
recordList.forEach(e ->{
if (!MapUtils.isEmpty(productDtoMap) && null != productDtoMap.get(e.getRescourceId())){
e.setRescourceName(productDtoMap.get(e.getRescourceId()).getProductName());
}
e.setType("PRODUCT");
if (null == rescourceIncome.get(e.getRescourceId())){
e.setTotalIncome(BigDecimal.ZERO);
}else {
e.setTotalIncome(rescourceIncome.get(e.getRescourceId()));
}
if (!MapUtils.isEmpty(saleDetail4Group) && null != saleDetail4Group.get(e.getRescourceId())){
e.setSaleCount(saleDetail4Group.get(e.getRescourceId()).getSaleCount());
e.setTotalSale(new BigDecimal(saleDetail4Group.get(e.getRescourceId()).getSaleMoney()));
}else {
e.setSaleCount(0L);
e.setTotalSale(BigDecimal.ZERO);
}
});
}
}
@Override
public List<GroupScanTrendVO> getGroupScanTrend(GroupScanTrendParamVO groupScanTrendParamVO, Long adviserId) {
Integer dayNum = groupScanTrendParamVO.getDayNum();
if (dayNum == null) {
groupScanTrendParamVO.setDayNum(30);
dayNum = 30;
}
Date startDate = groupScanTrendParamVO.getStartDate();
Date endDate = groupScanTrendParamVO.getEndDate();
Long bookGroupId = groupScanTrendParamVO.getBookGroupId();
Long classifyId = groupScanTrendParamVO.getClassifyId();
Long wxGroupId = groupScanTrendParamVO.getWxGroupId();
List<Date> dateList = settlementConsr.getDateList(dayNum, startDate, endDate);
List<GroupScanTrendVO> groupScanTrendVOS = appClickRecordDao.getClickTrend(groupScanTrendParamVO);
List<Date> collect = groupScanTrendVOS.stream().map(GroupScanTrendVO::getDate).collect(Collectors.toList());
List<ClassifyPayDetailDto> groupBuyCount = tradeConsr.getGroupBuyCount(bookGroupId, classifyId, wxGroupId, startDate, endDate);
List<String> tradeDate = groupBuyCount.stream().map(ClassifyPayDetailDto::getDivideDate).collect(Collectors.toList());
if (dateList.size() > groupScanTrendVOS.size()) {
dateList.forEach(e -> {
if (!collect.contains(e)) {
GroupScanTrendVO groupScanTrendVO = new GroupScanTrendVO();
groupScanTrendVO.setDate(e);
groupScanTrendVO.setScanCount(0L);
groupScanTrendVOS.add(groupScanTrendVO);
}
});
}
if (ListUtils.isEmpty(groupBuyCount)){
groupScanTrendVOS.forEach( e -> e.setBuyCount(0L));
}else {
groupScanTrendVOS.forEach(e -> {
for (ClassifyPayDetailDto classifyPayDetailDto : groupBuyCount) {
if (DateUtils.formatDate(e.getDate()).equals(classifyPayDetailDto.getDivideDate())) {
e.setBuyCount(classifyPayDetailDto.getBuyCount());
} else {
e.setBuyCount(0L);
}
}
});
}
return groupScanTrendVOS;
}
@Override
public PageBeanNew<GroupStatisticVO> getClassifyStatistic(Long bookGroupId, Long adviserId, Integer currentPage, Integer numPerPage) {
PageParam pageParam = new PageParam(currentPage,numPerPage);
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bookGroupId",bookGroupId);
PageBeanNew<GroupStatisticVO> pageClassify = bookGroupClassifyDao.listPageNew(pageParam, paramMap, "pageClassify");
List<GroupStatisticVO> recordList = pageClassify.getRecordList();
if (ListUtils.isEmpty(recordList)){
return new PageBeanNew<>();
}
List<Long> classifyIds = recordList.stream().map(GroupStatisticVO::getClassifyId).collect(Collectors.toList());
if (ListUtils.isEmpty(classifyIds)){
return new PageBeanNew<>();
}
Map<Long, ClickClassifyDTO> longClickClassifyDTOMap = bookGroupClassifyDao.mapClickClassify(classifyIds);
GetGroupClassifyIncomeDTO getGroupClassifyIncomeDTO = new GetGroupClassifyIncomeDTO();
getGroupClassifyIncomeDTO.setClassifyIds(classifyIds);
getGroupClassifyIncomeDTO.setPartyId(adviserId);
getGroupClassifyIncomeDTO.setRoleId(5L);
Map<Long, BigDecimal> classifyIncome = bookConsr.getClassifyIncome(getGroupClassifyIncomeDTO);
Map<Long, Long> mapMemberCount = wechatGroupConsr.getclassifyMemberCount(classifyIds);
recordList.forEach(e ->{
if (longClickClassifyDTOMap.get(e.getClassifyId()) != null){
Long count = longClickClassifyDTOMap.get(e.getClassifyId()).getCount()==null?0L:longClickClassifyDTOMap.get(e.getClassifyId()).getCount();
e.setClickCount(count);
}
if (BigDecimal.ZERO.compareTo(e.getPrice()) ==0){
e.setIsFree(1);
}else {
e.setIsFree(0);
}
if (!MapUtils.isEmpty(classifyIncome)){
e.setIncome(classifyIncome.get(e.getClassifyId()));
}else {
e.setIncome(BigDecimal.ZERO);
}
if (!MapUtils.isEmpty(mapMemberCount)){
e.setInGroupPersonCount(mapMemberCount.get(e.getClassifyId()));
}else {
e.setInGroupPersonCount(0L);
}
});
return pageClassify;
}
@Override
public List<WxGroupStatisticVO> getQrcodeStatistic(Long bookGroupId, Long classifyId, Long adviserId) {
List<ClassifyQrcodeVO> qrcodeByClassify = groupQrcodeBiz.getQrcodeByClassify(bookGroupId, classifyId);
if (ListUtils.isEmpty(qrcodeByClassify)){
return new ArrayList<>();
}
List<Long> qrcodeIds = qrcodeByClassify.stream().map(ClassifyQrcodeVO::getId).collect(Collectors.toList());
List<String> wxGroupIds = qrcodeByClassify.stream().map(ClassifyQrcodeVO::getWeixinGroupId).collect(Collectors.toList());
GetGroupQrcodeIncomeDTO getGroupQrcodeIncomeDTO = new GetGroupQrcodeIncomeDTO();
getGroupQrcodeIncomeDTO.setRoleId(5L);
getGroupQrcodeIncomeDTO.setQrcodeIds(qrcodeIds);
getGroupQrcodeIncomeDTO.setPartyId(adviserId);
Map<Long, BigDecimal> qrcodeIncome = bookConsr.getQrcodeIncome(getGroupQrcodeIncomeDTO);
Map<String, GroupMemberStatisDTO> groupMemberStatisDTOMap = wechatGroupConsr.listGroupMemberStatisInfo(wxGroupIds);
List<WxGroupStatisticVO> wxGroupStatisticVOS = new ArrayList<>();
qrcodeByClassify.forEach(e ->{
WxGroupStatisticVO wxGroupStatisticVO = new WxGroupStatisticVO();
wxGroupStatisticVO.setCreatedTime(e.getCreatedTime());
wxGroupStatisticVO.setGroupPersonCount(e.getUserNumber().longValue());
if (MapUtils.isEmpty(qrcodeIncome)){
wxGroupStatisticVO.setIncome(BigDecimal.ZERO);
}else {
wxGroupStatisticVO.setIncome(qrcodeIncome.get(e.getId()));
}
if (MapUtils.isEmpty(groupMemberStatisDTOMap)){
wxGroupStatisticVO.setInGroupPersonCount(0L);
}else {
wxGroupStatisticVO.setInGroupPersonCount(groupMemberStatisDTOMap.get(e.getWeixinGroupId()).getJoinCount().longValue());
}
wxGroupStatisticVO.setQrcodeId(e.getId());
wxGroupStatisticVO.setWxGroupName(e.getGroupName());
wxGroupStatisticVOS.add(wxGroupStatisticVO);
});
return wxGroupStatisticVOS;
}
@Override
public TotalRescourceDataVO getTotalRescourceData(Long bookGroupId, Long adviserId, Long classifyId, Long qrcodeId, String type) {
TotalRescourceDataVO totalRescourceDataVO = new TotalRescourceDataVO();
List<Long> rescourceIds = appClickRecordDao.getRescourceIds(bookGroupId, classifyId, qrcodeId, type);
Long rescourceTotalClick = appClickRecordDao.getRescourceTotalClick(bookGroupId, classifyId, qrcodeId, type);
totalRescourceDataVO.setClickCount(rescourceTotalClick == null?0L:rescourceTotalClick);
GroupRescourceIncomeParamDTO groupRescourceIncomeParamDTO = new GroupRescourceIncomeParamDTO();
groupRescourceIncomeParamDTO.setBookGroupId(bookGroupId);
groupRescourceIncomeParamDTO.setClassifyId(classifyId);
groupRescourceIncomeParamDTO.setQrcodeId(qrcodeId);
groupRescourceIncomeParamDTO.setType(type);
groupRescourceIncomeParamDTO.setRescourceIds(rescourceIds);
groupRescourceIncomeParamDTO.setPartyId(adviserId);
groupRescourceIncomeParamDTO.setRoleId(5L);
BigDecimal rescourceTotalIncome = bookConsr.getRescourceTotalIncome(groupRescourceIncomeParamDTO);
totalRescourceDataVO.setTotalIncome(rescourceTotalIncome == null?BigDecimal.ZERO:rescourceTotalIncome);
BigDecimal totalSale = tradeConsr.getTotalSale(bookGroupId, classifyId, qrcodeId, type);
totalRescourceDataVO.setTotalSale(totalSale);
return totalRescourceDataVO;
}
@Override
public Map<String, String> exportRescourceIncomeData(Long bookGroupId, Long adviserId) {
List<StatisticsIncomeDto> appStatisticsIncomeDtos = new ArrayList<>();
List<StatisticsIncomeDto> productStatisticsIncomeDtos = new ArrayList<>();
List<ResourcesStatisticVO> appClickStatistics = appClickRecordDao.getClickStatistics(bookGroupId, null, null, "APP");
List<ResourcesStatisticVO> productClickStatistics = appClickRecordDao.getClickStatistics(bookGroupId, null, null, "PRODUCT");
if (!ListUtils.isEmpty(appClickStatistics)){
setInfo(appClickStatistics, bookGroupId, null, null, "APP", adviserId);
//获取挂在应用下的商品信息
ProductStaticUnderAppMapDTO productStaticUnderAppMapDTO = new ProductStaticUnderAppMapDTO();
productStaticUnderAppMapDTO.setBookGroupId(bookGroupId);
productStaticUnderAppMapDTO.setAppIds(appClickStatistics.stream().map(ResourcesStatisticVO::getRescourceId).collect(Collectors.toList()));
productStaticUnderAppMapDTO.setPartyId(adviserId);
productStaticUnderAppMapDTO.setRoleId(5L);
// Map<Long, List<com.pcloud.settlementcenter.record.dto.ResourcesStatisticVO>> productStaticUnderApp = settlementConsr.getProductStaticUnderApp(productStaticUnderAppMapDTO);
// Map<Long, List<StatisticsIncomeDto>> productStaticUnderAppMap = copy(productStaticUnderApp,bookGroupId);
appClickStatistics.forEach(e ->{
StatisticsIncomeDto statisticsIncomeDto = new StatisticsIncomeDto();
statisticsIncomeDto.setAppId(e.getRescourceId());
statisticsIncomeDto.setBookGroupId(bookGroupId);
statisticsIncomeDto.setIncome(e.getTotalIncome());
statisticsIncomeDto.setAppName(e.getRescourceName());
statisticsIncomeDto.setSaleCounts(e.getSaleCount().intValue());
statisticsIncomeDto.setSaleMoney(e.getTotalSale());
statisticsIncomeDto.setScanCounts(e.getBrowseCount().intValue());
// statisticsIncomeDto.setItemList(productStaticUnderAppMap.get(e.getRescourceId()));
appStatisticsIncomeDtos.add(statisticsIncomeDto);
});
}
if (!ListUtils.isEmpty(productClickStatistics)){
setInfo(productClickStatistics, bookGroupId, null, null, "PRODUCT", adviserId);
productClickStatistics.forEach(e ->{
StatisticsIncomeDto statisticsIncomeDto = new StatisticsIncomeDto();
statisticsIncomeDto.setProductId(e.getRescourceId());
statisticsIncomeDto.setBookGroupId(bookGroupId);
statisticsIncomeDto.setIncome(e.getTotalIncome());
statisticsIncomeDto.setProductName(e.getRescourceName());
statisticsIncomeDto.setSaleCounts(e.getSaleCount().intValue());
statisticsIncomeDto.setSaleMoney(e.getTotalSale());
statisticsIncomeDto.setScanCounts(e.getBrowseCount().intValue());
productStatisticsIncomeDtos.add(statisticsIncomeDto);
});
}
TotalRescourceDataVO appTotalRescourceData = getTotalRescourceData(bookGroupId, null, null, null, "APP");
StatisticsIncomeDto appSumStatistics = setResourceSumStatistics(appTotalRescourceData);
TotalRescourceDataVO productTotalRescourceData = getTotalRescourceData(bookGroupId, null, null, null, "PRODUCT");
StatisticsIncomeDto productSumStatistics = setResourceSumStatistics(productTotalRescourceData);
Map<String, Object> dataMap = new HashMap<>();
BookGroupDTO bookGroupDTO = bookGroupDao.getDTOById(bookGroupId);
if (bookGroupDTO == null){
bookGroupDTO = new BookGroupDTO();
}
String groupQrcodeName = bookGroupDTO.getGroupQrcodeName()== null?" ":bookGroupDTO.getGroupQrcodeName();
String title = "社群码" + groupQrcodeName + "的收益列表";
dataMap.put("appIncomeList", appStatisticsIncomeDtos);
dataMap.put("productIncomeList", productStatisticsIncomeDtos);
dataMap.put("title", title);
dataMap.put("appSumStatistics", appSumStatistics);
dataMap.put("productSumStatistics", productSumStatistics);
String today = DateUtils.formatDate(DateUtils.nowTimeStamp(), DateUtils.DATE_FORMAT_DATEONLY);
String fileName = title+ "-" + today;
String filePath = "";
try {
LOGGER.info("生成Excel【START】");
filePath = ExcelExportor.uploadExcel(this.getClass(), dataMap, "template_bookGroupStatistics.ftl");
LOGGER.info("生成Excel【END】" + filePath);
} catch (Exception e) {
LOGGER.error("生成Excel异常+++" + e.getMessage(), e);
throw new BookBizException(BookBizException.ERROR, "导出失败,请联系管理员");
}
Map<String, String> resultMap = new HashMap<>();
resultMap.put("fileName", fileName);
resultMap.put("fileUrl", filePath);
return resultMap;
}
private StatisticsIncomeDto setResourceSumStatistics(TotalRescourceDataVO totalRescourceDataVO){
if (totalRescourceDataVO == null){
return new StatisticsIncomeDto();
}
Long clickCount = totalRescourceDataVO.getClickCount();
BigDecimal totalIncome = totalRescourceDataVO.getTotalIncome();
BigDecimal totalSale = totalRescourceDataVO.getTotalSale();
StatisticsIncomeDto statisticsIncomeDto = new StatisticsIncomeDto();
statisticsIncomeDto.setScanCounts(clickCount.intValue());
statisticsIncomeDto.setIncome(totalIncome);
statisticsIncomeDto.setSaleMoney(totalSale);
return statisticsIncomeDto;
}
private Map<Long, List<StatisticsIncomeDto>> copy(Map<Long, List<com.pcloud.settlementcenter.record.dto.ResourcesStatisticVO>> productStaticUnderApp,Long bookGroupId){
Map<Long, List<StatisticsIncomeDto>> productStaticUnderAppMap = new HashMap<>();
if (MapUtils.isEmpty(productStaticUnderApp)){
return productStaticUnderAppMap;
}
List<StatisticsIncomeDto> productStatisticsIncomeDtos = new ArrayList<>();
productStaticUnderApp.forEach((k,v) ->{
v.forEach(e ->{
StatisticsIncomeDto statisticsIncomeDto = new StatisticsIncomeDto();
statisticsIncomeDto.setProductId(e.getRescourceId());
statisticsIncomeDto.setIncome(e.getTotalIncome());
statisticsIncomeDto.setProductName(e.getRescourceName());
statisticsIncomeDto.setSaleCounts(e.getSaleCount() == null ? 0 : e.getSaleCount().intValue());
statisticsIncomeDto.setSaleMoney(e.getTotalSale());
statisticsIncomeDto.setScanCounts(e.getBrowseCount() == null? 0 :e.getBrowseCount().intValue());
productStatisticsIncomeDtos.add(statisticsIncomeDto);
});
productStaticUnderAppMap.put(k,productStatisticsIncomeDtos);
});
return productStaticUnderAppMap;
}
@Override
public Map<Long, Long> getResourcesBrowseCount(ResourceBrowseParamDto resourceBrowseParamDto) {
Map<Long, Long> resultMap = new HashMap<>();
Long bookGroupId = resourceBrowseParamDto.getBookGroupId();
Long classifyId = resourceBrowseParamDto.getClassifyId();
Long qrcodeId = resourceBrowseParamDto.getQrcodeId();
String typeCode = resourceBrowseParamDto.getTypeCode();
List<Long> ids = resourceBrowseParamDto.getIds();
if (ListUtils.isEmpty(ids)){
return resultMap;
}
Map<String, Object> map = new HashMap<>();
map.put("bookGroupId", bookGroupId);
map.put("classifyId", classifyId);
map.put("qrcodeId", qrcodeId);
map.put("type", typeCode);
map.put("rescourceIds", ids);
Map<Long, ResourceClickVO> resourceClick = appClickRecordDao.getResourceClick(map);
if (MapUtils.isEmpty(resourceClick)){
return resultMap;
}
resourceClick.forEach((k,v) ->{
resultMap.put(k,v.getClickCount());
});
return resultMap;
}
}
......@@ -21,20 +21,7 @@ import com.pcloud.book.group.dao.BookQrcodeUserDao;
import com.pcloud.book.group.dao.JoinGroupCipherDao;
import com.pcloud.book.group.dao.LearningReportBrowseRecordDao;
import com.pcloud.book.group.dao.LearningReportTouchRecordDao;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.BookWxQrcodeDTO;
import com.pcloud.book.group.dto.ClassifyDTO;
import com.pcloud.book.group.dto.ClassifyLearningCountDto;
import com.pcloud.book.group.dto.ClassifyLearningReportDto;
import com.pcloud.book.group.dto.GroupAndUserNumberDTO;
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.GroupQrcodeInfoDTO;
import com.pcloud.book.group.dto.ProAssocGroupAndUserNumberDTO;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.entity.BookQrcodeUser;
import com.pcloud.book.group.entity.GroupQrcode;
......@@ -194,10 +181,12 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
log.info("[新增分类] : 可用微信群数量:{}个", wechatGroupNum);
throw new BookBizException(BookBizException.PARAM_IS_NULL, "群二维码数量不足,您可以明天再创建群。");
}
}
Integer generation = null;
if (new Integer(2).equals(qrcodeNameAndProId.getJoinGroupType())) {
generation = 3;
}
WeixinQrcodeDTO oneQrcode = weixinQrcodeBiz.getOneQrcode(generation);
if (oneQrcode == null) {
......@@ -957,6 +946,15 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
return pageBeanNew;
}
@Override
public Map<Long, BookClassifyDTO> getGroupClassifyCount(List<Long> bookIds) {
if (!ListUtils.isEmpty(bookIds)){
return bookGroupClassifyDao.getGroupClassifyCount(bookIds);
}else {
return new HashMap<>();
}
}
@Transactional(rollbackFor = Exception.class)
@ParamLog("更新是否开启微学习报告")
@Override
......@@ -1054,4 +1052,20 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
bookGroupClassifyDao.dragSortClassify(classifyIds);
}
@Override
public void clickClassify(Long wechatUserId, Long bookGroupId, Long classifyId) {
bookGroupClassifyDao.addClickClassify(wechatUserId,bookGroupId,classifyId);
}
@Override
public List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId) {
List<ListClassifyVO> classifyVOS = bookGroupClassifyDao.getClassifyIngoreDelete(bookGroupId);
if (ListUtils.isEmpty(classifyVOS)){
return new ArrayList<>();
}
return classifyVOS;
}
}
......@@ -243,6 +243,15 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
return pageBeanNew;
}
@Override
public List<ClassifyQrcodeVO> getQrcodeByClassify(Long bookGroupId, Long classifyId) {
List<ClassifyQrcodeVO> qrcodeByClassify = groupQrcodeDao.getQrcodeByClassify(classifyId);
if (ListUtils.isEmpty(qrcodeByClassify)){
return new ArrayList<>();
}
return qrcodeByClassify;
}
@ParamLog(value = "设置关键词次数", isBefore = false)
private void setKeywordCount(List<ClassifyQrcodeVO> classifyQrcodeVOS) {
if (ListUtils.isEmpty(classifyQrcodeVOS)) {
......
......@@ -3,9 +3,14 @@ package com.pcloud.book.group.dao;
import com.pcloud.book.group.dto.AppClickDTO;
import com.pcloud.book.group.dto.AppStatisticsDTO;
import com.pcloud.book.group.entity.AppClickRecord;
import com.pcloud.book.group.vo.GroupScanTrendParamVO;
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.BaseDao;
import java.util.List;
import java.util.Map;
public interface AppClickRecordDao extends BaseDao<AppClickRecord> {
/**
......@@ -17,4 +22,29 @@ public interface AppClickRecordDao extends BaseDao<AppClickRecord> {
* 获取最近点击
*/
List<AppClickDTO> getRecentlyClick(Long wechatUserId, Long qrcodeId, Integer top);
/**
* 获取资源点击趋势
*/
List<GroupScanTrendVO> getClickTrend(GroupScanTrendParamVO groupScanTrendParamVO);
/**
* 获取资源点击次数
*/
Map<Long, ResourceClickVO> getResourceClick(Map<String,Object> map);
/**
* 获取资源点击总数
*/
Long getRescourceTotalClick(Long bookGroupId,Long classifyId,Long qrcodeId,String type);
/**
* 获取资源id
*/
List<Long> getRescourceIds(Long bookGroupId,Long classifyId,Long qrcodeId,String type);
/**
* 获取资源点击数
*/
List<ResourcesStatisticVO> getClickStatistics(Long bookGroupId,Long classifyId,Long qrcodeId,String type);
}
......@@ -4,4 +4,6 @@ import com.pcloud.book.group.entity.AppTouchRecord;
import com.pcloud.common.core.dao.BaseDao;
public interface AppTouchRecordDao extends BaseDao<AppTouchRecord> {
Long getCountByBokkGroupId(Long bookGroupId, String type);
}
......@@ -234,6 +234,8 @@ public interface BookGroupClassifyDao extends BaseDao<BookGroupClassify> {
*/
List<ClassifyKeywordDTO> getClassifyStatistics(Long bookId);
Map<Long,BookClassifyDTO> getGroupClassifyCount(List<Long> bookIds);
GroupClassifyQrcodeDTO getClassifyQrcodeInfoByName(String weixinGroupName);
/**
......@@ -241,8 +243,16 @@ public interface BookGroupClassifyDao extends BaseDao<BookGroupClassify> {
*/
void updateHasOpenLearningReport(Long classifyId, Boolean hasOpenLearningReport, Long partyId);
/**
* 拖动排序
*/
void dragSortClassify(List<Long> classifyIds);
void addClickClassify(Long wechatUserId, Long bookGroupId, Long classifyId);
Map<Long, ClickClassifyDTO> mapClickClassify(List<Long> classifyIds);
List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId);
}
......@@ -3,6 +3,7 @@ package com.pcloud.book.group.dao;
import com.pcloud.book.advertising.dto.WeixinClassifyInfoDTO;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.vo.ClassifyQrcodeVO;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO;
import com.pcloud.book.group.vo.ListGroupQrcodeResponseVO;
import com.pcloud.common.core.dao.BaseDao;
......@@ -204,4 +205,9 @@ public interface GroupQrcodeDao extends BaseDao<GroupQrcode> {
*/
void updateRiddleOpenStatus(Long qrcodeId, Boolean status);
/**
* 根据分类id获取分类下的群---不分页
*/
List<ClassifyQrcodeVO> getQrcodeByClassify(Long classifyId);
}
......@@ -4,6 +4,10 @@ import com.pcloud.book.group.dao.AppClickRecordDao;
import com.pcloud.book.group.dto.AppClickDTO;
import com.pcloud.book.group.dto.AppStatisticsDTO;
import com.pcloud.book.group.entity.AppClickRecord;
import com.pcloud.book.group.vo.GroupScanTrendParamVO;
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;
......@@ -35,4 +39,44 @@ public class AppClickRecordDaoImpl extends BaseDaoImpl<AppClickRecord> implement
map.put("top", top);
return this.getSqlSession().selectList(this.getStatement("getRecentlyClick"), map);
}
@Override
public List<GroupScanTrendVO> getClickTrend(GroupScanTrendParamVO groupScanTrendParamVO) {
return this.getSqlSession().selectList(this.getStatement("getClickTrend"), groupScanTrendParamVO);
}
@Override
public Map<Long, ResourceClickVO> getResourceClick(Map<String, Object> map) {
return this.getSqlSession().selectMap(this.getStatement("getResourceClick"), map,"rescourceId");
}
@Override
public Long getRescourceTotalClick(Long bookGroupId, Long classifyId, Long qrcodeId, String type) {
Map<String, Object> map = new HashMap<>();
map.put("qrcodeId", qrcodeId);
map.put("bookGroupId", bookGroupId);
map.put("classifyId", classifyId);
map.put("type", type);
return this.getSqlSession().selectOne(this.getStatement("getRescourceTotalClick"), map);
}
@Override
public List<Long> getRescourceIds(Long bookGroupId, Long classifyId, Long qrcodeId, String type) {
Map<String, Object> map = new HashMap<>();
map.put("qrcodeId", qrcodeId);
map.put("bookGroupId", bookGroupId);
map.put("classifyId", classifyId);
map.put("type", type);
return this.getSqlSession().selectList(this.getStatement("getRescourceIds"), map);
}
@Override
public List<ResourcesStatisticVO> getClickStatistics(Long bookGroupId, Long classifyId, Long qrcodeId, String type) {
Map<String, Object> map = new HashMap<>();
map.put("qrcodeId", qrcodeId);
map.put("bookGroupId", bookGroupId);
map.put("classifyId", classifyId);
map.put("type", type);
return this.getSqlSession().selectList(this.getStatement("getClickStatistics"), map);
}
}
......@@ -5,6 +5,9 @@ import com.pcloud.book.group.entity.AppTouchRecord;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @Description
* @Author ruansiyuan
......@@ -12,4 +15,13 @@ import org.springframework.stereotype.Component;
**/
@Component("appTouchRecordDao")
public class AppTouchRecordDaoImpl extends BaseDaoImpl<AppTouchRecord> implements AppTouchRecordDao {
@Override
public Long getCountByBokkGroupId(Long bookGroupId, String type) {
Map<String, Object> map = new HashMap<>();
map.put("bookGroupId",bookGroupId);
map.put("type",type);
return this.getSqlSession().selectOne(this.getStatement("getCountByBokkGroupId"), map);
}
}
......@@ -199,6 +199,11 @@ public class BookGroupClassifyDaoImpl extends BaseDaoImpl<BookGroupClassify> imp
}
@Override
public Map<Long, BookClassifyDTO> getGroupClassifyCount(List<Long> bookIds) {
return this.getSessionTemplate().selectMap(getStatement("getGroupClassifyCount"), bookIds,"bookId");
}
@Override
public GroupClassifyQrcodeDTO getClassifyQrcodeInfoByName(String weixinGroupName) {
return this.getSessionTemplate().selectOne(getStatement("getClassifyQrcodeInfoByName"), weixinGroupName);
}
......@@ -218,4 +223,25 @@ public class BookGroupClassifyDaoImpl extends BaseDaoImpl<BookGroupClassify> imp
paramMap.put("classifyIds", classifyIds);
this.getSqlSession().update(this.getStatement("dragSortClassify"), paramMap);
}
@Override
public void addClickClassify(Long wechatUserId, Long bookGroupId, Long classifyId) {
Map<String, Object> paramMap = new HashMap();
paramMap.put("classifyId", classifyId);
paramMap.put("wechatUserId", wechatUserId);
paramMap.put("bookGroupId", bookGroupId);
this.getSqlSession().insert(this.getStatement("addClickClassify"), paramMap);
}
@Override
public Map<Long, ClickClassifyDTO> mapClickClassify(List<Long> classifyIds) {
Map<String, Object> paramMap = new HashMap();
paramMap.put("classifyIds", classifyIds);
return this.getSqlSession().selectMap(this.getStatement("mapClickClassify"), paramMap,"classifyId");
}
@Override
public List<ListClassifyVO> getClassifyIngoreDelete(Long bookGroupId) {
return this.getSqlSession().selectList(this.getStatement("getClassifyIngoreDelete"), bookGroupId);
}
}
......@@ -6,6 +6,7 @@ import com.pcloud.book.advertising.dto.WeixinClassifyInfoDTO;
import com.pcloud.book.group.dao.GroupQrcodeDao;
import com.pcloud.book.group.dto.*;
import com.pcloud.book.group.entity.GroupQrcode;
import com.pcloud.book.group.vo.ClassifyQrcodeVO;
import com.pcloud.book.group.vo.GroupQrcodeBaseInfoVO;
import com.pcloud.book.group.vo.ListGroupQrcodeResponseVO;
import com.pcloud.common.core.dao.BaseDaoImpl;
......@@ -197,4 +198,9 @@ public class GroupQrcodeDaoImpl extends BaseDaoImpl<GroupQrcode> implements Grou
getSessionTemplate().update(getStatement("updateRiddleOpenStatus"), map);
}
public List<ClassifyQrcodeVO> getQrcodeByClassify(Long classifyId) {
return this.getSqlSession().selectList(this.getStatement("getQrcodeByClassify"), classifyId);
}
}
......@@ -133,6 +133,11 @@ public class BookGroupDTO extends BaseDto {
private String bookName;
/**
* 编号
*/
private String bookNumber;
private String url;
private Long bookClockInfoId;
......@@ -364,6 +369,7 @@ public class BookGroupDTO extends BaseDto {
this.isShowBookName = isShowBookName;
}
public Integer getJoinGroupType() {
return joinGroupType;
}
......@@ -372,6 +378,14 @@ public class BookGroupDTO extends BaseDto {
this.joinGroupType = joinGroupType;
}
public String getBookNumber() {
return bookNumber;
}
public void setBookNumber(String bookNumber) {
this.bookNumber = bookNumber;
}
@Override
public String toString() {
return "BookGroupDTO{" +
......@@ -399,10 +413,13 @@ public class BookGroupDTO extends BaseDto {
", bookImg='" + bookImg + '\'' +
", isbn='" + isbn + '\'' +
", bookName='" + bookName + '\'' +
", bookNumber='" + bookNumber + '\'' +
", url='" + url + '\'' +
", bookClockInfoId=" + bookClockInfoId +
", isShowBookName=" + isShowBookName +
", joinGroupType=" + joinGroupType +
"} " + super.toString();
}
}
\ No newline at end of file
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
* @author 戴兴
* @description TODO
* @date 2019/8/22 21:49
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ClickClassifyDTO implements Serializable {
@ApiModelProperty("社群码标识")
private Long bookGroupId;
@ApiModelProperty("分类标识")
private Long classifyId;
@ApiModelProperty("点击次数")
private Long count;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public Long getClassifyId() {
return classifyId;
}
public void setClassifyId(Long classifyId) {
this.classifyId = classifyId;
}
public Long getCount() {
return count;
}
public void setCount(Long count) {
this.count = count;
}
@Override
public String toString() {
return "ClickClassifyDTO{" +
"bookGroupId=" + bookGroupId +
", classifyId=" + classifyId +
", count=" + count +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.dto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @author 戴兴
* @description TODO
* @date 2019/8/8 21:39
*/
public class StatisticsIncomeDto implements Serializable {
/**
*
*/
private static final long serialVersionUID = 4695716936925368521L;
/**
* 应用标识
*/
private Long appId;
/**
* 书刊标识
*/
private Long bookGroupId;
/**
* 应用名称
*/
private String appName;
/**
* 浏览量
*/
private Integer scanCounts;
/**
* 销售量
*/
private Integer saleCounts;
/**
* 销售额
*/
private BigDecimal saleMoney;
/**
* 收益额
*/
private BigDecimal income;
/**
* 商品标识
*/
private Long productId;
/**
* 商品名称
*/
private String productName;
/**
* 收益时间
*/
private String dateTime;
/**
* 子项
*/
private List<StatisticsIncomeDto> itemList;
public Long getAppId() {
return appId;
}
public void setAppId(Long appId) {
this.appId = appId;
}
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public Integer getScanCounts() {
return scanCounts;
}
public void setScanCounts(Integer scanCounts) {
this.scanCounts = scanCounts;
}
public Integer getSaleCounts() {
return saleCounts;
}
public void setSaleCounts(Integer saleCounts) {
this.saleCounts = saleCounts;
}
public BigDecimal getSaleMoney() {
return saleMoney;
}
public void setSaleMoney(BigDecimal saleMoney) {
this.saleMoney = saleMoney;
}
public BigDecimal getIncome() {
return income;
}
public void setIncome(BigDecimal income) {
this.income = income;
}
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getDateTime() {
return dateTime;
}
public void setDateTime(String dateTime) {
this.dateTime = dateTime;
}
public List<StatisticsIncomeDto> getItemList() {
return itemList;
}
public void setItemList(List<StatisticsIncomeDto> itemList) {
this.itemList = itemList;
}
@Override
public String toString() {
return "StatisticsIncomeDto{" +
"appId=" + appId +
", bookGroupId=" + bookGroupId +
", appName='" + appName + '\'' +
", scanCounts=" + scanCounts +
", saleCounts=" + saleCounts +
", saleMoney=" + saleMoney +
", income=" + income +
", productId=" + productId +
", productName='" + productName + '\'' +
", dateTime='" + dateTime + '\'' +
", itemList=" + itemList +
'}';
}
}
\ No newline at end of file
......@@ -172,6 +172,7 @@ public interface BookGroupClassifyFacade {
@RequestParam(value = "keyword", required = false) @ApiParam("关键词") String keyword
) throws BizException, PermissionException;
@ApiOperation("拖动排序")
@PostMapping("dragSortClassify")
ResponseDto<?> dragSortClassify(
......@@ -179,4 +180,20 @@ public interface BookGroupClassifyFacade {
@RequestBody List<Long> classifyIds
) throws BizException, PermissionException;
@ApiOperation("埋点记录点击分类次数")
@GetMapping("clickClassify")
ResponseDto<?> clickClassify(
@CookieValue("userinfo") @ApiParam("cookie信息") String userInfo,
@RequestParam("bookGroupId") @ApiParam("社群码id") Long bookGroupId,
@RequestParam("classifyId") @ApiParam("群分类id") Long classifyId) throws BizException, PermissionException;
@ApiOperation("获取所有群分类包括已删除的")
@GetMapping("getClassifyIngoreDelete")
ResponseDto<?> getClassifyIngoreDelete(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("bookGroupId") @ApiParam("社群码id") Long bookGroupId) throws BizException, PermissionException;
}
package com.pcloud.book.group.facade;
import com.pcloud.book.group.entity.BookGroupClassify;
import com.pcloud.book.group.vo.*;
import com.pcloud.common.page.PageBeanNew;
import org.codehaus.jackson.JsonParseException;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;
......@@ -24,6 +26,8 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* Description 社群书群二维码接口
* Created by PENG on 2019/4/17.
......@@ -276,6 +280,7 @@ public interface BookGroupFacade {
@RequestHeader("token") String token
) throws BizException, PermissionException, JsonParseException;
@ApiOperation("删除社群码")
@GetMapping("deleteBookGroup")
ResponseDto<?> deleteBookGroup(
......@@ -295,4 +300,70 @@ public interface BookGroupFacade {
ResponseDto<?> getAllLargeTemplet(
@RequestHeader("token") String token
) throws BizException, PermissionException, JsonParseException;
@ApiOperation("获取社群书数据")
@RequestMapping(value = "getBookGroupStatisByBookGroupId",method = RequestMethod.GET)
ResponseDto<?> getBookGroupStatisByBookGroupId(@RequestParam("bookGroupId")Long bookGroupId) throws BizException;
@ApiOperation(value = "收益统计--pc", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "groupIncomeStaticParamVO", value = "GroupIncomeStaticParamVO", required = true, dataType = "GroupIncomeStaticParamVO", paramType = "body")
})
@RequestMapping(value ="getGroupIncomeStatic",method = RequestMethod.POST)
public ResponseDto<PageBeanNew<ResourcesStatisticVO>> getGroupIncomeStatic(@RequestHeader("token") String token,
@RequestBody GroupIncomeStaticParamVO groupIncomeStaticParamVO) throws BizException, PermissionException;
@ApiOperation(value = "社群码浏览趋势图--pc", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "groupScanTrendParamVO", value = "GroupScanTrendParamVO", required = true, dataType = "GroupScanTrendParamVO", paramType = "body")
})
@RequestMapping(value ="getGroupScanTrend",method = RequestMethod.POST)
public ResponseDto<List<GroupScanTrendVO>> getGroupScanTrend(@RequestHeader("token") String token,
@RequestBody GroupScanTrendParamVO groupScanTrendParamVO) throws BizException, PermissionException;
@ApiOperation(value = "社群码分类统计--pc", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "bookGroupId", value = "bookGroupId", required = true, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "currentPage", value = "currentPage", required = true, dataType = "Integer", paramType = "query"),
@ApiImplicitParam(name = "numPerPage", value = "numPerPage", required = true, dataType = "Integer", paramType = "query")
})
@RequestMapping(value ="getClassifyStatistic",method = RequestMethod.GET)
public ResponseDto<?> getClassifyStatistic(@RequestHeader("token") String token,
@RequestParam(value = "bookGroupId",required = true) Long bookGroupId,
@RequestParam(value = "currentPage",required = true) Integer currentPage,
@RequestParam(value = "numPerPage",required = true) Integer numPerPage) throws BizException, PermissionException;
@ApiOperation(value = "社群码分类下的微信群统计--pc", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "bookGroupId", value = "bookGroupId", required = true, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "classifyId", value = "classifyId", required = true, dataType = "Long", paramType = "query")
})
@RequestMapping(value ="getQrcodeStatistic",method = RequestMethod.GET)
public ResponseDto<?> getQrcodeStatistic(@RequestHeader("token") String token,
@RequestParam(value = "bookGroupId",required = true) Long bookGroupId,
@RequestParam("classifyId") Long classifyId) throws BizException, PermissionException;
@ApiOperation(value = "资源数据统计--pc", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "bookGroupId", value = "bookGroupId", required = true, dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "classifyId",value = "classifyId",required = false,dataType = "Long",paramType = "query"),
@ApiImplicitParam(name = "qrcodeId",value = "qrcodeId",required = false,dataType = "Long",paramType = "query"),
@ApiImplicitParam(name = "type",value = "type",required = true,dataType = "String",paramType = "query")
})
@RequestMapping(value ="getTotalRescourceData",method = RequestMethod.GET)
public ResponseDto<?> getTotalRescourceData(@RequestHeader("token") String token, @RequestParam(value = "bookGroupId",required = true) Long bookGroupId,
@RequestParam(value = "classifyId",required = false) Long classifyId, @RequestParam(value = "qrcodeId",required = false) Long qrcodeId,
@RequestParam("type") String type) throws BizException, PermissionException;
@ApiOperation(value = "社群码资源收益数据导出--pc", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "bookGroupId", value = "bookGroupId", required = true, dataType = "Long", paramType = "query")
})
@RequestMapping(value ="exportRescourceIncomeData",method = RequestMethod.GET)
public ResponseDto<?> exportRescourceIncomeData(@RequestHeader("token") String token,
@RequestParam(value = "bookGroupId",required = true) Long bookGroupId) throws BizException, PermissionException;
}
......@@ -35,6 +35,15 @@ public interface GroupQrcodeFacade {
@RequestMapping(value = "listQrcodeByClassify", method = RequestMethod.POST)
ResponseDto<PageBeanNew> listQrcodeByClassify(@RequestHeader("token") String token, @RequestBody ListQrcodeByClassifyParamVO listQrcodeByClassifyParamVO) throws PermissionException;
@ApiOperation(value = "根据分类获取分类下二维码----不分页", httpMethod = "GET")
@ApiImplicitParams({@ApiImplicitParam(name = "token", value = "token", dataType = "String", paramType = "header"),
@ApiImplicitParam(name = "bookGroupId", value = "bookGroupId", dataType = "Long", paramType = "query"),
@ApiImplicitParam(name = "classifyId", value = "classifyId", dataType = "Long", paramType = "query")
})
@RequestMapping(value = "getQrcodeByClassify", method = RequestMethod.GET)
ResponseDto<?> getQrcodeByClassify(@RequestHeader("token") String token, @RequestParam("bookGroupId") Long bookGroupId,
@RequestParam("classifyId") Long classifyId) throws PermissionException;
@ApiOperation(value = "修改微信群名称", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "token", dataType = "String", paramType = "header"),
......
......@@ -184,6 +184,7 @@ public class BookGroupClassifyFacadeImpl implements BookGroupClassifyFacade {
return new ResponseDto<>(bookGroupClassifyBiz.listClassifyForLearningReport(currentPage,numPerPage,keyword,partyId));
}
@ApiOperation("拖动排序")
@PostMapping("dragSortClassify")
@Override
......@@ -196,4 +197,23 @@ public class BookGroupClassifyFacadeImpl implements BookGroupClassifyFacade {
return new ResponseDto<>();
}
@Override
@GetMapping("clickClassify")
public ResponseDto<?> clickClassify(@CookieValue("userInfo") String userInfo, @RequestParam("bookGroupId") Long bookGroupId,
@RequestParam("classifyId") Long classifyId) throws BizException, PermissionException {
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
bookGroupClassifyBiz.clickClassify(wechatUserId,bookGroupId,classifyId);
return new ResponseDto<>();
}
@Override
@GetMapping("getClassifyIngoreDelete")
public ResponseDto<?> getClassifyIngoreDelete(@RequestHeader("token") String token, @RequestParam("bookGroupId") Long bookGroupId) throws BizException, PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
List<ListClassifyVO> classifyVOS = bookGroupClassifyBiz.getClassifyIngoreDelete(bookGroupId);
return new ResponseDto<>(classifyVOS);
}
}
......@@ -17,7 +17,6 @@ import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import com.pcloud.common.utils.string.StringUtil;
import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -32,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.swagger.annotations.ApiOperation;
......@@ -397,6 +397,7 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
return new ResponseDto<>(bookGroupBiz.getIsShowBookName(partyId));
}
@ApiOperation("删除社群码")
@GetMapping("deleteBookGroup")
@Override
......@@ -433,4 +434,75 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
return new ResponseDto<>(bookGroupBiz.getAllLargTemplet());
}
@Override
@RequestMapping(value = "getBookGroupStatisByBookGroupId",method = RequestMethod.GET)
public ResponseDto<?> getBookGroupStatisByBookGroupId(@RequestParam("bookGroupId")Long bookGroupId) throws BizException {
return new ResponseDto<>(bookGroupBiz.getBookGroupStatisByBookGroupId(bookGroupId));
}
@Override
@RequestMapping(value ="getGroupIncomeStatic",method = RequestMethod.POST)
public ResponseDto<PageBeanNew<ResourcesStatisticVO>> getGroupIncomeStatic(@RequestHeader("token") String token,
@RequestBody GroupIncomeStaticParamVO groupIncomeStaticParamVO) throws BizException, PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
PageBeanNew<ResourcesStatisticVO> groupIncomeStatic = bookGroupBiz.getGroupIncomeStatic(groupIncomeStaticParamVO, adviserId);
return new ResponseDto<>(groupIncomeStatic);
}
@Override
@RequestMapping(value ="getGroupScanTrend",method = RequestMethod.POST)
public ResponseDto<List<GroupScanTrendVO>> getGroupScanTrend(@RequestHeader("token") String token,
@RequestBody GroupScanTrendParamVO groupScanTrendParamVO) throws BizException, PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
List<GroupScanTrendVO> groupScanTrend = bookGroupBiz.getGroupScanTrend(groupScanTrendParamVO, adviserId);
return new ResponseDto<>(groupScanTrend);
}
@Override
@RequestMapping(value ="getClassifyStatistic",method = RequestMethod.GET)
public ResponseDto<?> getClassifyStatistic(@RequestHeader("token") String token,
@RequestParam(value = "bookGroupId",required = true) Long bookGroupId,
@RequestParam(value = "currentPage",required = true) Integer currentPage,
@RequestParam(value = "numPerPage",required = true) Integer numPerPage) throws BizException, PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
PageBeanNew<GroupStatisticVO> groupQrcodeStatistic = bookGroupBiz.getClassifyStatistic(bookGroupId, adviserId,currentPage,numPerPage);
return new ResponseDto<>(groupQrcodeStatistic);
}
@Override
@RequestMapping(value ="getQrcodeStatistic",method = RequestMethod.GET)
public ResponseDto<?> getQrcodeStatistic(@RequestHeader("token") String token,
@RequestParam(value = "bookGroupId",required = true) Long bookGroupId,
@RequestParam("classifyId") Long classifyId) throws BizException, PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
List<WxGroupStatisticVO> qrcodeStatistic = bookGroupBiz.getQrcodeStatistic(bookGroupId, classifyId, adviserId);
return new ResponseDto<>(qrcodeStatistic);
}
@Override
@RequestMapping(value ="getTotalRescourceData",method = RequestMethod.GET)
public ResponseDto<?> getTotalRescourceData(@RequestHeader("token") String token, @RequestParam(value = "bookGroupId",required = true) Long bookGroupId,
@RequestParam(value = "classifyId",required = false) Long classifyId, @RequestParam(value = "qrcodeId",required = false) Long qrcodeId,
@RequestParam("type") String type) throws BizException, PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
TotalRescourceDataVO totalRescourceData = bookGroupBiz.getTotalRescourceData(bookGroupId, adviserId, classifyId, qrcodeId, type);
return new ResponseDto<>(totalRescourceData);
}
@Override
@RequestMapping(value ="exportRescourceIncomeData",method = RequestMethod.GET)
public ResponseDto<?> exportRescourceIncomeData(@RequestHeader("token") String token,
@RequestParam(value = "bookGroupId",required = true) Long bookGroupId) throws BizException, PermissionException {
Map<String, Object> map = SessionUtil.getToken4Redis(token);
Long adviserId = (Long) map.get(SessionUtil.PARTY_ID);
Map<String, String> resultMap = bookGroupBiz.exportRescourceIncomeData(bookGroupId, adviserId);
return new ResponseDto<>(resultMap);
}
}
......@@ -36,6 +36,8 @@ import java.util.Optional;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @author lily
* @date 2019/4/19 15:36
......@@ -73,6 +75,14 @@ public class GroupQrcodeFacadeImpl implements GroupQrcodeFacade {
}
@Override
@RequestMapping(value = "getQrcodeByClassify", method = RequestMethod.GET)
public ResponseDto<?> getQrcodeByClassify(@RequestHeader("token") String token, @RequestParam("bookGroupId") Long bookGroupId,
@RequestParam("classifyId") Long classifyId) throws PermissionException {
List<ClassifyQrcodeVO> qrcodeByClassify = groupQrcodeBiz.getQrcodeByClassify(bookGroupId, classifyId);
return new ResponseDto<>(qrcodeByClassify);
}
@Override
@PostMapping("modifyWechatGroupName")
@ApiOperation("修改微信群名称")
public ResponseDto<?> modifyWechatGroupName(@RequestHeader("token") String token, @RequestBody WechatGroupNameVO wechatGroupNameVO)
......
......@@ -96,4 +96,11 @@ public class BookGroupClassifyServiceImpl implements BookGroupClassifyService {
public ResponseEntity<ResponseDto<BigDecimal>> getPayPrice(@RequestParam("qrcodeId") Long qrcodeId, @RequestParam("wxUserId") String wxUserId) {
return ResponseHandleUtil.toResponse(bookGroupClassifyBiz.getPayPrice(qrcodeId, wxUserId));
}
@Override
@PostMapping("getGroupClassifyCount")
public ResponseEntity<ResponseDto<Map<Long, BookClassifyDTO>>> getGroupClassifyCount(@RequestBody List<Long> bookIds) {
Map<Long, BookClassifyDTO> groupClassifyCount = bookGroupClassifyBiz.getGroupClassifyCount(bookIds);
return ResponseHandleUtil.toResponse(groupClassifyCount);
}
}
......@@ -3,11 +3,12 @@ package com.pcloud.book.group.service.impl;
import java.util.List;
import java.util.Map;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import io.swagger.annotations.ApiOperation;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
......@@ -88,6 +89,7 @@ public class BookGroupServiceImpl implements BookGroupService {
}
@Override
@RequestMapping(value = "updatePersonQrcode",method = RequestMethod.POST)
public void updatePersonQrcode(@RequestBody PersonalQrcodeDTO personalQrcodeDTO) throws BizException {
......@@ -131,4 +133,16 @@ public class BookGroupServiceImpl implements BookGroupService {
return ResponseHandleUtil.toResponse(bookGroupBiz.getJoinGroupCipher(cipher));
}
/**
* @description 获取资源浏览数据
* @author 戴兴
* @date 2019/8/8 20:45
*/
@Override
@PostMapping("getResourcesBrowseCount")
public ResponseEntity<ResponseDto<Map<Long, Long>>> getResourcesBrowseCount(@RequestBody ResourceBrowseParamDto resourceBrowseParamDto) {
return ResponseHandleUtil.toResponse(bookGroupBiz.getResourcesBrowseCount(resourceBrowseParamDto));
}
}
package com.pcloud.book.group.service.impl;
import com.pcloud.book.group.biz.GroupQrcodeBiz;
import com.pcloud.book.group.biz.WeixinQrcodeBiz;
import com.pcloud.book.group.dto.BookWxQrcodeDTO;
import com.pcloud.book.group.dto.SyncWeixinGroupIdDTO;
......@@ -7,8 +8,10 @@ import com.pcloud.book.group.dto.UpdateQrDTO;
import com.pcloud.book.group.dto.WeixinQrcodeCountDTO;
import com.pcloud.book.group.dto.WeixinQrcodeDTO;
import com.pcloud.book.group.service.WeixinQrcodeService;
import com.pcloud.book.group.vo.ClassifyQrcodeVO;
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 org.springframework.beans.factory.annotation.Autowired;
......@@ -35,6 +38,8 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
@Autowired
private WeixinQrcodeBiz weixinQrcodeBiz;
@Autowired
private GroupQrcodeBiz groupQrcodeBiz;
@Override
@GetMapping("tenQuartz")
......@@ -117,4 +122,15 @@ public class WeixinQrcodeServiceImpl implements WeixinQrcodeService {
return ResponseHandleUtil.toResponse(weixinQrcodeBiz.getGroupVersion(wxGroupIds));
}
@Override
@RequestMapping(value = "getWxGroupId", method = RequestMethod.GET)
public ResponseEntity<ResponseDto<String>> getWxGroupId(@RequestParam("classifyId") Long classifyId) {
List<ClassifyQrcodeVO> qrcodeByClassify = groupQrcodeBiz.getQrcodeByClassify(null, classifyId);
String wxGroupId = null;
if (!ListUtils.isEmpty(qrcodeByClassify)){
wxGroupId = qrcodeByClassify.get(0).getWeixinGroupId();
}
return ResponseHandleUtil.toResponse(wxGroupId);
}
}
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
......@@ -44,6 +46,13 @@ public class ClassifyQrcodeVO implements Serializable {
@ApiModelProperty("关键词识别次数")
private Integer keywordCount;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
@ApiModelProperty("关键词识别次数")
private Date createdTime;
public String getWeixinGroupId() {
return weixinGroupId;
}
......@@ -124,6 +133,18 @@ public class ClassifyQrcodeVO implements Serializable {
this.keywordCount = keywordCount;
}
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
@Override
public String toString() {
return "ClassifyQrcodeVO{" +
......@@ -136,7 +157,8 @@ public class ClassifyQrcodeVO implements Serializable {
", quitRate=" + quitRate +
", weixinQrcodeId=" + weixinQrcodeId +
", weixinGroupId='" + weixinGroupId + '\'' +
", keywordCount='" + keywordCount + '\'' +
", keywordCount=" + keywordCount +
", createdTime=" + createdTime +
'}';
}
}
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import java.io.Serializable;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/25 19:35
*/
@ApiModel
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GroupIncomeStaticParamVO implements Serializable {
private Long bookGroupId;
private Integer currentPage;
private Integer numPerPage;
private String type;
private Long classifyId;
private Long wxGroupId;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
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 String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Long getClassifyId() {
return classifyId;
}
public void setClassifyId(Long classifyId) {
this.classifyId = classifyId;
}
public Long getWxGroupId() {
return wxGroupId;
}
public void setWxGroupId(Long wxGroupId) {
this.wxGroupId = wxGroupId;
}
@Override
public String toString() {
return "GroupIncomeStaticParamVO{" +
"bookGroupId=" + bookGroupId +
", currentPage=" + currentPage +
", numPerPage=" + numPerPage +
", type=" + type +
", classifyId=" + classifyId +
", wxGroupId=" + wxGroupId +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import java.io.Serializable;
import java.util.Date;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/25 19:57
*/
@ApiModel
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GroupScanTrendParamVO implements Serializable {
private Long bookGroupId;
private Long classifyId;
private Long wxGroupId;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date startDate;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date endDate;
private Integer dayNum;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public Long getClassifyId() {
return classifyId;
}
public void setClassifyId(Long classifyId) {
this.classifyId = classifyId;
}
public Long getWxGroupId() {
return wxGroupId;
}
public void setWxGroupId(Long wxGroupId) {
this.wxGroupId = wxGroupId;
}
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public Integer getDayNum() {
return dayNum;
}
public void setDayNum(Integer dayNum) {
this.dayNum = dayNum;
}
@Override
public String toString() {
return "GroupScanTrendParamVO{" +
"bookGroupId=" + bookGroupId +
", classifyId=" + classifyId +
", wxGroupId=" + wxGroupId +
", startDate=" + startDate +
", endDate=" + endDate +
", dayNum=" + dayNum +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import java.io.Serializable;
import java.util.Date;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/26 9:05
*/
@ApiModel
@JsonInclude(JsonInclude.Include.NON_NULL)
public class GroupScanTrendVO implements Serializable {
@JsonFormat(
pattern = "yyyy-MM-dd",
timezone = "GMT+8"
)
private Date date;
private Long buyCount;
private Long scanCount;
@JsonFormat(
pattern = "yyyy-MM-dd",
timezone = "GMT+8"
)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Long getBuyCount() {
return buyCount;
}
public void setBuyCount(Long buyCount) {
this.buyCount = buyCount;
}
public Long getScanCount() {
return scanCount;
}
public void setScanCount(Long scanCount) {
this.scanCount = scanCount;
}
@Override
public String toString() {
return "GroupScanTrendVO{" +
"date=" + date +
", buyCount=" + buyCount +
", scanCount=" + scanCount +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/28 15:45
*/
public class GroupStatisticVO implements Serializable {
@ApiModelProperty("分类唯一标识")
private Long classifyId;
@ApiModelProperty("分类名称")
private String classifyName;
@ApiModelProperty("是否免费,1-免费 0-收费")
private Integer isFree;
@ApiModelProperty("价格")
private BigDecimal price;
@ApiModelProperty("点击人数")
private Long clickCount;
@ApiModelProperty("累计进群人数")
private Long inGroupPersonCount;
@ApiModelProperty("当前群人数")
private Long groupPersonCount;
@ApiModelProperty("收益")
private BigDecimal income;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createdTime;
public Long getClassifyId() {
return classifyId;
}
public void setClassifyId(Long classifyId) {
this.classifyId = classifyId;
}
public String getClassifyName() {
return classifyName;
}
public void setClassifyName(String classifyName) {
this.classifyName = classifyName;
}
public Integer getIsFree() {
return isFree;
}
public void setIsFree(Integer isFree) {
this.isFree = isFree;
}
public Long getClickCount() {
return clickCount;
}
public void setClickCount(Long clickCount) {
this.clickCount = clickCount;
}
public Long getInGroupPersonCount() {
return inGroupPersonCount;
}
public void setInGroupPersonCount(Long inGroupPersonCount) {
this.inGroupPersonCount = inGroupPersonCount;
}
public Long getGroupPersonCount() {
return groupPersonCount;
}
public void setGroupPersonCount(Long groupPersonCount) {
this.groupPersonCount = groupPersonCount;
}
public BigDecimal getIncome() {
return income;
}
public void setIncome(BigDecimal income) {
this.income = income;
}
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
@Override
public String toString() {
return "GroupStatisticVO{" +
"classifyId=" + classifyId +
", classifyName=" + classifyName +
", isFree=" + isFree +
", clickCount=" + clickCount +
", inGroupPersonCount=" + inGroupPersonCount +
", groupPersonCount=" + groupPersonCount +
", income=" + income +
", createdTime=" + createdTime +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -42,6 +44,13 @@ public class ListClassifyVO implements Serializable {
@ApiModelProperty("排序")
private Integer rank;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
@ApiModelProperty("创建时间")
private Date createdTime;
public Integer getRank() {
return rank;
}
......@@ -114,9 +123,21 @@ public class ListClassifyVO implements Serializable {
this.qrcodeNumber = qrcodeNumber;
}
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
@Override
public String toString() {
return "ClassifyNameVO{" +
return "ListClassifyVO{" +
"id=" + id +
", classify='" + classify + '\'' +
", classifyIntroduce='" + classifyIntroduce + '\'' +
......@@ -125,6 +146,7 @@ public class ListClassifyVO implements Serializable {
", qrcodeNumber=" + qrcodeNumber +
", userNumberTotal=" + userNumberTotal +
", rank=" + rank +
", createdTime=" + createdTime +
'}';
}
}
package com.pcloud.book.group.vo;
import java.io.Serializable;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/27 17:19
*/
public class ResourceClickVO implements Serializable {
private Long rescourceId;
private Long clickCount;
public Long getRescourceId() {
return rescourceId;
}
public void setRescourceId(Long rescourceId) {
this.rescourceId = rescourceId;
}
public Long getClickCount() {
return clickCount;
}
public void setClickCount(Long clickCount) {
this.clickCount = clickCount;
}
@Override
public String toString() {
return "ResourceClickVO{" +
"rescourceId=" + rescourceId +
", clickCount=" + clickCount +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/25 19:01
*/
@ApiModel
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResourcesStatisticVO implements Serializable {
private Long rescourceId;
private String rescourceName;
private String type;
private Long browseCount;
private Long saleCount;
private BigDecimal totalSale;
private BigDecimal totalIncome;
public Long getRescourceId() {
return rescourceId;
}
public void setRescourceId(Long rescourceId) {
this.rescourceId = rescourceId;
}
public String getRescourceName() {
return rescourceName;
}
public void setRescourceName(String rescourceName) {
this.rescourceName = rescourceName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Long getBrowseCount() {
return browseCount;
}
public void setBrowseCount(Long browseCount) {
this.browseCount = browseCount;
}
public Long getSaleCount() {
return saleCount;
}
public void setSaleCount(Long saleCount) {
this.saleCount = saleCount;
}
public BigDecimal getTotalSale() {
return totalSale;
}
public void setTotalSale(BigDecimal totalSale) {
this.totalSale = totalSale;
}
public BigDecimal getTotalIncome() {
return totalIncome;
}
public void setTotalIncome(BigDecimal totalIncome) {
this.totalIncome = totalIncome;
}
@Override
public String toString() {
return "ResourcesStatisticVO{" +
"rescourceId='" + rescourceId + '\'' +
", rescourceName=" + rescourceName +
", type='" + type + '\'' +
", browseCount=" + browseCount +
", saleCount=" + saleCount +
", totalSale=" + totalSale +
", totalIncome=" + totalIncome +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/28 16:16
*/
public class TotalRescourceDataVO implements Serializable {
private Long clickCount;
private BigDecimal totalSale;
private BigDecimal totalIncome;
public Long getClickCount() {
return clickCount;
}
public void setClickCount(Long clickCount) {
this.clickCount = clickCount;
}
public BigDecimal getTotalSale() {
return totalSale;
}
public void setTotalSale(BigDecimal totalSale) {
this.totalSale = totalSale;
}
public BigDecimal getTotalIncome() {
return totalIncome;
}
public void setTotalIncome(BigDecimal totalIncome) {
this.totalIncome = totalIncome;
}
@Override
public String toString() {
return "TotalRescourceDataVO{" +
"clickCount=" + clickCount +
", totalSale=" + totalSale +
", totalIncome=" + totalIncome +
'}';
}
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author 戴兴
* @description TODO
* @date 2019/7/28 15:47
*/
public class WxGroupStatisticVO implements Serializable {
private Long qrcodeId;
private String wxGroupName;
private Long inGroupPersonCount;
private Long groupPersonCount;
private BigDecimal income;
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date createdTime;
public Long getQrcodeId() {
return qrcodeId;
}
public void setQrcodeId(Long qrcodeId) {
this.qrcodeId = qrcodeId;
}
public String getWxGroupName() {
return wxGroupName;
}
public void setWxGroupName(String wxGroupName) {
this.wxGroupName = wxGroupName;
}
public Long getInGroupPersonCount() {
return inGroupPersonCount;
}
public void setInGroupPersonCount(Long inGroupPersonCount) {
this.inGroupPersonCount = inGroupPersonCount;
}
public Long getGroupPersonCount() {
return groupPersonCount;
}
public void setGroupPersonCount(Long groupPersonCount) {
this.groupPersonCount = groupPersonCount;
}
public BigDecimal getIncome() {
return income;
}
public void setIncome(BigDecimal income) {
this.income = income;
}
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
@Override
public String toString() {
return "WxGroupStatisticVO{" +
"qrcodeId=" + qrcodeId +
", wxGroupName='" + wxGroupName + '\'' +
", inGroupPersonCount=" + inGroupPersonCount +
", groupPersonCount=" + groupPersonCount +
", income=" + income +
", createdTime=" + createdTime +
'}';
}
}
\ No newline at end of file
......@@ -65,6 +65,18 @@
t.serve_id
</select>
<select id="getClickStatistics" parameterType="map" resultType="com.pcloud.book.group.vo.ResourcesStatisticVO">
select serve_id rescourceId, count(1) browseCount from app_click_record
where book_group_id = #{bookGroupId} and serve_type = #{type}
<if test="classifyId != null">
and classify_id = #{classifyId}
</if>
<if test="qrcodeId!=null">
AND qrcode_id = #{qrcodeId}
</if>
group by serve_id
</select>
<!--获取最近点击-->
<select id="getRecentlyClick" parameterType="map" resultType="com.pcloud.book.group.dto.AppClickDTO">
select
......@@ -81,4 +93,81 @@
order by create_time desc
limit #{top}
</select>
<select id="getClickTrend" parameterType="com.pcloud.book.group.vo.GroupScanTrendParamVO" resultType="com.pcloud.book.group.vo.GroupScanTrendVO">
select DATE_FORMAT(create_time, '%Y-%m-%d') date, count(1) scanCount from app_click_record
where book_group_id = #{bookGroupId}
<if test="classifyId != null">
and classify_id = #{classifyId}
</if>
<if test="wxGroupId != null">
and qrcode_id = #{wxGroupId}
</if>
and create_time &gt;=
<if test="startDate == null">
DATE_FORMAT(SUBDATE(NOW(), INTERVAL #{dayNum} DAY),'%Y-%m-%d')
AND create_time &lt; DATE_FORMAT(now(), '%Y-%m-%d')
</if>
<if test="startDate != null">
DATE_FORMAT(#{startDate},'%Y-%m-%d')
AND create_time &lt;= DATE_FORMAT(#{endDate}, '%Y-%m-%d')
</if>
GROUP BY date
order by date
</select>
<select id="getResourceClick" parameterType="map" resultType="com.pcloud.book.group.vo.ResourceClickVO">
SELECT
t.serve_id rescourceId,
count(1) clickCount
FROM
app_click_record t
WHERE
t.serve_id IN
<foreach collection="rescourceIds" index="index" item="item" close=")" open="(" separator=",">
#{item}
</foreach>
<if test="bookGroupId!=null">
AND t.book_group_id = #{bookGroupId}
</if>
<if test="classifyId!=null">
AND t.classify_id = #{classifyId}
</if>
<if test="qrcodeId!=null">
AND t.qrcode_id = #{qrcodeId}
</if>
<if test="type!=null">
AND t.serve_type = #{type}
</if>
GROUP BY
t.serve_id
</select>
<select id="getRescourceTotalClick" parameterType="map" resultType="long">
select count(1) FROM app_click_record t
WHERE t.book_group_id = #{bookGroupId}
<if test="classifyId!=null">
AND t.classify_id = #{classifyId}
</if>
<if test="qrcodeId!=null">
AND t.qrcode_id = #{qrcodeId}
</if>
<if test="type!=null">
AND t.serve_type = #{type}
</if>
</select>
<select id="getRescourceIds" parameterType="map" resultType="long">
select t.serve_id FROM app_click_record t
WHERE t.book_group_id = #{bookGroupId}
<if test="classifyId!=null">
AND t.classify_id = #{classifyId}
</if>
<if test="qrcodeId!=null">
AND t.qrcode_id = #{qrcodeId}
</if>
<if test="type!=null">
AND t.serve_type = #{type}
</if>
</select>
</mapper>
\ No newline at end of file
......@@ -62,4 +62,8 @@
t.serve_id
order by t.create_time desc
</select>
<select id="getCountByBokkGroupId" parameterType="map" resultType="long">
select count(1) from app_touch_record where book_group_id =#{bookGroupId} and serve_type = #{type}
</select>
</mapper>
\ No newline at end of file
......@@ -191,7 +191,8 @@
classify_introduce classifyIntroduce,
price,
change_number changeNumber,
rank
rank,
create_time createdTime
from
book_group_classify
where
......@@ -207,7 +208,8 @@
change_number changeNumber,
rank,
count(1) qrcodeNumber,
SUM(user_number) userNumberTotal
SUM(user_number) userNumberTotal,
c.create_time createdTime
from
book_group_classify c join book_group_qrcode q on c.id = q.classify_id
where
......@@ -854,6 +856,16 @@
book_group_classify c join book_group_qrcode q on c.id = q.classify_id
and q.group_name = #{_parameter} limit 1
</select>
<select id="getGroupClassifyCount" parameterType="list" resultType="map">
select book_id bookId, count(1) classifyCount, book_group_id bookGroupId from book_group_classify
where is_delete = 0 and book_id in
<foreach collection="list" open="(" close=")" separator="," item="item">
#{item}
</foreach>
group by book_id
</select>
<!--更新是否开启学习报告-->
<update id="updateHasOpenLearningReport" parameterType="map">
update book_group_classify set
......@@ -863,6 +875,24 @@
where id=#{classifyId}
</update>
<insert id="addClickClassify" parameterType="map">
insert into book_group_classify_click(book_group_id, classify_id,create_user, create_time)
values(#{bookGroupId},#{classifyId},#{wechatUserId},now())
</insert>
<select id="mapClickClassify" parameterType="map" resultType="com.pcloud.book.group.dto.ClickClassifyDTO">
select classify_id classifyId, count(1) count from book_group_classify_click
where classify_id in
<foreach collection="classifyIds" open="(" close=")" separator="," item="id">
#{id}
</foreach>
group by classify_id
</select>
<select id="getClassifyIngoreDelete" parameterType="long" resultType="com.pcloud.book.group.vo.ListClassifyVO">
select id,classify from book_group_classify where book_group_id = #{bookGroupId}
</select>
<!--获取群分类学习报告相关列表-->
<select id="listClassifyForLearningReport" parameterType="map" resultType="com.pcloud.book.group.dto.ClassifyLearningReportDto">
SELECT
......@@ -894,6 +924,7 @@
order by c.id desc
</select>
<!--拖动排序-->
<update id="dragSortClassify" parameterType="map">
update book_group_classify
......@@ -908,4 +939,12 @@
#{classifyId}
</foreach>
</update>
<select id="pageClassify" parameterType="map" resultType="com.pcloud.book.group.vo.GroupStatisticVO">
select bgc.id classifyId, bgc.classify classifyName, bgc.price price,sum(user_number) groupPersonCount, bgc.create_time createdTime
from book_group_classify bgc left join book_group_qrcode bgq on bgc.id = bgq.classify_id
where book_group_id = #{bookGroupId}
group by bgc.id
</select>
</mapper>
\ No newline at end of file
......@@ -88,7 +88,8 @@
<select id="listQrcodeByClassify" resultType="ClassifyQrcodeVO" parameterType="map">
SELECT
id, weixin_qrcode_id weixinQrcodeId, weixin_group_id weixinGroupId, group_name groupName, classify_id classifyId, qrcode_url qrcodeUrl, user_number userNumber, ${changeNumber} changeNumber
id, weixin_qrcode_id weixinQrcodeId, weixin_group_id weixinGroupId, group_name groupName, classify_id classifyId,
qrcode_url qrcodeUrl, user_number userNumber, ${changeNumber} changeNumber, create_time createdTime
FROM
book_group_qrcode
WHERE
......@@ -500,6 +501,7 @@
</foreach>
</select>
<select id="listPageRiddle" parameterType="map" resultType="com.pcloud.book.riddle.dto.GroupRiddleDTO">
SELECT
q.group_name AS groupName,
......@@ -541,4 +543,10 @@
id = #{qrcodeId}
</update>
<select id="getQrcodeByClassify" parameterType="long" resultType="com.pcloud.book.group.vo.ClassifyQrcodeVO">
select id, classify_id classifyId, group_name groupName, user_number userNumber, weixin_group_id weixinGroupId, create_time createdTime
from book_group_qrcode where classify_id = #{classifyId}
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>蒙娇</Author>
<LastAuthor>林伟彬</LastAuthor>
<Created>2017-06-27T08:48:00Z</Created>
<LastSaved>2017-07-16T07:06:45Z</LastSaved>
<Version>15.00</Version>
</DocumentProperties>
<CustomDocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<KSOProductBuildVer dt:dt="string">2052-10.1.0.6489</KSOProductBuildVer>
</CustomDocumentProperties>
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>11388</WindowHeight>
<WindowWidth>22944</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>0</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="m2113688147332">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="14" ss:Color="#000000"
ss:Bold="1"/>
</Style>
<Style ss:ID="m2113688147372">
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
</Style>
<Style ss:ID="m2113688147392">
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
</Style>
<Style ss:ID="s94">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Interior ss:Color="#AEAAAA" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s95">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
</Style>
<Style ss:ID="s96">
<Alignment ss:Horizontal="Right" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
</Style>
<Style ss:ID="s97">
<Alignment ss:Horizontal="Right" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<NumberFormat ss:Format="0%"/>
</Style>
<Style ss:ID="s99">
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
</Style>
<Style ss:ID="s100">
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<NumberFormat ss:Format="0%"/>
</Style>
<Style ss:ID="s120">
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"
ss:Bold="1"/>
</Style>
<Style ss:ID="s121">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Interior ss:Color="#AEAAAA" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="s122">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
</Style>
<Style ss:ID="s123">
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
</Style>
<Style ss:ID="s124">
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<NumberFormat ss:Format="0%"/>
</Style>
<Style ss:ID="s126">
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
ss:Color="#000000"/>
</Borders>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"
ss:Bold="1"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="10000" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="48.6"
ss:DefaultRowHeight="19.950000000000003">
<Column ss:AutoFitWidth="0" ss:Width="169.20000000000002"/>
<Column ss:AutoFitWidth="0" ss:Width="63.599999999999994"/>
<Column ss:AutoFitWidth="0" ss:Width="64.8"/>
<Column ss:AutoFitWidth="0" ss:Width="99.6"/>
<Column ss:AutoFitWidth="0" ss:Width="76.8"/>
<Column ss:AutoFitWidth="0" ss:Width="63.599999999999994"/>
<Column ss:AutoFitWidth="0" ss:Width="59.4"/>
<Row ss:AutoFitHeight="0" ss:Height="26.4">
<Cell ss:MergeAcross="6" ss:MergeDown="1" ss:StyleID="m2113688147332"><Data
ss:Type="String">${title!}</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0"/>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="6" ss:StyleID="s126"><Data ss:Type="String">应用统计 销售总额:¥${appSumStatistics.saleMoney!} 收益总额:¥${appSumStatistics.income!} 浏览总量:${appSumStatistics.scanCounts!}</Data></Cell>
</Row>
<#if appIncomeList??>
<#list appIncomeList as app>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="6" ss:StyleID="m2113688147372"><Data ss:Type="String">应用名称:${app.appName!} 销售额:¥${app.saleMoney!} 收益额:¥${app.income!} 浏览量:${app.scanCounts!}</Data></Cell>
</Row>
<#if app.itemList??>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s94"><Data ss:Type="String">商品名称</Data></Cell>
<Cell ss:StyleID="s94"><Data ss:Type="String">浏览量</Data></Cell>
<Cell ss:StyleID="s94"><Data ss:Type="String">销售量</Data></Cell>
<Cell ss:StyleID="s94"><Data ss:Type="String">销售总额(¥)</Data></Cell>
<Cell ss:StyleID="s94"><Data ss:Type="String">收益额(¥)</Data></Cell>
</Row>
<#list app.itemList as appProduct>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s95"><Data ss:Type="String">${appProduct.productName!}</Data></Cell>
<Cell ss:StyleID="s96"><Data ss:Type="Number">${appProduct.scanCounts!}</Data></Cell>
<Cell ss:StyleID="s96"><Data ss:Type="Number">${appProduct.saleCounts!}</Data></Cell>
<Cell ss:StyleID="s96"><Data ss:Type="Number">${appProduct.saleMoney!}</Data></Cell>
<Cell ss:StyleID="s96"><Data ss:Type="Number">${appProduct.income!}</Data></Cell>
</Row>
</#list>
</#if>
</#list>
</#if>
<Row ss:AutoFitHeight="0"/>
<Row ss:AutoFitHeight="0"/>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="6" ss:StyleID="s120"><Data ss:Type="String">商品统计 销售总额:¥${productSumStatistics.saleMoney!} 收益总额:¥${productSumStatistics.income!} 浏览总量:${productSumStatistics.scanCounts!}</Data></Cell>
</Row>
<#if productIncomeList??>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s121"><Data ss:Type="String">商品名称</Data></Cell>
<Cell ss:StyleID="s121"><Data ss:Type="String">浏览量</Data></Cell>
<Cell ss:StyleID="s121"><Data ss:Type="String">销售量</Data></Cell>
<Cell ss:StyleID="s121"><Data ss:Type="String">销售总额(¥)</Data></Cell>
<Cell ss:StyleID="s121"><Data ss:Type="String">收益额(¥)</Data></Cell>
</Row>
<#list productIncomeList as product>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s122"><Data ss:Type="String">${product.productName!}</Data></Cell>
<Cell ss:StyleID="s123"><Data ss:Type="Number">${product.scanCounts!}</Data></Cell>
<Cell ss:StyleID="s123"><Data ss:Type="Number">${product.saleCounts!}</Data></Cell>
<Cell ss:StyleID="s123"><Data ss:Type="Number">${product.saleMoney!}</Data></Cell>
<Cell ss:StyleID="s123"><Data ss:Type="Number">${product.income!}</Data></Cell>
</Row>
</#list>
</#if>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.69930555555555596"
x:Right="0.69930555555555596" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Print>
<ValidPrinterInfo/>
<PaperSizeIndex>9</PaperSizeIndex>
<HorizontalResolution>600</HorizontalResolution>
<VerticalResolution>600</VerticalResolution>
</Print>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>12</ActiveRow>
<ActiveCol>16</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
......@@ -50,6 +50,10 @@
<pcloud-common-core.version>2.1.0-SNAPSHOT</pcloud-common-core.version>
<wxgroup-sdk.version>1.0.0-SNAPSHOT</wxgroup-sdk.version>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- UAT -->
......@@ -64,9 +68,7 @@
<wxgroup-sdk.version>1.0.0-RELEASE</wxgroup-sdk.version>
</properties>
<!-- 设置默认环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 压测环境 -->
......@@ -104,8 +106,8 @@
<spring-cloud.version>Dalston.SR1</spring-cloud.version>
<pcloud-common-web.version>2.1.0-RELEASE</pcloud-common-web.version>
<!-- book -->
<pcloud-facade-book.version>2.1.0-RELEASE</pcloud-facade-book.version>
<pcloud-service-book.version>2.1.0-RELEASE</pcloud-service-book.version>
<pcloud-facade-book.version>2.1.0-SNAPSHOT</pcloud-facade-book.version>
<pcloud-service-book.version>2.1.0-SNAPSHOT</pcloud-service-book.version>
<pcloud-facade-usercenter.version>2.1.0-RELEASE</pcloud-facade-usercenter.version>
<pcloud-facade-channelcenter.version>2.1.0-RELEASE</pcloud-facade-channelcenter.version>
......@@ -113,17 +115,17 @@
<pcloud-facade-analysisengine.version>2.1.0-RELEASE</pcloud-facade-analysisengine.version>
<pcloud-facade-quartz.version>2.1.0-RELEASE</pcloud-facade-quartz.version>
<pcloud-facade-appcenter.version>2.1.0-RELEASE</pcloud-facade-appcenter.version>
<pcloud-facade-settlement.version>2.1.0-RELEASE</pcloud-facade-settlement.version>
<pcloud-facade-settlement.version>2.1.0-SNAPSHOT</pcloud-facade-settlement.version>
<pcloud-facade-message.version>2.1.0-RELEASE</pcloud-facade-message.version>
<pcloud-facade-commoncenter.version>2.1.0-RELEASE</pcloud-facade-commoncenter.version>
<pcloud-facade-comment.version>2.1.0-RELEASE</pcloud-facade-comment.version>
<pcloud-facade-voicemessage.version>2.1.0-RELEASE</pcloud-facade-voicemessage.version>
<pcloud-facade-raystask.version>2.1.0-RELEASE</pcloud-facade-raystask.version>
<pcloud-facade-contentcenter.version>2.1.0-SNAPSHOT</pcloud-facade-contentcenter.version>
<pcloud-facade-tradecenter.version>2.1.0-RELEASE</pcloud-facade-tradecenter.version>
<pcloud-facade-tradecenter.version>2.1.0-SNAPSHOT</pcloud-facade-tradecenter.version>
<pcloud-facade-readercenter.version>2.1.0-RELEASE</pcloud-facade-readercenter.version>
<pcloud-facade-labelcenter.version>2.1.0-RELEASE</pcloud-facade-labelcenter.version>
<pcloud-facade-wechatgroup.version>2.1.0-RELEASE</pcloud-facade-wechatgroup.version>
<pcloud-facade-wechatgroup.version>2.1.0-SNAPSHOT</pcloud-facade-wechatgroup.version>
<pcloud-facade-promotion.version>2.1.0-RELEASE</pcloud-facade-promotion.version>
<pcloud-facade-audioapp.version>2.1.0-RELEASE</pcloud-facade-audioapp.version>
<pcloud-facade-videolesson.version>2.1.0-RELEASE</pcloud-facade-videolesson.version>
......
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