Commit f9a9a15b by 田超

Merge branch 'feature/1003702' into 'master'

feat: [1003702] 平台端出版社项目数据一览

See merge request rays/pcloud-book!1004
parents 5c319c0e 8410ff4e
package com.pcloud.book.book.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 编辑做书品种统计信息
*
* @author guiq
* @version 1.0
* @since 2020年9月24日
*/
@Data
@ApiModel("编辑做书品种统计信息")
public class BookVarietyStatsDto implements Serializable {
/**
* 累计做书品种数
*/
@ApiModelProperty("累计做书品种数")
private Integer varietyTotal;
/**
* 上季度做书品种数
*/
@ApiModelProperty("上季度做书品种数")
private Integer varietyLastQuarter;
/**
* 本季度做书品种数
*/
@ApiModelProperty("本季度做书品种数")
private Integer varietyThisQuarter;
/**
* 累计印册量
*/
@ApiModelProperty("累计印册量")
private Integer printTotal;
/**
* 上季度印册量
*/
@ApiModelProperty("上季度印册量")
private Integer printLastQuarter;
/**
* 本季度印册量
*/
@ApiModelProperty("本季度印册量")
private Integer printThisQuarter;
/**
* 累计扫码人数
*/
@ApiModelProperty("累计扫码人数")
private Integer scanUserTotal;
/**
* 上季度扫码人数
*/
@ApiModelProperty("上季度扫码人数")
private Integer scanUserLastQuarter;
/**
* 本季度扫码人数
*/
@ApiModelProperty("本季度扫码人数")
private Integer scanUserThisQuarter;
/**
* 累计浏览人数
*/
@ApiModelProperty("累计浏览人数")
private Integer browseUserTotal;
/**
* 上季度浏览人数
*/
@ApiModelProperty("上季度浏览人数")
private Integer browseUserLastQuarter;
/**
* 本季度浏览人数
*/
@ApiModelProperty("本季度浏览人数")
private Integer browseUserThisQuarter;
/**
* 累计扫码量
*/
@ApiModelProperty("累计扫码量")
private Integer scanTotal;
/**
* 上季度扫码量
*/
@ApiModelProperty("上季度扫码量")
private Integer scanLastQuarter;
/**
* 本季度扫码量
*/
@ApiModelProperty("本季度扫码量")
private Integer scanThisQuarter;
/**
* 累计浏览量
*/
@ApiModelProperty("累计浏览量")
private Integer browseTotal;
/**
* 上季度浏览量
*/
@ApiModelProperty("上季度浏览量")
private Integer browseLastQuarter;
/**
* 本季度浏览量
*/
@ApiModelProperty("本季度浏览量")
private Integer browseThisQuarter;
}
package com.pcloud.book.book.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 编辑做书品种统计信息 请求参数
*
* @author guiq
* @version 1.0
* @since 2020年9月24日
*/
@Data
@ApiModel("编辑做书品种统计信息 请求参数")
public class BookVarietyStatsRequestDto implements Serializable {
private static final long serialVersionUID = -1377926071522171617L;
@ApiModelProperty("出版社ID")
private Long agentId;
@ApiModelProperty("出版社编辑ID列表")
private List<Long> adviserIds;
}
package com.pcloud.book.book.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* ERP 图书印册量
*/
@Data
@ApiModel("ERP 图书印册量")
public class ERPPublishNumDTO {
@ApiModelProperty("编辑ID")
private Long adviserId;
@ApiModelProperty("渠道ID")
private Long channelId;
@ApiModelProperty("图书ID")
private Long bookId;
@ApiModelProperty("印册量")
private Long expectPublishNum;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
}
package com.pcloud.book.book.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@ApiModel("ERP图书信息")
public class ErpBookInfoDTO {
@ApiModelProperty("项目编号")
private String projectNumber;
@ApiModelProperty("erp编号")
private String erpNumber;
@ApiModelProperty("出版物名称")
private String bookName;
@ApiModelProperty("RAYS编辑ID")
private Integer raysAdviserId;
@ApiModelProperty("关联RAYS书刊ID")
private Integer raysBookId;
@ApiModelProperty("关联RAYS渠道ID")
private Integer raysChannelId;
@ApiModelProperty("编辑id")
private Long adviserId;
@ApiModelProperty("ISBN")
private String isbn;
@ApiModelProperty("印册量")
private Long publishNum;
@ApiModelProperty("立项时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date buildTime;
}
...@@ -3,7 +3,17 @@ ...@@ -3,7 +3,17 @@
*/ */
package com.pcloud.book.book.service; package com.pcloud.book.book.service;
import com.pcloud.book.book.dto.*; import com.pcloud.book.book.dto.AdviserBookInfoDTO;
import com.pcloud.book.book.dto.AviserBookInfoParam;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO;
import com.pcloud.book.book.dto.BookCountByAdvisersDto;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.BookRightsSettingDTO;
import com.pcloud.book.book.dto.BookVarietyStatsDto;
import com.pcloud.book.book.dto.BookVarietyStatsRequestDto;
import com.pcloud.book.book.dto.MapResourceTotalCountDTO;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
...@@ -13,7 +23,12 @@ import io.swagger.annotations.ApiImplicitParams; ...@@ -13,7 +23,12 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -140,4 +155,8 @@ public interface BookAdviserService { ...@@ -140,4 +155,8 @@ public interface BookAdviserService {
@ApiOperation("获取书下资源总数(包括现代纸书、1V1、小睿、社群码)") @ApiOperation("获取书下资源总数(包括现代纸书、1V1、小睿、社群码)")
@GetMapping("mapResourceTotalCount") @GetMapping("mapResourceTotalCount")
ResponseEntity<ResponseDto<Map<String, BookResourceStatisticsDTO>>> mapResourceTotalCount(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO); ResponseEntity<ResponseDto<Map<String, BookResourceStatisticsDTO>>> mapResourceTotalCount(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO);
@ApiOperation(value = "获取编辑做书品种数统计信息", httpMethod = "POST")
@PostMapping("/getAdviserBookVarietyStats")
ResponseEntity<ResponseDto<Map<Long, BookVarietyStatsDto>>> getAdviserBookVarietyStats(@RequestBody List<BookVarietyStatsRequestDto> requestDtos) throws BizException;
} }
...@@ -4,15 +4,31 @@ ...@@ -4,15 +4,31 @@
package com.pcloud.book.book.biz; package com.pcloud.book.book.biz;
import com.pcloud.book.base.dto.CountDto; import com.pcloud.book.base.dto.CountDto;
import com.pcloud.book.book.dto.*; import com.pcloud.book.book.dto.AdviserBookInfoDTO;
import com.pcloud.book.book.dto.AdviserManageDto;
import com.pcloud.book.book.dto.AviserBookInfoParam;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO;
import com.pcloud.book.book.dto.BookCountByAdvisersDto;
import com.pcloud.book.book.dto.BookCountDto;
import com.pcloud.book.book.dto.BookDataStatisticsDTO;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.BookRightsSettingDTO;
import com.pcloud.book.book.dto.BookVarietyStatsDto;
import com.pcloud.book.book.dto.BookVarietyStatsRequestDto;
import com.pcloud.book.book.dto.QrcodeStatisticsDTO;
import com.pcloud.book.book.entity.Book; import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.book.book.vo.ErpAdviserBookVO; import com.pcloud.book.book.vo.ErpAdviserBookVO;
import com.pcloud.book.book.vo.PcloudAdviserBookVO; import com.pcloud.book.book.vo.PcloudAdviserBookVO;
import com.pcloud.book.book.vo.QrCodeVO; import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -268,4 +284,10 @@ public interface BookAdviserBiz { ...@@ -268,4 +284,10 @@ public interface BookAdviserBiz {
Map<String, BookAdviserDto> getBookInfoByBookIds(List<Long> bookIds, List<Long> adviserIds, List<Long> channelIds); Map<String, BookAdviserDto> getBookInfoByBookIds(List<Long> bookIds, List<Long> adviserIds, List<Long> channelIds);
BookAdviserDto getBookByBookIdAdviserId(Long bookId, Long adviserId); BookAdviserDto getBookByBookIdAdviserId(Long bookId, Long adviserId);
Map<Long,BookVarietyStatsDto> getAdviserBookVarietyStats(List<BookVarietyStatsRequestDto> requestDtos);
PageBeanNew<AgentBookStatsDetailVO> getAgentBookStatsDetail(Long agentId, String name, Date startDate, Date endDate, Integer isRay, Integer currentPage, Integer numPerPage);
void exportAgentBookStatsDetail(Long agentId, String name, Date startDate, Date endDate, Integer isRay);
} }
package com.pcloud.book.book.biz.impl; package com.pcloud.book.book.biz.impl;
import java.math.BigDecimal; import cn.hutool.core.collection.CollUtil;
import java.util.ArrayList; import cn.hutool.core.date.DateUtil;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto; import com.alibaba.fastjson.JSONObject;
import com.pcloud.book.book.biz.BookFundBiz; import com.alibaba.fastjson.TypeReference;
import com.pcloud.book.book.dto.BookDataStatisticsDTO;
import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.BookRightsSettingDTO;
import com.pcloud.book.book.dto.QrcodeStatisticsDTO;
import com.pcloud.book.book.vo.PcloudAdviserBookVO;
import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.rightsSetting.dao.RightsSettingDAO;
import com.pcloud.book.rightsSetting.dto.RightsSettingDto;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.qrcode.dto.QrcodeMessageDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.pcloud.analysisengine.browse.dto.BookBrowseAndScanStatsDTO;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
import com.pcloud.book.base.dto.CountDto; import com.pcloud.book.base.dto.CountDto;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookAdviserBiz; import com.pcloud.book.book.biz.BookAdviserBiz;
import com.pcloud.book.book.biz.BookBiz; import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.biz.BookFundBiz;
import com.pcloud.book.book.constant.BookConstant; import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.book.dao.BookAdviserDao; import com.pcloud.book.book.dao.BookAdviserDao;
import com.pcloud.book.book.dto.AdviserBookInfoDTO; import com.pcloud.book.book.dto.AdviserBookInfoDTO;
...@@ -69,20 +23,55 @@ import com.pcloud.book.book.dto.BookAdviserDto; ...@@ -69,20 +23,55 @@ import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO; import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO;
import com.pcloud.book.book.dto.BookCountByAdvisersDto; import com.pcloud.book.book.dto.BookCountByAdvisersDto;
import com.pcloud.book.book.dto.BookCountDto; import com.pcloud.book.book.dto.BookCountDto;
import com.pcloud.book.book.dto.BookDataStatisticsDTO;
import com.pcloud.book.book.dto.BookDto; import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.BookRightsSettingDTO;
import com.pcloud.book.book.dto.BookVarietyStatsDto;
import com.pcloud.book.book.dto.BookVarietyStatsRequestDto;
import com.pcloud.book.book.dto.ERPPublishNumDTO;
import com.pcloud.book.book.dto.ErpBookInfoDTO;
import com.pcloud.book.book.dto.QrcodeStatisticsDTO;
import com.pcloud.book.book.entity.Book; import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.set.BookSet; import com.pcloud.book.book.set.BookSet;
import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.book.book.vo.ErpAdviserBookVO; import com.pcloud.book.book.vo.ErpAdviserBookVO;
import com.pcloud.book.book.vo.PcloudAdviserBookVO;
import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.book.book.vo.QrcodeInfoDto;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr; import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.common.ExportConsr;
import com.pcloud.book.consumer.erp.ErpConsr;
import com.pcloud.book.consumer.message.MessageConsr;
import com.pcloud.book.consumer.message.TemplateConsr; import com.pcloud.book.consumer.message.TemplateConsr;
import com.pcloud.book.consumer.raystask.MainLineConsr; import com.pcloud.book.consumer.raystask.MainLineConsr;
import com.pcloud.book.consumer.settlement.BookConsr; import com.pcloud.book.consumer.settlement.BookConsr;
import com.pcloud.book.consumer.trade.TradeConsr;
import com.pcloud.book.consumer.user.AdviserConsr; import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.user.AgentConsr;
import com.pcloud.book.consumer.user.BookcaseConsr; import com.pcloud.book.consumer.user.BookcaseConsr;
import com.pcloud.book.consumer.user.ChannelConsr; import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.book.group.biz.BookGroupBiz; import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.dao.BookGroupDao; import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.GroupQrcodeDao;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.rightsSetting.dao.RightsSettingDAO;
import com.pcloud.book.rightsSetting.dto.RightsSettingDto;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.qrcode.dto.AdviserQrcodeSceneDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeMessageDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.common.constant.CacheConstant;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.SceneCode; import com.pcloud.common.core.constant.SceneCode;
import com.pcloud.common.core.constant.SendType; import com.pcloud.common.core.constant.SendType;
...@@ -92,10 +81,42 @@ import com.pcloud.common.page.PageBeanNew; ...@@ -92,10 +81,42 @@ import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam; import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateUtils; import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.NumberUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.facade.tradecenter.dto.Amount4BookAdviserDto;
import com.pcloud.raystask.entity.AdviserDefault; import com.pcloud.raystask.entity.AdviserDefault;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto; import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import com.pcloud.usercenter.user.entity.UserLogin; import com.pcloud.usercenter.user.entity.UserLogin;
import com.pcloud.wechatgroup.group.dto.GroupScanUserStatsDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
/** /**
* @描述:编辑管理书籍逻辑层接口实现类 * @描述:编辑管理书籍逻辑层接口实现类
...@@ -159,7 +180,16 @@ public class BookAdviserBizImpl implements BookAdviserBiz { ...@@ -159,7 +180,16 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
private WechatGroupConsr wechatGroupConsr; private WechatGroupConsr wechatGroupConsr;
@Autowired @Autowired
private BrowseRecordConsr browseRecordConsr; private BrowseRecordConsr browseRecordConsr;
@Autowired
private ErpConsr erpConsr;
@Autowired
private TradeConsr tradeConsr;
@Autowired
private ExportConsr exportConsr;
@Autowired
private AgentConsr agentConsr;
@Autowired
private MessageConsr messageConsr;
@Override @Override
public List<BookDto> listByAdviserId(Long adviserId) { public List<BookDto> listByAdviserId(Long adviserId) {
...@@ -1417,4 +1447,527 @@ public class BookAdviserBizImpl implements BookAdviserBiz { ...@@ -1417,4 +1447,527 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
return bookAdviserDao.getBookByBookIdAdviserId(bookId,adviserId); return bookAdviserDao.getBookByBookIdAdviserId(bookId,adviserId);
} }
@Override
public Map<Long, BookVarietyStatsDto> getAdviserBookVarietyStats(List<BookVarietyStatsRequestDto> requestDtos) {
Map<Long, BookVarietyStatsDto> result = new HashMap<>();
if (CollUtil.isEmpty(requestDtos)) {
return result;
}
// agent -> adviser 映射 默认使用merge实现而不是put,如果出现key重复会调用mergeFunction方法,(key1, key2) -> key1
Map<Long, List<Long>> map = requestDtos.stream().collect(Collectors.toMap(BookVarietyStatsRequestDto::getAgentId, BookVarietyStatsRequestDto::getAdviserIds, (key1, key2) -> key1));
// adviser 集合
List<Long> adviserIds = map.values().stream().flatMap(Collection::stream).distinct().collect(Collectors.toList());
if (CollUtil.isEmpty(adviserIds)){
return result;
}
// 查询 bookAdviser
List<BookAdviserDto> bookAdviserDtos = bookAdviserDao.getAdviserBookVarietyStats(adviserIds);
// 统计扫码量(人)及浏览量(人)
List<BookBrowseAndScanStatsDTO> dtos = new ArrayList<>();
bookAdviserDtos.forEach(dto -> {
if (Objects.nonNull(dto)) {
BookBrowseAndScanStatsDTO statsDTO = new BookBrowseAndScanStatsDTO();
statsDTO.setAdviserId(dto.getAdviserId());
statsDTO.setChannelId(dto.getChannelId());
statsDTO.setBookId(dto.getBookId());
dtos.add(statsDTO);
}
});
// 分析引擎获取非社群书统计结果
List<BookBrowseAndScanStatsDTO> browseAndScanStats = browseRecordConsr.getBookBrowseAndScanStats(dtos);
// 微信群获取社群书统计结果
List<GroupScanUserStatsDTO> bookGroupScanStats = wechatGroupConsr.getBookGroupScanStats(adviserIds);
// 查询印册量
List<ERPPublishNumDTO> finalPublishNumDto = new ArrayList<>();
List<ERPPublishNumDTO> dataFromDB = bookAdviserDao.getErpPublishNumQueryParams(adviserIds);
if (CollUtil.isNotEmpty(dataFromDB)) {
List<ERPPublishNumDTO> dataFromErp = erpConsr.getBookExpectPublishNum(dataFromDB);
// 根据ERP填充数据
finalPublishNumDto = dataFromErp.stream().map(
// 匹配 adviserId channelId bookId
erpData -> dataFromDB.stream().filter(
dbData -> Objects.equals(dbData.getAdviserId(), erpData.getAdviserId())
&& Objects.equals(dbData.getBookId(), erpData.getBookId())
&& Objects.equals(dbData.getChannelId(), erpData.getChannelId())
).findFirst().map(
// 填充印册量
dbData -> {
dbData.setExpectPublishNum(erpData.getExpectPublishNum());
return dbData;
}
).orElse(null)
).collect(Collectors.toList());
}
// 组装数据
Set<Long> agentIds = map.keySet();
for (Long agentId : agentIds) {
BookVarietyStatsDto varietyStatsDto = null;
if (CollUtil.isNotEmpty(bookAdviserDtos)) {
varietyStatsDto = new BookVarietyStatsDto();
// 统计做书品种
List<BookAdviserDto> collect = bookAdviserDtos.stream().filter(x -> map.get(agentId).contains(x.getAdviserId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)) {
// 累计做书品种数
varietyStatsDto.setVarietyTotal((int) collect.stream().map(BookAdviserDto::getBookId).distinct().count());
// 本季度做书品种数
varietyStatsDto.setVarietyThisQuarter((int) collect.stream().filter(x -> getAgentQuarterDigital(x.getCreatedDate()) == getAgentQuarterDigital(new Date())).map(BookAdviserDto::getBookId).distinct().count());
// 上季度做书品种数
varietyStatsDto.
setVarietyLastQuarter((int) collect.stream().filter(x -> getAgentQuarterDigital(x.getCreatedDate()) == getAgentLastQuarterDigital(new Date())).map(BookAdviserDto::getBookId).distinct().count());
}
if (CollUtil.isNotEmpty(browseAndScanStats)){
List<BookBrowseAndScanStatsDTO> scanStatsDTOS = browseAndScanStats.stream().filter(x -> map.get(agentId).contains(x.getAdviserId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(scanStatsDTOS)) {
// 累计扫码量
varietyStatsDto.setScanTotal(scanStatsDTOS.stream().filter(x->Objects.nonNull(x.getBookScanTotal())).mapToInt(BookBrowseAndScanStatsDTO::getBookScanTotal).sum());
// 累计扫码人数
varietyStatsDto.setScanUserTotal(scanStatsDTOS.stream().filter(x->Objects.nonNull(x.getBookScanUserTotal())).mapToInt(BookBrowseAndScanStatsDTO::getBookScanUserTotal).sum());
// 累计浏览量
varietyStatsDto.setBrowseTotal(scanStatsDTOS.stream().filter(x->Objects.nonNull(x.getBookBrowseTotal())).mapToInt(BookBrowseAndScanStatsDTO::getBookBrowseTotal).sum());
// 累计浏览人数
varietyStatsDto.setBrowseUserTotal(scanStatsDTOS.stream().filter(x->Objects.nonNull(x.getBookBrowseUserTotal())).mapToInt(BookBrowseAndScanStatsDTO::getBookBrowseUserTotal).sum());
// 筛选本季度数据
List<BookBrowseAndScanStatsDTO> thisQuarterCollect = scanStatsDTOS.stream().filter(
x -> Objects.nonNull(x.getBookScanTotal()) && StrUtil.isNotBlank(x.getDateStr())
&& getAgentQuarterDigital(DateUtil.parse(x.getDateStr(), "yyyyMM").toJdkDate()) == getAgentQuarterDigital(new Date())
).collect(Collectors.toList());
if (CollUtil.isNotEmpty(thisQuarterCollect)){
// 本季度扫码量
varietyStatsDto.setScanThisQuarter(thisQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookScanTotal).sum());
// 本季度扫码人数
varietyStatsDto.setScanUserThisQuarter(thisQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookScanUserTotal).sum());
// 本季度浏览量
varietyStatsDto.setBrowseThisQuarter(thisQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookBrowseTotal).sum());
// 本季度浏览人数
varietyStatsDto.setBrowseUserThisQuarter(thisQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookBrowseUserTotal).sum());
}
// 筛选上季度数据
List<BookBrowseAndScanStatsDTO> lastQuarterCollect = scanStatsDTOS.stream().filter(
x -> Objects.nonNull(x.getBookScanTotal()) && StrUtil.isNotBlank(x.getDateStr())
&& getAgentQuarterDigital(DateUtil.parse(x.getDateStr(), "yyyyMM").toJdkDate()) == getAgentLastQuarterDigital(new Date())
).collect(Collectors.toList());
if (CollUtil.isNotEmpty(lastQuarterCollect)){
// 上季度扫码量
varietyStatsDto.setScanLastQuarter(lastQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookScanTotal).sum());
// 上季度扫码人数
varietyStatsDto.setScanUserLastQuarter(lastQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookScanUserTotal).sum());
// 上季度浏览量
varietyStatsDto.setBrowseLastQuarter(lastQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookBrowseTotal).sum());
// 上季度浏览人数
varietyStatsDto.setBrowseUserLastQuarter(lastQuarterCollect.stream().mapToInt(BookBrowseAndScanStatsDTO::getBookBrowseUserTotal).sum());
}
}
}
if (CollUtil.isNotEmpty(bookGroupScanStats)) {
List<GroupScanUserStatsDTO> statsDTOS = bookGroupScanStats.stream().filter(x -> map.get(agentId).contains(x.getAdviserId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(statsDTOS)) {
// 扫码人数
long scanUser = statsDTOS.stream().map(GroupScanUserStatsDTO::getWxUserId).distinct().count();
// 扫码量
int scan = statsDTOS.size();
// 补充累计扫码量(社群书部分)
varietyStatsDto.setScanTotal(varietyStatsDto.getScanTotal() == null ? scan : varietyStatsDto.getScanTotal() + scan);
// 补充累计扫码人数(社群书部分)
varietyStatsDto.setScanUserTotal(Math.toIntExact(varietyStatsDto.getScanUserTotal() == null ? scanUser : varietyStatsDto.getScanUserTotal() + scanUser));
// 补充累计浏览量(社群书部分)
varietyStatsDto.setBrowseTotal(varietyStatsDto.getBrowseTotal() == null ? scan : varietyStatsDto.getBrowseTotal() + scan);
// 补充累计浏览量(社群书部分)
varietyStatsDto.setBrowseUserTotal(varietyStatsDto.getBrowseUserTotal() == null ? (int) scanUser : (int) (varietyStatsDto.getBrowseUserTotal() + scanUser));
// 筛选本季度
List<GroupScanUserStatsDTO> thisQuarterCollect = statsDTOS.stream().filter(
x -> Objects.nonNull(x.getCreateDay())
&& getAgentQuarterDigital(x.getCreateDay()) == getAgentQuarterDigital(new Date())
).collect(Collectors.toList());
if (CollUtil.isNotEmpty(thisQuarterCollect)) {
scan = thisQuarterCollect.size();
scanUser = thisQuarterCollect.stream().map(GroupScanUserStatsDTO::getWxUserId).distinct().count();
// 补充本季度扫码量(社群书部分)
varietyStatsDto.setScanThisQuarter(varietyStatsDto.getScanThisQuarter() == null ? scan : varietyStatsDto.getScanThisQuarter() + scan);
// 补充本季度扫码人数(社群书部分)
varietyStatsDto.setScanUserThisQuarter(Math.toIntExact(varietyStatsDto.getScanUserThisQuarter() == null ? scanUser : varietyStatsDto.getScanUserThisQuarter() + scanUser));
// 补充本季度浏览量(社群书部分)
varietyStatsDto.setBrowseThisQuarter(varietyStatsDto.getBrowseThisQuarter() == null ? scan : varietyStatsDto.getBrowseThisQuarter() + scan);
// 补充本季度浏览量(社群书部分)
varietyStatsDto.setBrowseUserThisQuarter(varietyStatsDto.getBrowseUserThisQuarter() == null ? (int) scanUser : (int) (varietyStatsDto.getBrowseUserThisQuarter() + scanUser));
}
// 筛选上季度
List<GroupScanUserStatsDTO> lastQuarterCollect = statsDTOS.stream().filter(
x -> Objects.nonNull(x.getCreateDay())
&& getAgentQuarterDigital(x.getCreateDay()) == getAgentLastQuarterDigital(new Date())
).collect(Collectors.toList());
if (CollUtil.isNotEmpty(thisQuarterCollect)) {
scan = lastQuarterCollect.size();
scanUser = lastQuarterCollect.stream().map(GroupScanUserStatsDTO::getWxUserId).distinct().count();
// 补充上季度扫码量(社群书部分)
varietyStatsDto.setScanLastQuarter(varietyStatsDto.getScanLastQuarter() == null ? scan : varietyStatsDto.getScanLastQuarter() + scan);
// 补充上季度扫码人数(社群书部分)
varietyStatsDto.setScanUserLastQuarter(Math.toIntExact(varietyStatsDto.getScanLastQuarter() == null ? scanUser : varietyStatsDto.getScanLastQuarter() + scanUser));
// 补充上季度浏览量(社群书部分)
varietyStatsDto.setBrowseLastQuarter(varietyStatsDto.getBrowseLastQuarter() == null ? scan : varietyStatsDto.getBrowseLastQuarter() + scan);
// 补充上季度浏览量(社群书部分)
varietyStatsDto.setBrowseUserLastQuarter(varietyStatsDto.getBrowseUserLastQuarter() == null ? (int) scanUser : (int) (varietyStatsDto.getBrowseUserLastQuarter() + scanUser));
}
}
}
}
// 统计印册量
if (CollUtil.isNotEmpty(finalPublishNumDto)) {
if (Objects.isNull(varietyStatsDto)) {
varietyStatsDto = new BookVarietyStatsDto();
}
List<ERPPublishNumDTO> collect = finalPublishNumDto.stream().filter(x -> Objects.nonNull(x.getExpectPublishNum()) && map.get(agentId).contains(x.getAdviserId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)) {
// 累计印刷量
varietyStatsDto.setPrintTotal((int) collect.stream().mapToLong(ERPPublishNumDTO::getExpectPublishNum).sum());
// 本季度印刷量
varietyStatsDto.setPrintThisQuarter((int) collect.stream().filter(x -> getAgentQuarterDigital(x.getCreateDate()) == getAgentQuarterDigital(new Date())).mapToLong(ERPPublishNumDTO::getExpectPublishNum).sum());
// 上季度印刷量
varietyStatsDto.setPrintLastQuarter((int) collect.stream().filter(x -> getAgentQuarterDigital(x.getCreateDate()) == getAgentLastQuarterDigital(new Date())).mapToLong(ERPPublishNumDTO::getExpectPublishNum).sum());
}
}
if (Objects.nonNull(varietyStatsDto)) {
result.put(agentId, varietyStatsDto);
}
}
return result;
}
@Override
public PageBeanNew<AgentBookStatsDetailVO> getAgentBookStatsDetail(Long agentId, String name, Date startDate, Date endDate,
Integer isRay, Integer currentPage, Integer numPerPage) {
String cacheKey = String.format("%s_AGENT_BOOK_STATS_DETAIL_%s:%s:%s:%s:%s:%s:%s", CacheConstant.BOOK, agentId, name, startDate, endDate, isRay, currentPage, numPerPage);
String cache = JedisClusterUtils.get(cacheKey);
if (StrUtil.isNotBlank(cache)){
PageBeanNew<AgentBookStatsDetailVO> pageBeanNew = JSONObject.parseObject(cache, new TypeReference<PageBeanNew<AgentBookStatsDetailVO>>() {});
if (Objects.nonNull(pageBeanNew)){
return pageBeanNew;
}
}
if (Objects.isNull(agentId)){
return new PageBeanNew<>();
}
// 获取出版社下的编辑集合
List<Long> advisers = adviserConsr.getByAgentId(agentId);
if (CollUtil.isEmpty(advisers)){
return new PageBeanNew<>();
}
// 编辑姓名集合
Map<Long, String> adviserNames = adviserConsr.getNames(advisers);
// 根据ERP编号 项目编号查询图书信息
List<ErpBookInfoDTO> raysBookIds = new ArrayList<>();
if (Objects.nonNull(endDate) && CollUtil.isEmpty(raysBookIds)){
raysBookIds = erpConsr.searchBookInfo(name, advisers, startDate, endDate);
if (CollUtil.isEmpty(raysBookIds)){
return new PageBeanNew<>();
}
}
// 分页查询图书
Map<String, Object> map = new HashMap<>();
map.put("isRay", isRay);
map.put("raysBookIds", CollUtil.isEmpty(raysBookIds) ? null : raysBookIds);
map.put("name", name);
map.put("advisers", advisers);
PageBeanNew<AgentBookStatsDetailVO> pageBeanNew = bookAdviserDao.listPageNew(new PageParam(currentPage, numPerPage), map, "getAgentBookStatsDetail");
if (CollUtil.isEmpty(pageBeanNew.getRecordList())){
return pageBeanNew;
}
// 统计扫码量(人)及浏览量(人)
List<AdviserQrcodeSceneDTO> sceneRequestDTOS = new ArrayList<>();
List<Amount4BookAdviserDto> amountRequestDtos = new ArrayList<>();
List<BookBrowseAndScanStatsDTO> requestDtos = new ArrayList<>();
List<ErpBookInfoDTO> finalRaysBookIds = new ArrayList<>();
pageBeanNew.getRecordList().forEach(dto -> {
if (Objects.nonNull(dto) && (Objects.nonNull(dto.getAdviserId()) || Objects.nonNull(dto.getChannelId()) || Objects.nonNull(dto.getBookId()))) {
BookBrowseAndScanStatsDTO statsDTO = new BookBrowseAndScanStatsDTO();
statsDTO.setAdviserId(dto.getAdviserId());
statsDTO.setChannelId(dto.getChannelId());
statsDTO.setBookId(dto.getBookId());
requestDtos.add(statsDTO);
Amount4BookAdviserDto amount4BookAdviserDto = new Amount4BookAdviserDto();
amount4BookAdviserDto.setAdviserId(dto.getAdviserId());
amount4BookAdviserDto.setChannelId(dto.getChannelId());
amount4BookAdviserDto.setBookId(dto.getBookId());
amountRequestDtos.add(amount4BookAdviserDto);
AdviserQrcodeSceneDTO adviserQrcodeSceneDTO = new AdviserQrcodeSceneDTO();
adviserQrcodeSceneDTO.setAdviserId(dto.getAdviserId());
adviserQrcodeSceneDTO.setChannelId(dto.getChannelId());
adviserQrcodeSceneDTO.setBookId(dto.getBookId());
sceneRequestDTOS.add(adviserQrcodeSceneDTO);
ErpBookInfoDTO erpBookInfoDTO = new ErpBookInfoDTO();
erpBookInfoDTO.setAdviserId(dto.getAdviserId());
erpBookInfoDTO.setRaysBookId(Math.toIntExact(dto.getBookId()));
erpBookInfoDTO.setRaysChannelId(Math.toIntExact(dto.getChannelId()));
finalRaysBookIds.add(erpBookInfoDTO);
}
});
// 分析引擎获取非社群书统计结果
List<BookBrowseAndScanStatsDTO> browseAndScanStats = browseRecordConsr.getBookBrowseAndScanStats(requestDtos);
// 微信群获取社群书统计结果
List<Long> bookGroupIds = pageBeanNew.getRecordList().stream().filter(x -> Objects.nonNull(x.getBookGroupId())).map(AgentBookStatsDetailVO::getBookGroupId).distinct().collect(Collectors.toList());
List<GroupScanUserStatsDTO> bookGroupScanStats = wechatGroupConsr.getAdviserBookGroupScanStats(bookGroupIds);
// 查询交易信息
List<Amount4BookAdviserDto> amount4BookAdviser = tradeConsr.getAmount4BookAdviser(amountRequestDtos);
// 查询二维码信息
List<AdviserQrcodeSceneDTO> sceneDTOS = channelConsr.listQrcodeSceneByBookAdviserIds(sceneRequestDTOS);
List<Long> bookGroupIdList = pageBeanNew.getRecordList().stream().filter(Objects::nonNull).map(AgentBookStatsDetailVO::getBookGroupId).distinct().filter(Objects::nonNull).collect(Collectors.toList());
List<BookGroupDTO> dtoByBookGroupIds = new ArrayList<>();
if (CollUtil.isNotEmpty(bookGroupIdList)){
// 查询社群码信息
dtoByBookGroupIds = bookGroupDao.getDTOByIds(bookGroupIdList);
}
Map<Long, BookGroupDTO> bookGroupDTOMap = new HashMap<>();
if (CollUtil.isNotEmpty(dtoByBookGroupIds)){
bookGroupDTOMap = dtoByBookGroupIds.stream().collect(Collectors.toMap(BookGroupDTO::getId, x -> x, (key1, key2) -> key2));
}
// ERP再次查询图书信息
raysBookIds = erpConsr.searchRaysBookId(finalRaysBookIds);
// 组装信息
for (AgentBookStatsDetailVO detailVO : pageBeanNew.getRecordList()) {
// 填充ERP信息
if (Objects.nonNull(detailVO) && Objects.nonNull(detailVO.getBookAdviserId())) {
// 填充二维码信息
if (CollUtil.isNotEmpty(sceneDTOS)) {
List<AdviserQrcodeSceneDTO> qrcodeSceneDTOS = sceneDTOS.stream().filter(
sceneDTO -> Objects.equals(sceneDTO.getBookId(), detailVO.getBookId())
&& Objects.equals(sceneDTO.getAdviserId(), detailVO.getAdviserId())
&& Objects.equals(sceneDTO.getChannelId(), detailVO.getChannelId())
).collect(Collectors.toList());
if (CollUtil.isNotEmpty(qrcodeSceneDTOS)) {
List<QrcodeInfoDto> qrcodeList = new ArrayList<>();
for (AdviserQrcodeSceneDTO qrcodeSceneDTO : qrcodeSceneDTOS) {
QrcodeInfoDto qrcodeInfoDto = new QrcodeInfoDto();
qrcodeInfoDto.setLocationName(StrUtil.isNotBlank(qrcodeSceneDTO.getLocationName()) ? qrcodeSceneDTO.getLocationName() : "二维码");
qrcodeInfoDto.setQrcodeUrl(qrcodeSceneDTO.getQrcodeUrl());
qrcodeList.add(qrcodeInfoDto);
}
detailVO.setQrcodeList(qrcodeList);
}
}
// 填充社群码
if (CollUtil.isNotEmpty(bookGroupDTOMap) && Objects.nonNull(detailVO.getBookGroupId())
&& Objects.nonNull(bookGroupDTOMap.get(detailVO.getBookGroupId()))
&& StrUtil.isNotBlank(bookGroupDTOMap.get(detailVO.getBookGroupId()).getGroupQrcodeUrl())){
QrcodeInfoDto qrcodeInfoDto = new QrcodeInfoDto();
qrcodeInfoDto.setLocationName("二维码");
qrcodeInfoDto.setQrcodeUrl(bookGroupDTOMap.get(detailVO.getBookGroupId()).getGroupQrcodeUrl());
List<QrcodeInfoDto> qrcodeInfoDtos = CollUtil.isEmpty(detailVO.getQrcodeList())?new ArrayList<>():detailVO.getQrcodeList();
qrcodeInfoDtos.add(qrcodeInfoDto);
detailVO.setQrcodeList(qrcodeInfoDtos);
}
if (CollUtil.isNotEmpty(raysBookIds)) {
raysBookIds.stream().filter(
erpBookInfoDTO -> Objects.equals(erpBookInfoDTO.getRaysBookId(),Objects.isNull(detailVO.getBookId())?null:detailVO.getBookId().intValue())
&&Objects.equals(erpBookInfoDTO.getAdviserId(),detailVO.getAdviserId())
&&Objects.equals(erpBookInfoDTO.getRaysChannelId(),Objects.isNull(detailVO.getChannelId())?null:detailVO.getChannelId().intValue())
).findAny().ifPresent(
dto->{
detailVO.setProjectNumber(dto.getProjectNumber());
detailVO.setErpNumber(dto.getErpNumber());
detailVO.setExpectPublishNum(Objects.isNull(dto.getPublishNum())?null:Math.toIntExact(dto.getPublishNum()));
detailVO.setToProjectTime(dto.getBuildTime());
}
);
}
}
// 填充编辑信息
if (Objects.nonNull(detailVO) && Objects.nonNull(detailVO.getAdviserId())) {
if (CollUtil.isNotEmpty(adviserNames)) {
detailVO.setAdviserName(adviserNames.get(detailVO.getAdviserId()));
}
}
// 填充浏览、扫码信息
if (Objects.nonNull(detailVO) && CollUtil.isNotEmpty(browseAndScanStats)){
browseAndScanStats.stream().filter(
bookBrowseAndScanStatsDTO -> Objects.equals(bookBrowseAndScanStatsDTO.getBookId(),detailVO.getBookId())
&&Objects.equals(bookBrowseAndScanStatsDTO.getAdviserId(),detailVO.getAdviserId())
&&Objects.equals(bookBrowseAndScanStatsDTO.getChannelId(),detailVO.getChannelId())
).findFirst().ifPresent(item->{
detailVO.setBrowseTotal(item.getBookBrowseTotal());
detailVO.setBrowseUserTotal(item.getBookBrowseUserTotal());
detailVO.setScanTotal(item.getBookScanTotal());
detailVO.setScanUserTotal(item.getBookScanUserTotal());
});
}
// 补充社群书信息
if (Objects.nonNull(detailVO) && CollUtil.isNotEmpty(bookGroupScanStats) && Objects.nonNull(detailVO.getBookGroupId())){
List<GroupScanUserStatsDTO> collect = bookGroupScanStats.stream().filter(x -> Objects.equals(x.getBookGroupId(), detailVO.getBookGroupId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)){
// 浏览量 扫码量
int total = (int) collect.stream().mapToLong(GroupScanUserStatsDTO::getScanTotal).sum();
// 浏览人数 扫码人数
int user = (int) collect.stream().map(GroupScanUserStatsDTO::getWxUserId).distinct().count();
detailVO.setScanTotal(Objects.nonNull(detailVO.getScanTotal()) ? detailVO.getScanTotal() + total : total);
detailVO.setBrowseTotal(Objects.nonNull(detailVO.getBrowseTotal()) ? detailVO.getBrowseTotal() + total : total);
detailVO.setScanUserTotal(Objects.nonNull(detailVO.getScanUserTotal()) ? detailVO.getScanUserTotal() + user : user);
detailVO.setBrowseUserTotal(Objects.nonNull(detailVO.getBrowseUserTotal()) ? detailVO.getBrowseUserTotal() + user : user);
}
}
// 填充交易信息
if (Objects.nonNull(detailVO) && CollUtil.isNotEmpty(amount4BookAdviser)){
amount4BookAdviser.stream().filter(
amount4BookAdviserDto -> Objects.equals(amount4BookAdviserDto.getBookId(),detailVO.getBookId())
&&Objects.equals(amount4BookAdviserDto.getAdviserId(),detailVO.getAdviserId())
&&Objects.equals(amount4BookAdviserDto.getChannelId(),detailVO.getChannelId())
).findFirst().ifPresent(
dto->{
detailVO.setAmountTotal(dto.getAmountTotal());
}
);
}
}
JedisClusterUtils.set(cacheKey, JSONObject.toJSONString(pageBeanNew), 60 * 60 * 24);
return pageBeanNew;
}
@Override
public void exportAgentBookStatsDetail(Long agentId, String name, Date startDate, Date endDate, Integer isRay) {
// 开线程导出数据
ThreadPoolUtils.EXPORT_THREAD_POOL.execute(() -> {
String agentName = agentConsr.getNameById(agentId);
// 标题
String excelTitle = String.format("%s做书明细导出-%s", agentName, DateUtil.format(new Date(), "yyyyMMdd"));
// 列名称
String[] rowsName = {"书刊ID", "书刊名称", "ISBN", "ERP编号", "项目编号", "二维码信息", "编辑ID", "编辑名称", "是否小睿书", "立项时间", "印册量", "总浏览量", "总浏览人数", "总扫码量", "总扫码人数", "成交金额"};
// 数据列
List<Object[]> dataList = new ArrayList<>();
// 分页查询,每次查询1000条
PageBeanNew<AgentBookStatsDetailVO> pageBeanNew = getAgentBookStatsDetail(agentId, name, startDate, endDate, isRay, 0, 1000);
while (Objects.nonNull(pageBeanNew) && pageBeanNew.getCurrentPage() < pageBeanNew.getPageCount()) {
List<AgentBookStatsDetailVO> detailVOS = pageBeanNew.getRecordList();
for (AgentBookStatsDetailVO detailVO : detailVOS) {
if (Objects.nonNull(detailVO)) {
List<QrcodeInfoDto> qrcodeList = detailVO.getQrcodeList();
String qrcodeInfo = "";
if (CollUtil.isNotEmpty(qrcodeList)){
StringBuilder stringBuilder = new StringBuilder();
for (QrcodeInfoDto qrcodeInfoDto : qrcodeList) {
if (StrUtil.isNotEmpty(qrcodeInfoDto.getQrcodeUrl())) {
continue;
}
if (StrUtil.isNotEmpty(qrcodeInfoDto.getLocationName())) {
stringBuilder.append("印码位置:").append(qrcodeInfoDto.getLocationName()).append(" ");
}
stringBuilder.append("二维码地址:").append(qrcodeInfoDto.getQrcodeUrl()).append("\n");
}
qrcodeInfo = stringBuilder.toString().trim();
}
Object[] objects = new Object[]{
Objects.nonNull(detailVO.getBookId()) ? detailVO.getBookId() : "--",
Objects.nonNull(detailVO.getBookName()) ? detailVO.getBookName() : "--",
Objects.nonNull(detailVO.getIsbn()) ? detailVO.getIsbn() : "--",
Objects.nonNull(detailVO.getErpNumber()) ? detailVO.getErpNumber() : "--",
Objects.nonNull(detailVO.getProjectNumber()) ? detailVO.getProjectNumber() : "--",
StrUtil.isBlank(qrcodeInfo) ? "--" : qrcodeInfo,
Objects.nonNull(detailVO.getAdviserId()) ? String.valueOf(detailVO.getAdviserId()) : "--",
Objects.nonNull(detailVO.getAdviserName()) ? detailVO.getAdviserName() : "--",
Objects.equals(detailVO.getIsRay(), 1) ? "是" : "否",
Objects.nonNull(detailVO.getToProjectTime()) ? DateUtil.format(detailVO.getToProjectTime(), "yyyy/MM/dd") : "--",
Objects.nonNull(detailVO.getExpectPublishNum()) ? String.valueOf(detailVO.getExpectPublishNum()) : "0",
Objects.nonNull(detailVO.getBrowseTotal()) ? String.valueOf(detailVO.getBrowseTotal()) : "0",
Objects.nonNull(detailVO.getBrowseUserTotal()) ? String.valueOf(detailVO.getBrowseUserTotal()) : "0",
Objects.nonNull(detailVO.getScanTotal()) ? String.valueOf(detailVO.getScanTotal()) : "0",
Objects.nonNull(detailVO.getScanUserTotal()) ? String.valueOf(detailVO.getScanUserTotal()) : "0",
Objects.nonNull(detailVO.getAmountTotal()) ? detailVO.getAmountTotal().toString() : "0",
};
dataList.add(objects);
}
}
pageBeanNew = getAgentBookStatsDetail(agentId, name, startDate, endDate, isRay, pageBeanNew.getCurrentPage() + 1, 1000);
}
String url = exportConsr.exportExcel(excelTitle, rowsName, dataList);
sendMsg4ExportAgentBookStatsDetail(agentName,-1,url,new Date());
});
}
public void sendMsg4ExportAgentBookStatsDetail(String agentName, long data, String url, Date sendDate) {
LOGGER.info("发送出版社做书明细导出Excel完成站内信【Start】data=" + data + "url=" + url);
String letterType = "pcloud_book_download";
String content = String.format("{\"commitTime\":\"%s\",\"type\":\"" + agentName + "做书明细导出\"}", DateUtils.formatDate(sendDate));
String fileName = DateUtils.today();
messageConsr.sendLetter(data, 0L, content, SystemCode.pcloud.code, letterType, url, fileName);
LOGGER.info("发送出版社做书明细导出Excel完成站内信【END】");
}
/**
* 根据日期获取出版社季度表示
* 第一季度:12 1 2</p>
* 第二季度:3 4 5</p>
* 第三季度:6 7 8</p>
* 第四季度:9 10 11</p>
* @return 202001
*/
private int getAgentQuarterDigital(Date date) {
if (Objects.isNull(date)) {
date = new Date();
}
int month = DateUtil.month(date) + 1;
int year = DateUtil.year(date);
if (month < 3) {
year--;
month = 12;
}
return year * 100 + (month / 3);
}
/**
* 获取上一个季度
*/
private int getAgentLastQuarterDigital(Date date){
if (Objects.isNull(date)){
date = new Date();
}
return getAgentQuarterDigital(DateUtil.offsetMonth(date,-3));
}
} }
...@@ -10,7 +10,10 @@ import com.pcloud.book.book.dto.BookAdviserDto; ...@@ -10,7 +10,10 @@ import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO; import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO;
import com.pcloud.book.book.dto.BookCountByAdvisersDto; import com.pcloud.book.book.dto.BookCountByAdvisersDto;
import com.pcloud.book.book.dto.BookCountDto; import com.pcloud.book.book.dto.BookCountDto;
import com.pcloud.book.book.dto.ERPPublishNumDTO;
import com.pcloud.book.book.dto.ErpBookInfoDTO;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.common.core.dao.BaseDao; import com.pcloud.common.core.dao.BaseDao;
import java.util.List; import java.util.List;
...@@ -289,4 +292,10 @@ public interface BookAdviserDao extends BaseDao<BookAdviser> { ...@@ -289,4 +292,10 @@ public interface BookAdviserDao extends BaseDao<BookAdviser> {
List<BookAdviserDto> getBookInfoByBookIds(List<Long> bookIds, List<Long> adviserIds, List<Long> channelIds); List<BookAdviserDto> getBookInfoByBookIds(List<Long> bookIds, List<Long> adviserIds, List<Long> channelIds);
BookAdviserDto getBookByBookIdAdviserId(Long bookId, Long adviserId); BookAdviserDto getBookByBookIdAdviserId(Long bookId, Long adviserId);
List<BookAdviserDto> getAdviserBookVarietyStats(List<Long> adviserIds);
List<ERPPublishNumDTO> getErpPublishNumQueryParams(List<Long> adviserIds);
List<AgentBookStatsDetailVO> getAgentBookStatsDetail(List<ErpBookInfoDTO> raysBookIds, Integer isRay, String name, List<Long> advisers);
} }
...@@ -3,10 +3,22 @@ ...@@ -3,10 +3,22 @@
*/ */
package com.pcloud.book.book.dao.impl; package com.pcloud.book.book.dao.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.pcloud.book.book.dao.BookAdviserDao; import com.pcloud.book.book.dao.BookAdviserDao;
import com.pcloud.book.book.dto.*; import com.pcloud.book.book.dto.AdviserBookInfoDTO;
import com.pcloud.book.book.dto.AdviserManageDto;
import com.pcloud.book.book.dto.AviserBookInfoParam;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO;
import com.pcloud.book.book.dto.BookCountByAdvisersDto;
import com.pcloud.book.book.dto.BookCountDto;
import com.pcloud.book.book.dto.ERPPublishNumDTO;
import com.pcloud.book.book.dto.ErpBookInfoDTO;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.common.core.dao.BaseDaoImpl; import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -316,4 +328,27 @@ public class BookAdviserDaoImpl extends BaseDaoImpl<BookAdviser> implements Book ...@@ -316,4 +328,27 @@ public class BookAdviserDaoImpl extends BaseDaoImpl<BookAdviser> implements Book
paramMap.put("adviserId", adviserId); paramMap.put("adviserId", adviserId);
return super.getSqlSession().selectOne(this.getStatement("getBookByBookIdAdviserId"), paramMap); return super.getSqlSession().selectOne(this.getStatement("getBookByBookIdAdviserId"), paramMap);
} }
@Override
public List<BookAdviserDto> getAdviserBookVarietyStats(List<Long> adviserIds) {
return super.getSqlSession().selectList(this.getStatement("getAdviserBookVarietyStats"), MapUtil.of("adviserIds",adviserIds));
}
@Override
public List<ERPPublishNumDTO> getErpPublishNumQueryParams(List<Long> adviserIds) {
return super.getSqlSession().selectList(getStatement("getErpPublishNumQueryParams"),MapUtil.of("adviserIds",adviserIds));
}
@Override
public List<AgentBookStatsDetailVO> getAgentBookStatsDetail(List<ErpBookInfoDTO> raysBookIds, Integer isRay, String name, List<Long> advisers) {
Map<String, Object> map = new HashMap<>();
if (StrUtil.isNotBlank(name) && name.startsWith("BK")){
map.put("bookNo", name.substring(2));
}
map.put("raysBookIds", CollUtil.isEmpty(raysBookIds) ? null : raysBookIds);
map.put("isRay", isRay);
map.put("name", name);
map.put("advisers", advisers);
return super.getSqlSession().selectList(getStatement("getAgentBookStatsDetail"), map);
}
} }
...@@ -11,16 +11,28 @@ import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO; ...@@ -11,16 +11,28 @@ import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO; import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.MapResourceTotalCountDTO; import com.pcloud.book.book.dto.MapResourceTotalCountDTO;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.book.book.vo.PcloudAdviserBookVO; import com.pcloud.book.book.vo.PcloudAdviserBookVO;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException; import com.pcloud.common.permission.PermissionException;
import io.swagger.annotations.*; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParseException;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -252,4 +264,28 @@ public interface BookAdviserFacade { ...@@ -252,4 +264,28 @@ public interface BookAdviserFacade {
@PostMapping("getBookInfoByBookIds") @PostMapping("getBookInfoByBookIds")
ResponseDto<?> getBookInfoByBookIds(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO); ResponseDto<?> getBookInfoByBookIds(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO);
@ApiOperation("出版社作书数据列表明细")
@RequestMapping(value = "/getAgentBookStatsDetail", method = RequestMethod.GET)
ResponseDto<PageBeanNew<AgentBookStatsDetailVO>> getAgentBookStatsDetail(
@RequestHeader("token") String token,
@RequestParam(value = "agentId") Long agentId,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "isRay", required = false) Integer isRay,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage
) throws BizException;
@ApiOperation("出版社作书数据列表明细导出")
@RequestMapping(value = "/exportAgentBookStatsDetail", method = RequestMethod.GET)
ResponseDto<?> exportAgentBookStatsDetail(
@RequestHeader("token") String token,
@RequestParam(value = "agentId") Long agentId,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "isRay", required = false) Integer isRay
) throws BizException;
} }
...@@ -3,19 +3,29 @@ ...@@ -3,19 +3,29 @@
*/ */
package com.pcloud.book.book.facade.impl; package com.pcloud.book.book.facade.impl;
import java.util.ArrayList; import cn.hutool.core.date.DateTime;
import java.util.List; import cn.hutool.core.date.DateUtil;
import java.util.Map; import com.pcloud.book.base.dto.CountDto;
import com.pcloud.book.book.biz.BookAdviserBiz;
import com.pcloud.book.book.dto.AdviserManageDto;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountDto;
import com.pcloud.book.book.dto.BookDataStatisticsDTO; import com.pcloud.book.book.dto.BookDataStatisticsDTO;
import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO; import com.pcloud.book.book.dto.BookQrcodeStatisticsDTO;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO; import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.MapResourceTotalCountDTO; import com.pcloud.book.book.dto.MapResourceTotalCountDTO;
import com.pcloud.book.book.dto.QrcodeStatisticsDTO; import com.pcloud.book.book.dto.QrcodeStatisticsDTO;
import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.facade.BookAdviserFacade;
import com.pcloud.book.book.vo.AgentBookStatsDetailVO;
import com.pcloud.book.book.vo.PcloudAdviserBookVO; import com.pcloud.book.book.vo.PcloudAdviserBookVO;
import com.pcloud.book.book.vo.QrCodeVO; import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.channelcenter.qrcode.entity.QrcodeScene; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.ParamChecker;
import com.pcloud.common.utils.SessionUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -27,17 +37,12 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -27,17 +37,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.pcloud.book.base.dto.CountDto;
import com.pcloud.book.book.biz.BookAdviserBiz; import java.util.ArrayList;
import com.pcloud.book.book.dto.AdviserManageDto; import java.util.Date;
import com.pcloud.book.book.dto.BookAdviserDto; import java.util.List;
import com.pcloud.book.book.dto.BookCountDto; import java.util.Map;
import com.pcloud.book.book.entity.BookAdviser; import java.util.Objects;
import com.pcloud.book.book.facade.BookAdviserFacade;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
/** /**
* @描述:顾问书籍管理接口实现类 * @描述:顾问书籍管理接口实现类
...@@ -266,4 +271,44 @@ public class BookAdviserFacadeImpl implements BookAdviserFacade { ...@@ -266,4 +271,44 @@ public class BookAdviserFacadeImpl implements BookAdviserFacade {
public ResponseDto<?> getBookInfoByBookIds(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO) { public ResponseDto<?> getBookInfoByBookIds(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO) {
return new ResponseDto<>(bookAdviserBiz.getBookInfoByBookIds(mapResourceTotalCountDTO.getBookIds(), mapResourceTotalCountDTO.getAdviserIds(), mapResourceTotalCountDTO.getChannelIds())); return new ResponseDto<>(bookAdviserBiz.getBookInfoByBookIds(mapResourceTotalCountDTO.getBookIds(), mapResourceTotalCountDTO.getAdviserIds(), mapResourceTotalCountDTO.getChannelIds()));
} }
@Override
@RequestMapping(value = "/getAgentBookStatsDetail", method = RequestMethod.GET)
public ResponseDto<PageBeanNew<AgentBookStatsDetailVO>> getAgentBookStatsDetail(
@RequestHeader("token") String token,
@RequestParam(value = "agentId") Long agentId,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "isRay", required = false) Integer isRay,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage
) throws BizException {
SessionUtil.getToken4Redis(token);
ParamChecker.checkPageParamIsAbsent(currentPage,numPerPage,"分页参数错误");
DateTime start = Objects.isNull(DateUtil.parse(startDate))?null: DateUtil.beginOfDay(DateUtil.parse(startDate));
DateTime end =Objects.isNull(DateUtil.parse(endDate))?null:DateUtil.beginOfDay(DateUtil.parse(endDate));
// 开始结束同一天 则结束时间后延一天
if (Objects.nonNull(start) && Objects.equals(start,end)){
end = DateUtil.offsetDay(end.toJdkDate(),1);
}
return new ResponseDto<>(bookAdviserBiz.getAgentBookStatsDetail(agentId, name, start, end, isRay, currentPage, numPerPage));
}
@Override
@RequestMapping(value = "/exportAgentBookStatsDetail", method = RequestMethod.GET)
public ResponseDto<?> exportAgentBookStatsDetail(
@RequestHeader("token") String token,
@RequestParam(value = "agentId") Long agentId,
@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "startDate", required = false) String startDate,
@RequestParam(value = "endDate", required = false) String endDate,
@RequestParam(value = "isRay", required = false) Integer isRay
) throws BizException {
SessionUtil.getToken4Redis(token);
DateTime start = Objects.isNull(DateUtil.parse(startDate))?null: DateUtil.beginOfDay(DateUtil.parse(startDate));
DateTime end =Objects.isNull(DateUtil.parse(endDate))?null:DateUtil.beginOfDay(DateUtil.parse(endDate));
bookAdviserBiz.exportAgentBookStatsDetail(agentId, name, start, end, isRay);
return new ResponseDto<>();
}
} }
...@@ -5,7 +5,17 @@ package com.pcloud.book.book.service.impl; ...@@ -5,7 +5,17 @@ package com.pcloud.book.book.service.impl;
import com.pcloud.book.book.biz.BookAdviserBiz; import com.pcloud.book.book.biz.BookAdviserBiz;
import com.pcloud.book.book.biz.BookRaysClassifyBiz; import com.pcloud.book.book.biz.BookRaysClassifyBiz;
import com.pcloud.book.book.dto.*; import com.pcloud.book.book.dto.AdviserBookInfoDTO;
import com.pcloud.book.book.dto.AviserBookInfoParam;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookCountAndAdviserIdDTO;
import com.pcloud.book.book.dto.BookCountByAdvisersDto;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.BookRightsSettingDTO;
import com.pcloud.book.book.dto.BookVarietyStatsDto;
import com.pcloud.book.book.dto.BookVarietyStatsRequestDto;
import com.pcloud.book.book.dto.MapResourceTotalCountDTO;
import com.pcloud.book.book.entity.BookAdviser; import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.service.BookAdviserService; import com.pcloud.book.book.service.BookAdviserService;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
...@@ -13,7 +23,13 @@ import com.pcloud.common.exceptions.BizException; ...@@ -13,7 +23,13 @@ import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ResponseHandleUtil; import com.pcloud.common.utils.ResponseHandleUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -149,4 +165,10 @@ public class BookAdviserServiceImpl implements BookAdviserService { ...@@ -149,4 +165,10 @@ public class BookAdviserServiceImpl implements BookAdviserService {
public ResponseEntity<ResponseDto<Map<String, BookResourceStatisticsDTO>>> mapResourceTotalCount(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO) { public ResponseEntity<ResponseDto<Map<String, BookResourceStatisticsDTO>>> mapResourceTotalCount(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO) {
return ResponseHandleUtil.toResponse(bookAdviserBiz.mapResourceTotalCount(mapResourceTotalCountDTO.getAdviserIds(), mapResourceTotalCountDTO.getBookIds(), mapResourceTotalCountDTO.getChannelIds())); return ResponseHandleUtil.toResponse(bookAdviserBiz.mapResourceTotalCount(mapResourceTotalCountDTO.getAdviserIds(), mapResourceTotalCountDTO.getBookIds(), mapResourceTotalCountDTO.getChannelIds()));
} }
@Override
@PostMapping("/getAdviserBookVarietyStats")
public ResponseEntity<ResponseDto<Map<Long, BookVarietyStatsDto>>> getAdviserBookVarietyStats(@RequestBody List<BookVarietyStatsRequestDto> requestDtos) throws BizException {
return ResponseHandleUtil.toResponse(bookAdviserBiz.getAdviserBookVarietyStats(requestDtos));
}
} }
package com.pcloud.book.book.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 出版社做书数据列表明细
*
* @author guiq
* @version 1.0
* @since 2020年9月24日
*/
@Data
@ApiModel("出版社做书数据列表明细")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class AgentBookStatsDetailVO implements Serializable {
private static final long serialVersionUID = 9125134175050870278L;
/**
* 书名
*/
@ApiModelProperty("书名")
private String bookName;
/**
* ISBN
*/
@ApiModelProperty("ISBN")
private String isbn;
/**
* 序号
*/
@ApiModelProperty("序号")
private String serialNumber;
/**
* ERP编号
*/
@ApiModelProperty("ERP编号")
private String erpNumber;
/**
* 项目编号
*/
@ApiModelProperty("项目编号")
private String projectNumber;
/**
* 图书ID
*/
@ApiModelProperty("图书ID")
private Long bookId;
/**
* 二维码列表
*/
@ApiModelProperty("二维码列表")
private List<QrcodeInfoDto> qrcodeList;
/**
* 编辑名称
*/
@ApiModelProperty("编辑名称")
private String adviserName;
/**
* 编辑ID
*/
@ApiModelProperty("编辑ID")
private Long adviserId;
/**
* 是否小睿书
*/
@ApiModelProperty("是否小睿书")
private Integer isRay;
/**
* 立项时间
*/
@ApiModelProperty("立项时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date toProjectTime;
/**
* 印册量
*/
@ApiModelProperty("印册量")
private Integer expectPublishNum;
/**
* 总浏览量
*/
@ApiModelProperty("总浏览量")
private Integer browseTotal;
/**
* 总浏览人数
*/
@ApiModelProperty("总浏览人数")
private Integer browseUserTotal;
/**
* 总扫码量
*/
@ApiModelProperty("总扫码量")
private Integer scanTotal;
/**
* 总扫码人数
*/
@ApiModelProperty("总扫码人数")
private Integer scanUserTotal;
/**
* 总成交金额
*/
@ApiModelProperty("总成交金额")
private BigDecimal amountTotal;
/**
* bookAdviserId
*/
@ApiModelProperty("bookAdviserId")
private Long bookAdviserId;
/**
* channelId
*/
@ApiModelProperty("channelId")
private Long channelId;
/**
* bookGroupId
*/
@ApiModelProperty("bookGroupId")
private Long bookGroupId;
}
package com.pcloud.book.book.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 出版社作书数据列表-二维码信息
*
* @author guiq
* @version 1.0
* @since 2020年9月24日
*/
@Data
@ApiModel("出版社作书数据列表-二维码信息")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QrcodeInfoDto implements Serializable {
private static final long serialVersionUID = 3951537842280735854L;
/**
* 印码位置
*/
@ApiModelProperty("印码位置")
private String locationName;
/**
* 二维码地址
*/
@ApiModelProperty("二维码地址")
private String qrcodeUrl;
}
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
*/ */
package com.pcloud.book.consumer.analysisengine; package com.pcloud.book.consumer.analysisengine;
import cn.hutool.core.collection.CollUtil;
import com.pcloud.analysisengine.browse.dto.BookBrowseAndScanStatsDTO;
import com.pcloud.analysisengine.browse.dto.BookServeBrowseCountParameterDTO; import com.pcloud.analysisengine.browse.dto.BookServeBrowseCountParameterDTO;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto; import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
import com.pcloud.analysisengine.browse.dto.GroupBrowseStatisticVO; import com.pcloud.analysisengine.browse.dto.GroupBrowseStatisticVO;
...@@ -12,12 +14,12 @@ import com.pcloud.common.core.aspect.ParamLog; ...@@ -12,12 +14,12 @@ import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil; import com.pcloud.common.utils.ResponseHandleUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -181,4 +183,18 @@ public class BrowseRecordConsr { ...@@ -181,4 +183,18 @@ public class BrowseRecordConsr {
return map; return map;
} }
@ParamLog("获取图书扫码量,浏览量")
public List<BookBrowseAndScanStatsDTO> getBookBrowseAndScanStats(List<BookBrowseAndScanStatsDTO> dtos) {
if (CollUtil.isEmpty(dtos)){
return new ArrayList<>();
}
List<BookBrowseAndScanStatsDTO> bookBrowseAndScanStatsDTOS = new ArrayList<>();
try {
bookBrowseAndScanStatsDTOS = ResponseHandleUtil.parseList(browseRecordService.getBookBrowseAndScanStats(dtos), BookBrowseAndScanStatsDTO.class);
} catch (Exception e) {
LOGGER.error("获取图书扫码量,浏览量失败,err:{}", e.getMessage(), e);
}
return bookBrowseAndScanStatsDTOS;
}
} }
package com.pcloud.book.consumer.erp; package com.pcloud.book.consumer.erp;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.dto.CreateBookResultVO; import com.pcloud.book.book.dto.CreateBookResultVO;
import com.pcloud.book.book.dto.ERPPublishNumDTO;
import com.pcloud.book.book.dto.ErpBookInfoDTO;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
...@@ -18,6 +21,8 @@ import org.slf4j.LoggerFactory; ...@@ -18,6 +21,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -161,4 +166,75 @@ public class ErpConsr { ...@@ -161,4 +166,75 @@ public class ErpConsr {
throw new BookBizException(BookBizException.INVOKE_CONTENT_ERROR, "创建书刊之后同步去更新erp信息~!"); throw new BookBizException(BookBizException.INVOKE_CONTENT_ERROR, "创建书刊之后同步去更新erp信息~!");
} }
} }
@ParamLog("获取图书印册量")
public List<ERPPublishNumDTO> getBookExpectPublishNum(List<ERPPublishNumDTO> dtos) {
if (CollUtil.isEmpty(dtos)) {
return new ArrayList<>();
}
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
try {
HttpResponse response = HttpUtils.doPost(domain, "/erp/project4Third/getBookExpectPublishNum", "POST", headers, new HashMap<>(), JSONObject.toJSONString(dtos));
String entityString = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = JSONObject.parseObject(entityString);
if (jsonObject.getInteger("errCode") != 0) {
throw new BizException(jsonObject.getString("message"));
}
return JSONObject.parseArray(jsonObject.getJSONArray("data").toJSONString(), ERPPublishNumDTO.class);
} catch (Exception e) {
LOGGER.error("获取图书印册量失败 [projectService.getBookExpectPublishNum]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_CONTENT_ERROR, "获取图书印册量失败!");
}
}
@ParamLog("模糊查询图书信息")
public List<ErpBookInfoDTO> searchBookInfo(String name, List<Long> advisers, Date startTime, Date endTime) {
if (CollUtil.isEmpty(advisers)) {
return new ArrayList<>();
}
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
Map<String, Object> params = new HashMap<>();
params.put("name", name);
params.put("advisers", advisers);
params.put("startTime", startTime);
params.put("endTime", endTime);
try {
HttpResponse response = HttpUtils.doPost(domain, "/erp/project4Third/searchBookInfo", "GET", headers, new HashMap<>(), JSONObject.toJSONString(params));
String entityString = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = JSONObject.parseObject(entityString);
if (jsonObject.getInteger("errCode") != 0) {
throw new BizException(jsonObject.getString("message"));
}
return JSONObject.parseArray(jsonObject.getJSONArray("data").toJSONString(), ErpBookInfoDTO.class);
} catch (Exception e) {
LOGGER.error("模糊查询图书信息 [projectService.searchBookInfo]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_CONTENT_ERROR, "模糊查询图书信息失败!");
}
}
@ParamLog("模糊查询erp图书ID")
public List<ErpBookInfoDTO> searchRaysBookId(List<ErpBookInfoDTO> erpBookInfoDTOS) {
if (CollUtil.isEmpty(erpBookInfoDTOS)) {
return new ArrayList<>();
}
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
try {
HttpResponse response = HttpUtils.doPost(domain, "/erp/project4Third/searchRaysBookId", "GET", headers, new HashMap<>(), JSONObject.toJSONString(erpBookInfoDTOS));
String entityString = EntityUtils.toString(response.getEntity());
JSONObject jsonObject = JSONObject.parseObject(entityString);
if (jsonObject.getInteger("errCode") != 0) {
throw new BizException(jsonObject.getString("message"));
}
return JSONObject.parseArray(jsonObject.getJSONArray("data").toJSONString(), ErpBookInfoDTO.class);
} catch (Exception e) {
LOGGER.error("模糊查询图书信息 [projectService.searchBookInfo]:" + e.getMessage(), e);
throw new BookBizException(BookBizException.INVOKE_CONTENT_ERROR, "模糊查询erp图书ID失败!");
}
}
} }
package com.pcloud.book.consumer.trade; package com.pcloud.book.consumer.trade;
import com.pcloud.book.base.exception.BookBizException;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil; import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.facade.tradecenter.dto.Amount4BookAdviserDto;
import com.pcloud.facade.tradecenter.dto.BookGroupSaleSearchDto; import com.pcloud.facade.tradecenter.dto.BookGroupSaleSearchDto;
import com.pcloud.facade.tradecenter.dto.BookIncomeQueryVo; import com.pcloud.facade.tradecenter.dto.BookIncomeQueryVo;
import com.pcloud.facade.tradecenter.dto.ClassifyPayDetailDto; import com.pcloud.facade.tradecenter.dto.ClassifyPayDetailDto;
...@@ -264,4 +265,17 @@ public class TradeConsr { ...@@ -264,4 +265,17 @@ public class TradeConsr {
} }
return map; return map;
} }
public List<Amount4BookAdviserDto> getAmount4BookAdviser(List<Amount4BookAdviserDto> requestDtos) {
if (CollUtil.isEmpty(requestDtos)) {
return new ArrayList<>();
}
try {
return ResponseHandleUtil.parseList(orderFormService.getAmount4BookAdviser(requestDtos), Amount4BookAdviserDto.class);
} catch (Exception e) {
LOGGER.error("查询编辑图书交易额失败.[getAmount4BookAdviser]:{}", e.getMessage(), e);
}
return new ArrayList<>();
}
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package com.pcloud.book.consumer.user; package com.pcloud.book.consumer.user;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException; import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.qrcode.dto.AdviserQrcodeSceneDTO;
import com.pcloud.channelcenter.qrcode.dto.MapResourceCountDTO; import com.pcloud.channelcenter.qrcode.dto.MapResourceCountDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeMessageDTO; import com.pcloud.channelcenter.qrcode.dto.QrcodeMessageDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto; import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
...@@ -23,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -23,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -249,4 +251,16 @@ public class ChannelConsr { ...@@ -249,4 +251,16 @@ public class ChannelConsr {
throw new ChannelBizException(ChannelBizException.PARAM_IS_NULL, "获取二维码位置失败"); throw new ChannelBizException(ChannelBizException.PARAM_IS_NULL, "获取二维码位置失败");
} }
} }
public List<AdviserQrcodeSceneDTO> listQrcodeSceneByBookAdviserIds(List<AdviserQrcodeSceneDTO> bookAdviserIds) {
if (CollectionUtils.isEmpty(bookAdviserIds)) {
return new ArrayList<>();
}
try {
return ResponseHandleUtil.parseList(qrcodeSceneService.listQrcodeSceneByBookAdviserIds(bookAdviserIds), AdviserQrcodeSceneDTO.class);
} catch (Exception e) {
LOGGER.error("批量获取二维码及其印码位置 失败:{} ", e.getMessage(), e);
}
return new ArrayList<>();
}
} }
package com.pcloud.book.consumer.wechatgroup; package com.pcloud.book.consumer.wechatgroup;
import cn.hutool.core.collection.CollUtil;
import com.dcg.coolq.sdk.CoolQSDK; import com.dcg.coolq.sdk.CoolQSDK;
import com.dcg.coolq.sdk.message.vos.send.PrivateMsgSendVO; import com.dcg.coolq.sdk.message.vos.send.PrivateMsgSendVO;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.pcloud.book.applet.dto.SpecialBookDTO;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
...@@ -14,6 +14,7 @@ import com.pcloud.common.utils.json.JSONUtils; ...@@ -14,6 +14,7 @@ import com.pcloud.common.utils.json.JSONUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO; import com.pcloud.wechatgroup.group.dto.GroupMemberStatisDTO;
import com.pcloud.wechatgroup.group.dto.GroupRobotDTO; import com.pcloud.wechatgroup.group.dto.GroupRobotDTO;
import com.pcloud.wechatgroup.group.dto.GroupScanUserStatsDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO; import com.pcloud.wechatgroup.group.dto.GroupUserCountDTO;
import com.pcloud.wechatgroup.group.dto.GroupUserDTO; import com.pcloud.wechatgroup.group.dto.GroupUserDTO;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO; import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
...@@ -37,7 +38,7 @@ import com.pcloud.wechatgroup.selfrobot.dto.SelfRobotDTO; ...@@ -37,7 +38,7 @@ import com.pcloud.wechatgroup.selfrobot.dto.SelfRobotDTO;
import com.pcloud.wechatgroup.selfrobot.dto.SendMessageDTO; import com.pcloud.wechatgroup.selfrobot.dto.SendMessageDTO;
import com.pcloud.wechatgroup.selfrobot.dto.UserRobotDTO; import com.pcloud.wechatgroup.selfrobot.dto.UserRobotDTO;
import com.pcloud.wechatgroup.selfrobot.service.SelfRobotService; import com.pcloud.wechatgroup.selfrobot.service.SelfRobotService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -50,8 +51,6 @@ import java.util.HashMap; ...@@ -50,8 +51,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Component("wechatGroupConsr") @Component("wechatGroupConsr")
public class WechatGroupConsr { public class WechatGroupConsr {
...@@ -792,4 +791,29 @@ public class WechatGroupConsr { ...@@ -792,4 +791,29 @@ public class WechatGroupConsr {
} }
return map; return map;
} }
@ParamLog("根据编辑列表获取社群书扫码统计信息")
public List<GroupScanUserStatsDTO> getBookGroupScanStats(List<Long> adviserIds){
List<GroupScanUserStatsDTO> list = new ArrayList<>();
try{
list = ResponseHandleUtil.parseList(groupMemberService.getBookGroupScanStats(adviserIds),GroupScanUserStatsDTO.class);
}catch (Exception e){
log.error("根据编辑列表获取社群书扫码统计信息.[getBookGroupScanStats]失败, err:{}", e.getMessage(), e);
}
return list;
}
@ParamLog("根据bookGroupIds获取社群书扫码统计信息")
public List<GroupScanUserStatsDTO> getAdviserBookGroupScanStats(List<Long> bookAdviserIds){
if (CollUtil.isEmpty(bookAdviserIds)){
return new ArrayList<>();
}
List<GroupScanUserStatsDTO> list = new ArrayList<>();
try{
list = ResponseHandleUtil.parseList(groupMemberService.getAdviserBookGroupScanStats(bookAdviserIds),GroupScanUserStatsDTO.class);
}catch (Exception e){
log.error("根据bookGroupIds获取社群书扫码统计信息.[getAdviserBookGroupScanStats]失败, err:{}", e.getMessage(), e);
}
return list;
}
} }
...@@ -869,4 +869,110 @@ ...@@ -869,4 +869,110 @@
ORDER BY IS_MAIN_EDITOR DESC,IS_DELETE ASC ORDER BY IS_MAIN_EDITOR DESC,IS_DELETE ASC
LIMIT 1 LIMIT 1
</select> </select>
<select id="getAdviserBookVarietyStats" parameterType="map" resultType="com.pcloud.book.book.dto.BookAdviserDto">
SELECT
BOOK_ID AS bookId,
ADVISER_ID adviserId,
CREATED_DATE createdDate
FROM
book_adviser
WHERE
IS_DELETE = 0
<if test="null != adviserIds and adviserIds.size > 0">
AND ADVISER_ID IN
<foreach collection="adviserIds" open="(" item="item" close=")" separator=",">
#{item}
</foreach>
</if>
</select>
<select id="getErpPublishNumQueryParams" parameterType="map" resultType="com.pcloud.book.book.dto.ERPPublishNumDTO">
SELECT
ADVISER_ID AS adviserId,
CHANNEL_ID AS channelId,
BOOK_ID AS bookId,
CREATED_DATE AS createDate
FROM
book_adviser
WHERE
IS_DELETE = 0 AND ADVISER_ID IN
<foreach collection="adviserIds" item="item" close=")" open="(" separator=",">
#{item}
</foreach>
GROUP BY
ADVISER_ID,
CHANNEL_ID,
BOOK_ID
</select>
<select id="getAgentBookStatsDetail" parameterType="map" resultType="com.pcloud.book.book.vo.AgentBookStatsDetailVO">
SELECT
tb.bookAdviserId,
tb.channelId,
tb.bookName,
tb.isbn,
tb.bookId,
tb.adviserId,
tb.isRay,
tb.serialNumber,
tb.bookGroupId
FROM (
SELECT
ba.BOOK_ADVISER_ID AS bookAdviserId,
ba.CHANNEL_ID AS channelId,
b.BOOK_NAME AS bookName,
b.ISBN AS isbn,
b.BOOK_ID AS bookId,
ba.ADVISER_ID AS adviserId,
IF(ba.is_open_robot_process OR bg.join_group_type = 4, 1, 0) AS isRay,
b.SERIAL_NUMBER AS serialNumber,
bg.id AS bookGroupId
FROM
book_adviser ba
LEFT JOIN book b ON ba.BOOK_ID = b.BOOK_ID
LEFT JOIN book_group bg on ba.BOOK_ID = bg.book_id AND ba.CHANNEL_ID = bg.channel_id AND ba.ADVISER_ID = bg.create_user
<where>
ba.ADVISER_ID IN
<foreach collection="advisers" separator="," close=")" item="it" open="(">
${it}
</foreach>
<if test="raysBookIds != null and raysBookIds.size > 0 or name != null">
AND (
<if test="raysBookIds != null and raysBookIds.size > 0">
<foreach collection="raysBookIds" open="(" item="item" close=")" separator="OR">( 1=1
<if test="item.adviserId != null">
AND ba.ADVISER_ID =${item.adviserId}
</if>
<if test="item.raysChannelId != null">
AND ba.CHANNEL_ID=${item.raysChannelId}
</if>
<if test="item.raysBookId != null">
AND ba.BOOK_ID=${item.raysBookId}
</if>
)
</foreach>
<if test="name != null">
OR
</if>
</if>
<if test="name != null">
(
b.BOOK_NAME LIKE CONCAT('%',#{name},'%') OR b.ISBN LIKE CONCAT('%',#{name},'%')
<if test="bookNo != null">
OR b.BOOK_ID LIKE CONCAT('%',#{bookNo},'%')
</if>
)
</if>
)
</if>
</where>
) tb
<if test="isRay != null">
where tb.isRay = #{isRay}
</if>
ORDER BY tb.bookAdviserId DESC
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment