Commit 6cb05388 by Administrator

Merge branch 'feature/1003584' into 'master'

feat: [1003584] ERP新增质检功能

See merge request rays/pcloud-book!974
parents 388c2833 a56313e6
package com.pcloud.book.book.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QrcodeServeDto implements Serializable {
@ApiModelProperty("作品或应用id")
private Long serveId;
@ApiModelProperty("sceneId")
private Long sceneId;
@ApiModelProperty("社群书id")
private Long bookGroupId;
@ApiModelProperty("类型;APP应用,PRODUCT作品")
private String serveType;
@ApiModelProperty("链接")
private String serveUrl;
@ApiModelProperty("短链")
private String shortUrl;
@ApiModelProperty("应用或作品名称")
private String serveName;
@ApiModelProperty("类型")
private String fromType;
@ApiModelProperty("是否超级作者")
private Boolean isSuper;
@ApiModelProperty("销售价")
private Double retailPrice;
@ApiModelProperty("协议价")
private Double dealPrice;
@ApiModelProperty("图片地址")
private String picUrl;
@ApiModelProperty("描述信息")
private String description;
@ApiModelProperty("类型")
private String typeCode;
@ApiModelProperty("唯一码")
private String uniqueNumber;
@ApiModelProperty("专业")
private Long proLabelId;
@ApiModelProperty("深度")
private Long depLabelId;
@ApiModelProperty("目的")
private Long purLabelId;
@ApiModelProperty("专业")
private String proLabelName;
@ApiModelProperty("深度")
private String depLabelName;
@ApiModelProperty("目的")
private String purLabelName;
@ApiModelProperty("服务创建人")
private Long serveCreateUser;
@ApiModelProperty("服务创建人名称")
private String serveCreateUserName;
@ApiModelProperty("横图")
private String transverseImg;;
}
...@@ -13,6 +13,7 @@ import com.pcloud.book.book.dto.BookInfoAnalysicsDTO; ...@@ -13,6 +13,7 @@ import com.pcloud.book.book.dto.BookInfoAnalysicsDTO;
import com.pcloud.book.book.dto.BookInfoAndAuthStatusDTO; import com.pcloud.book.book.dto.BookInfoAndAuthStatusDTO;
import com.pcloud.book.book.dto.CreateBookResultVO; import com.pcloud.book.book.dto.CreateBookResultVO;
import com.pcloud.book.book.dto.CreateBookVO; import com.pcloud.book.book.dto.CreateBookVO;
import com.pcloud.book.book.dto.QrcodeServeDto;
import com.pcloud.book.book.dto.RelateAdviserVO; import com.pcloud.book.book.dto.RelateAdviserVO;
import com.pcloud.book.book.entity.Book; import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.BookLabel; import com.pcloud.book.book.entity.BookLabel;
...@@ -25,6 +26,7 @@ import com.pcloud.book.book.vo.request.BookQualifyInfoVO; ...@@ -25,6 +26,7 @@ import com.pcloud.book.book.vo.request.BookQualifyInfoVO;
import com.pcloud.book.book.vo.request.BookSearchParamVO; import com.pcloud.book.book.vo.request.BookSearchParamVO;
import com.pcloud.book.book.dto.BookUniqueNumberDTO; import com.pcloud.book.book.dto.BookUniqueNumberDTO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto; import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean; import com.pcloud.common.page.PageBean;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
...@@ -679,4 +681,12 @@ public interface BookBiz { ...@@ -679,4 +681,12 @@ public interface BookBiz {
void addCreateInfoToMq(List<CreateBookVO> createBookVOList); void addCreateInfoToMq(List<CreateBookVO> createBookVOList);
List<CreateBookResultVO> batchCreateBook4ErpNew(List<CreateBookVO> createBookVOList); List<CreateBookResultVO> batchCreateBook4ErpNew(List<CreateBookVO> createBookVOList);
BookDto getBaseById4Erp(Long bookId,Long channelId,Long adviserId);
List<BookGroupDTO> getQrcode4Erp(Long bookId, Long channelId, Long adviserId);
PageBeanNew<QrcodeServeDto> getQrcodeDetail4Erp(Long sceneId, Long bookGroupId, Long channelId, Integer currentPage, Integer numPerPage);
BookGroupDTO checkQrcodeDetail4Erp(String url);
} }
...@@ -9,8 +9,11 @@ import com.google.common.collect.Maps; ...@@ -9,8 +9,11 @@ import com.google.common.collect.Maps;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.netflix.discovery.converters.Auto; import com.netflix.discovery.converters.Auto;
import com.pcloud.analysisengine.qrcode.dto.BookTimeSourceDto; import com.pcloud.analysisengine.qrcode.dto.BookTimeSourceDto;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.appcenter.assist.dto.AssistTempletDTO; import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
import com.pcloud.appcenter.base.dto.AppPriceCacheDTO;
import com.pcloud.appcenter.base.exception.AppBizException; import com.pcloud.appcenter.base.exception.AppBizException;
import com.pcloud.appcenter.cache.service.AppPriceCacheService;
import com.pcloud.book.applet.biz.AppletBookClassifyBiz; import com.pcloud.book.applet.biz.AppletBookClassifyBiz;
import com.pcloud.book.applet.entity.AppletUserLabelRelation; import com.pcloud.book.applet.entity.AppletUserLabelRelation;
import com.pcloud.book.applet.enums.LabelTypeEnum; import com.pcloud.book.applet.enums.LabelTypeEnum;
...@@ -50,6 +53,7 @@ import com.pcloud.book.book.dto.BookNameUpdateDTO; ...@@ -50,6 +53,7 @@ import com.pcloud.book.book.dto.BookNameUpdateDTO;
import com.pcloud.book.book.dto.CreateBookResultVO; import com.pcloud.book.book.dto.CreateBookResultVO;
import com.pcloud.book.book.dto.CreateBookVO; import com.pcloud.book.book.dto.CreateBookVO;
import com.pcloud.book.book.dto.CreateQrcodeVO; import com.pcloud.book.book.dto.CreateQrcodeVO;
import com.pcloud.book.book.dto.QrcodeServeDto;
import com.pcloud.book.book.dto.RelateAdviserVO; import com.pcloud.book.book.dto.RelateAdviserVO;
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;
...@@ -69,16 +73,20 @@ import com.pcloud.book.book.vo.request.BookSearchParamVO; ...@@ -69,16 +73,20 @@ import com.pcloud.book.book.vo.request.BookSearchParamVO;
import com.pcloud.book.book.dto.BookUniqueNumberDTO; import com.pcloud.book.book.dto.BookUniqueNumberDTO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto; import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.consumer.analysisengine.SceneRecordConsr; import com.pcloud.book.consumer.analysisengine.SceneRecordConsr;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.app.AssistTempletConsr; import com.pcloud.book.consumer.app.AssistTempletConsr;
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.common.ExportConsr;
import com.pcloud.book.consumer.erp.ErpConsr; import com.pcloud.book.consumer.erp.ErpConsr;
import com.pcloud.book.consumer.isbn.IsbnConsr; import com.pcloud.book.consumer.isbn.IsbnConsr;
import com.pcloud.book.consumer.label.LabelConsr;
import com.pcloud.book.consumer.message.MessageConsr; import com.pcloud.book.consumer.message.MessageConsr;
import com.pcloud.book.consumer.raystask.MainLineConsr; import com.pcloud.book.consumer.raystask.MainLineConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
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.AgentConsr;
import com.pcloud.book.consumer.user.ChannelConsr; import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.user.MerchantConsr;
import com.pcloud.book.consumer.user.PartyConsr; import com.pcloud.book.consumer.user.PartyConsr;
import com.pcloud.book.consumer.wechat.WechatConsr; import com.pcloud.book.consumer.wechat.WechatConsr;
import com.pcloud.book.copyright.biz.BookAuthInfoBiz; import com.pcloud.book.copyright.biz.BookAuthInfoBiz;
...@@ -88,21 +96,30 @@ import com.pcloud.book.es.entity.ESBookAndAdviser; ...@@ -88,21 +96,30 @@ import com.pcloud.book.es.entity.ESBookAndAdviser;
import com.pcloud.book.group.biz.BookGroupBiz; import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.dao.BookAppletSceneDao; import com.pcloud.book.group.dao.BookAppletSceneDao;
import com.pcloud.book.group.dao.BookGroupDao; import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dao.BookGroupServeDao;
import com.pcloud.book.group.dto.BookGroupDTO; import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.entity.BookAppletScene; import com.pcloud.book.group.entity.BookAppletScene;
import com.pcloud.book.group.entity.BookGroup; import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.enums.AppAndProductTypeEnum;
import com.pcloud.book.group.enums.JoinGroupTypeEnum; import com.pcloud.book.group.enums.JoinGroupTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.mq.producer.BookMQProducer; import com.pcloud.book.mq.producer.BookMQProducer;
import com.pcloud.book.rightsSetting.mapper.RightsSettingBookRelationMapper; import com.pcloud.book.rightsSetting.mapper.RightsSettingBookRelationMapper;
import com.pcloud.book.util.common.ThreadPoolUtils; import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.qrcode.dto.QrcodeLocationDto;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.channelcenter.qrcode.entity.QrcodeLabel; import com.pcloud.channelcenter.qrcode.entity.QrcodeLabel;
import com.pcloud.channelcenter.qrcode.entity.QrcodeScene; import com.pcloud.channelcenter.qrcode.entity.QrcodeScene;
import com.pcloud.channelcenter.qrcode.entity.QrcodeStyle; import com.pcloud.channelcenter.qrcode.entity.QrcodeStyle;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.channelcenter.wechat.dto.BookServeParamVO; import com.pcloud.channelcenter.wechat.dto.BookServeParamVO;
import com.pcloud.channelcenter.wechat.dto.MessageDto;
import com.pcloud.channelcenter.wechat.vo.BookServeVO; import com.pcloud.channelcenter.wechat.vo.BookServeVO;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.AgentTypeEnum; import com.pcloud.common.core.constant.AgentTypeEnum;
import com.pcloud.common.core.constant.SystemCode; import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.enums.AppTypeEnum;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.exceptions.ExportException; import com.pcloud.common.exceptions.ExportException;
import com.pcloud.common.page.PageBean; import com.pcloud.common.page.PageBean;
...@@ -111,9 +128,13 @@ import com.pcloud.common.page.PageParam; ...@@ -111,9 +128,13 @@ 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.NumberUtil;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils; 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.commoncenter.export.service.ExportService; import com.pcloud.commoncenter.export.service.ExportService;
import com.pcloud.labelcenter.label.service.LabelService;
import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.resourcecenter.product.dto.SpecificationDto;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto; import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
...@@ -129,6 +150,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -129,6 +150,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
...@@ -141,8 +163,10 @@ import java.util.Objects; ...@@ -141,8 +163,10 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -240,7 +264,22 @@ public class BookBizImpl implements BookBiz { ...@@ -240,7 +264,22 @@ public class BookBizImpl implements BookBiz {
@Autowired @Autowired
private ErpConsr erpConsr; private ErpConsr erpConsr;
@Autowired
private LabelService labelService;
@Autowired
private ProductConsr productConsr;
@Autowired
private AppConsr appConsr;
@Autowired
private BookGroupServeDao bookGroupServeDao;
@Autowired
private AppPriceCacheService appPriceCacheService;
@Autowired
private MerchantConsr merchantConsr;
@Autowired
private BookBiz bookBiz;
@Autowired
private LabelConsr labelConsr;
/** /**
...@@ -2464,6 +2503,43 @@ public class BookBizImpl implements BookBiz { ...@@ -2464,6 +2503,43 @@ public class BookBizImpl implements BookBiz {
bookDao.relateUniqueNumber4Erp(bookUniqueNumberVos); bookDao.relateUniqueNumber4Erp(bookUniqueNumberVos);
} }
/**
* 获取书籍基础信息
*/
@Override
public BookDto getBaseById4Erp(Long bookId, Long channelId, Long adviserId) throws BizException {
if (bookId == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "bookId 不能为空");
}
BookDto bookDto = null;
if(channelId != null && adviserId != null){
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("bookId", bookId);
paramMap.put("adviserId", adviserId);
paramMap.put("channelId", channelId);
bookDto = bookDao.getById(paramMap);
bookDto.setAdviserId(adviserId);
bookDto.setChannelId(channelId);
bookDto.setChannelName(channelConsr.getNameById(channelId));
bookDto.setAdviserName(adviserConsr.getNameById(adviserId));
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
Map<Long, String> agentNameMap = agentConsr.getNames(Collections.singletonList(agentId));
if (!MapUtils.isEmpty(agentNameMap) && agentNameMap.containsKey(agentId)) {
bookDto.setAgentName(agentNameMap.get(agentId));
}
} else {
// 从redis获取书籍信息
bookDto = bookCache.getBookToRedis(bookId);
if (null == bookDto) {
bookDto = bookDao.getBaseById(bookId);
// 将数据存入redis
bookCache.setBookToRedis(bookDto);
}
}
return bookDto == null ? new BookDto() : bookDto;
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void relateBookAdviser4Erp(RelateAdviserVO relateAdviserVO){ public void relateBookAdviser4Erp(RelateAdviserVO relateAdviserVO){
...@@ -2793,4 +2869,386 @@ public class BookBizImpl implements BookBiz { ...@@ -2793,4 +2869,386 @@ public class BookBizImpl implements BookBiz {
erpConsr.batchUpdateRelateInfo(resultList); erpConsr.batchUpdateRelateInfo(resultList);
return resultList; return resultList;
} }
@Override
public List<BookGroupDTO> getQrcode4Erp(Long bookId, Long channelId, Long adviserId) {
if(bookId == null || channelId == null || adviserId == null){
return null;
}
// 获取所有的现代纸书二维码
List<QrcodeSceneDto> qrcodeSceneDtos = qrcodeSceneConsr.getQrCodeList(bookId, adviserId, channelId);
if(CollectionUtils.isEmpty(qrcodeSceneDtos)){
qrcodeSceneDtos = Lists.newArrayList();
}
// 获取所有的社群码
List<BookGroupDTO> bookGroupList = bookGroupDao.getDTOByBookIdsAdviserIdsChannelIds(Lists.newArrayList(bookId), Lists.newArrayList(adviserId), Lists.newArrayList(channelId));
if(CollectionUtils.isEmpty(bookGroupList)){
bookGroupList = Lists.newArrayList();
}
// 填充二维码位置
this.fillLocationName(bookGroupList);
// 整合结果
this.mergeQrcodeData(qrcodeSceneDtos, bookGroupList);
// 填充书刊标签
this.setBookGroupLabel(bookGroupList);
return bookGroupList;
}
private void mergeQrcodeData(List<QrcodeSceneDto> qrcodeSceneDtos, List<BookGroupDTO> bookGroupList) {
BookGroupDTO tempBookGroupDTO;
for (QrcodeSceneDto qrcodeSceneDto : qrcodeSceneDtos) {
tempBookGroupDTO = new BookGroupDTO();
tempBookGroupDTO.setSceneId(qrcodeSceneDto.getSceneId());
tempBookGroupDTO.setGroupQrcodeName(qrcodeSceneDto.getSceneName());
tempBookGroupDTO.setGroupQrcodeUrl(qrcodeSceneDto.getQrcodeUrl());
tempBookGroupDTO.setLocationName(joinLocationName(qrcodeSceneDto.getQrcodeLocations()));
if(qrcodeSceneDto.getQrcodeLabelDto() != null) {
tempBookGroupDTO.setProLabelId(qrcodeSceneDto.getQrcodeLabelDto().getProLabelId());
tempBookGroupDTO.setDepLabelId(qrcodeSceneDto.getQrcodeLabelDto().getDepLabelId());
tempBookGroupDTO.setPurLabelId(qrcodeSceneDto.getQrcodeLabelDto().getPurLabelId());
}
tempBookGroupDTO.setCreateTime(qrcodeSceneDto.getCreatedDate());
tempBookGroupDTO.setChannelId(qrcodeSceneDto.getChannelPartyId());
tempBookGroupDTO.setQrcodeType(qrcodeSceneDto.getQrcodeType());
bookGroupList.add(tempBookGroupDTO);
}
}
private void fillLocationName(List<BookGroupDTO> bookGroupList) {
List<Long> locationIds = Lists.newArrayList();
for (BookGroupDTO bookGroupDTO : bookGroupList) {
if(!NumberUtil.isNumber(bookGroupDTO.getGroupQrcodeLocationId())){
continue;
}
locationIds.add(bookGroupDTO.getGroupQrcodeLocationId().longValue());
}
Map<Long, String> locationNameMap = channelConsr.listLocationNames(locationIds);
if(MapUtils.isEmpty(locationNameMap)){
return;
}
for (BookGroupDTO bookGroupDTO : bookGroupList) {
if(!NumberUtil.isNumber(bookGroupDTO.getGroupQrcodeLocationId())){
continue;
}
bookGroupDTO.setLocationName(locationNameMap.get(bookGroupDTO.getGroupQrcodeLocationId().longValue()));
}
}
private String joinLocationName(List<QrcodeLocationDto> locationDtos){
if(CollectionUtils.isEmpty(locationDtos)){
return "";
}
return String.join(";", locationDtos.stream().map(x->x.getLocationName()).collect(Collectors.toList()));
}
private void setBookGroupLabel(List<BookGroupDTO> bookGroupList) {
List<Long> labelIds = new ArrayList<>();
for (BookGroupDTO bookGroupDTO : bookGroupList) {
if (null != bookGroupDTO.getProLabelId()) {
labelIds.add(bookGroupDTO.getProLabelId());
}
if (null != bookGroupDTO.getDepLabelId()) {
labelIds.add(bookGroupDTO.getDepLabelId());
}
if (null != bookGroupDTO.getPurLabelId()) {
labelIds.add(bookGroupDTO.getPurLabelId());
}
}
labelIds = labelIds.stream().distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(labelIds)) {
return;
}
Map<Long, String> labelMap = ResponseHandleUtil.parseMap(labelService.getLabelName(labelIds), Long.class, String.class);
if (MapUtils.isEmpty(labelMap)) {
return;
}
for (BookGroupDTO bookGroupDTO : bookGroupList) {
if (null != bookGroupDTO.getProLabelId() && labelMap.containsKey(bookGroupDTO.getProLabelId())) {
bookGroupDTO.setProLabelName(labelMap.get(bookGroupDTO.getProLabelId()));
}
if (null != bookGroupDTO.getDepLabelId() && labelMap.containsKey(bookGroupDTO.getDepLabelId())) {
bookGroupDTO.setDepLabelName(labelMap.get(bookGroupDTO.getDepLabelId()));
}
if (null != bookGroupDTO.getPurLabelId() && labelMap.containsKey(bookGroupDTO.getPurLabelId())) {
bookGroupDTO.setPurLabelName(labelMap.get(bookGroupDTO.getPurLabelId()));
}
}
}
@Override
public PageBeanNew<QrcodeServeDto> getQrcodeDetail4Erp(Long sceneId, Long bookGroupId, Long channelId, Integer currentPage, Integer numPerPage) {
if(sceneId == null && bookGroupId == null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(), "sceneId 或者 bookGroupId 不能为空");
}
if(sceneId != null && bookGroupId != null){
throw new BizException(BizException.PARAM_IS_NULL.getCode(), "sceneId 和 bookGroupId 不能同时存在");
}
List<QrcodeServeDto> qrcodeServeDtoList = Lists.newArrayList();
if(bookGroupId != null && bookGroupId > 0){
List<BookGroupServe> bookGroupServes = bookGroupServeDao.getListByBookGroupId(bookGroupId);
if(!CollectionUtils.isEmpty(bookGroupServes)){
for (BookGroupServe bookGroupServe : bookGroupServes) {
QrcodeServeDto qrcodeServeDto = new QrcodeServeDto();
BeanUtils.copyProperties(bookGroupServe, qrcodeServeDto);
qrcodeServeDtoList.add(qrcodeServeDto);
}
}
}
if(sceneId != null && sceneId > 0){
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(sceneId);
List<MessageDto> messages = qrcodeSceneDto.getMessages();
if(!CollectionUtils.isEmpty(messages)){
QrcodeServeDto qrcodeServeDto;
for (MessageDto message : messages) {
qrcodeServeDto = new QrcodeServeDto();
qrcodeServeDto.setServeId(message.getFromId());
qrcodeServeDto.setServeType(message.getTypeCode());
qrcodeServeDto.setServeUrl(message.getUrl());
qrcodeServeDto.setTypeCode(message.getFromType());
qrcodeServeDto.setSceneId(sceneId);
qrcodeServeDtoList.add(qrcodeServeDto);
}
}
}
int totalCount = qrcodeServeDtoList.size();
qrcodeServeDtoList = qrcodeServeDtoList.stream().skip(currentPage * numPerPage).limit(numPerPage).collect(Collectors.toList());
// 填充价格(销售价、协议价)
this.fillPrice(qrcodeServeDtoList, channelId);
// 填充标签
this.fillLabels(qrcodeServeDtoList);
// 填充编辑、作者
this.fillCreateName(qrcodeServeDtoList);
return new PageBeanNew<>(currentPage, numPerPage, totalCount, qrcodeServeDtoList);
}
private void fillLabels(List<QrcodeServeDto> dtoList) {
if(CollectionUtils.isEmpty(dtoList)){
return;
}
dtoList = dtoList.stream().filter(x-> "APP".equalsIgnoreCase(x.getServeType())).collect(Collectors.toList());
if(CollectionUtils.isEmpty(dtoList)){
return;
}
List<Long> labelId = Lists.newArrayList();
for (QrcodeServeDto vo : dtoList) {
labelId.add(vo.getProLabelId());
labelId.add(vo.getPurLabelId());
labelId.add(vo.getDepLabelId());
}
Map<Long, String> labelName = labelConsr.getLabelName(labelId);
if(MapUtils.isEmpty(labelName)){
return;
}
for (QrcodeServeDto vo : dtoList) {
vo.setPurLabelName(labelName.get(vo.getPurLabelId()));
vo.setProLabelName(labelName.get(vo.getProLabelId()));
vo.setDepLabelName(labelName.get(vo.getDepLabelId()));
}
}
private void fillCreateName(List<QrcodeServeDto> list) {
if (ListUtils.isEmpty(list)) {
return;
}
List<Long> adviserIds = list.stream().filter(s -> "APP".equalsIgnoreCase(s.getServeType())).map(x -> x.getServeCreateUser()).collect(Collectors.toList());
List<Long> merchantIds = list.stream().filter(s -> "PRODUCT".equalsIgnoreCase(s.getServeType())).map(x -> x.getServeCreateUser()).collect(Collectors.toList());
Map<Long, String> merchantNameMap = merchantConsr.getNamesByIdList(merchantIds);
Map<Long, String> adviserNameMap = adviserConsr.getNames(adviserIds);
if(MapUtils.isEmpty(merchantNameMap)){
merchantNameMap = new HashMap<>();
}
if(MapUtils.isEmpty(adviserNameMap)){
adviserNameMap = new HashMap<>();
}
for (QrcodeServeDto serveDto : list) {
if("PRODUCT".equals(serveDto.getServeType())){
serveDto.setServeCreateUserName(merchantNameMap.get(serveDto.getServeCreateUser()));
} else if ("APP".equals(serveDto.getServeType())){
serveDto.setServeCreateUserName(adviserNameMap.get(serveDto.getServeCreateUser()));
}
}
}
private void fillPrice(List<QrcodeServeDto> list, Long channelId) {
if (ListUtils.isEmpty(list)) {
return;
}
AccountSettingDto accountSettingDto = qrcodeSceneConsr.getWechatInfo(channelId);
List<Long> appIds = list.stream().filter(s -> "APP".equalsIgnoreCase(s.getServeType())).map(x -> x.getServeId()).collect(Collectors.toList());
List<Long> productIds = list.stream().filter(s -> "PRODUCT".equalsIgnoreCase(s.getServeType())).map(x -> x.getServeId()).collect(Collectors.toList());
Map<Long, ProductDto> productDtoMap = new HashMap<>();
Map<Long, AppDto> appDtoMap = new HashMap<>();
// 销售价协议价
Map<Long, BigDecimal> appPriceMap = new HashMap<>();
if (!ListUtils.isEmpty(productIds)) {
productDtoMap = productConsr.getProBasesByIds(productIds);
}
if (!ListUtils.isEmpty(appIds)) {
appDtoMap = appConsr.mapByIds(appIds);
List<AppPriceCacheDTO> appPriceCacheDTOS = new ArrayList<>();
for (Long appId : appIds) {
if (null != appDtoMap.get(appId)) {
AppPriceCacheDTO appPriceCacheDTO = new AppPriceCacheDTO();
appPriceCacheDTO.setAppId(appId);
appPriceCacheDTO.setAppTypeEnum(AppTypeEnum.APP_TYPE_MAP.get(appDtoMap.get(appId).getTypeCode()));
appPriceCacheDTOS.add(appPriceCacheDTO);
}
}
appPriceMap = ResponseHandleUtil.parseMapResponse(appPriceCacheService.getCaches(appPriceCacheDTOS), Long.class, BigDecimal.class);
}
for (QrcodeServeDto serveDto : list) {
Long serveId = serveDto.getServeId();
if ("PRODUCT".equals(serveDto.getServeType())) {
if (!MapUtils.isEmpty(productDtoMap) && productDtoMap.containsKey(serveId)) {
ProductDto productDto = productDtoMap.get(serveId);
if (productDto != null) {
serveDto.setServeName(productDto.getProductName());
if (productDto.getProductTypeDto() != null) {
serveDto.setFromType(productDto.getProductTypeDto().getTypeCode());
serveDto.setDescription(productDto.getProductTypeDto().getTypeName());
serveDto.setPicUrl(productDto.getCoverImg());
serveDto.setUniqueNumber(productDto.getUniqueNumber());
if(!CollectionUtils.isEmpty(productDto.getProductLabels())){
serveDto.setProLabelName(productDto.getProductLabels().get(0).getProLabelName());
serveDto.setDepLabelName(productDto.getProductLabels().get(0).getDepLabelName());
serveDto.setPurLabelName(productDto.getProductLabels().get(0).getPurLabelName());
}
serveDto.setShortUrl(SendWeixinRequestTools.splitUrl(accountSettingDto, serveDto.getServeUrl()));
serveDto.setServeCreateUser(productDto.getAuthor());
serveDto.setTransverseImg(productDto.getPicture1());
}
List<SpecificationDto> specificationDtos = productDto.getSpecification();
if (!ListUtils.isEmpty(specificationDtos)) {
SpecificationDto specificationDto = specificationDtos.get(0);
if (null != specificationDto) {
serveDto.setRetailPrice(specificationDto.getAdvisePrice());
serveDto.setDealPrice(specificationDto.getDealPrice());
}
}
}
}
} else if ("APP".equals(serveDto.getServeType())) {
if (!MapUtils.isEmpty(appDtoMap) && appDtoMap.containsKey(serveId)) {
AppDto appDto = appDtoMap.get(serveId);
if (appDto != null) {
serveDto.setServeName(appDto.getTitle());
serveDto.setFromType(appDto.getTypeCode());
serveDto.setDescription(appDto.getTypeName());
serveDto.setPicUrl(appDto.getSquareImg());
serveDto.setUniqueNumber(appDto.getUniqueNumber());
serveDto.setProLabelId(appDto.getProLabelId());
serveDto.setDepLabelId(appDto.getDepLabelId());
serveDto.setPurLabelId(appDto.getPurLabelId());
serveDto.setShortUrl(SendWeixinRequestTools.splitUrl(accountSettingDto, serveDto.getServeUrl()));
serveDto.setServeCreateUser(appDto.getCreatedUser());
serveDto.setTransverseImg(appDto.getTransverseImg());
}
}
if (!MapUtils.isEmpty(appPriceMap)) {
if (appPriceMap.get(serveId) != null) {
serveDto.setRetailPrice(appPriceMap.get(serveId).doubleValue());
serveDto.setDealPrice(0D);
}
}
}
}
}
@Override
public BookGroupDTO checkQrcodeDetail4Erp(String url) {
List<CompletableFuture> futureList = Lists.newArrayList();
// 社群书二维码
getGroupQrcodeInfo(url, futureList);
// 现代纸书二维码
getBookQrcodeInfo(url, futureList);
// 等待执行完成
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[futureList.size()])).join();
BookGroupDTO bookGroupInfo = null;
for (CompletableFuture completableFuture : futureList) {
try {
bookGroupInfo = (BookGroupDTO) completableFuture.get(5, TimeUnit.SECONDS);
} catch (Exception e){
LOGGER.info("质检查询二维码信息失败;");
}
if(bookGroupInfo != null){
return bookGroupInfo;
}
}
return bookGroupInfo;
}
/**
* 查询社群书二维码信息
*/
private void getGroupQrcodeInfo(String url, List<CompletableFuture> futureList) {
// https://qrcode.raysgo.com/2233
String strBookGroupId = url.substring(url.indexOf("/", url.indexOf("https://") + 8) + 1);
if(NumberUtil.isNumber(strBookGroupId)){
futureList.add(CompletableFuture.supplyAsync(()->{
BookGroupDTO bookGroupInfo = null;
try {
bookGroupInfo = bookGroupBiz.getBookGroupInfo(Long.valueOf(strBookGroupId));
} catch (Exception ex) {
}
if (bookGroupInfo != null) {
// 填充二维码位置
this.fillLocationName(Lists.newArrayList(bookGroupInfo));
BookDto bookInfo = bookGroupInfo.getBookInfo();
if (bookInfo != null) {
bookInfo.setAdviserName(adviserConsr.getNameById(bookInfo.getCreatedUser()));
Long agentId = adviserConsr.getAgentIdByAdviser(bookInfo.getCreatedUser());
Map<Long, String> agentNameMap = agentConsr.getNames(Collections.singletonList(agentId));
if (!MapUtils.isEmpty(agentNameMap) && agentNameMap.containsKey(agentId)) {
bookInfo.setAgentName(agentNameMap.get(agentId));
}
}
}
return bookGroupInfo;
}, ThreadPoolUtils.FILL_APPLET_RECORD));
}
}
/**
* 查询现代纸书二维码信息
*/
private void getBookQrcodeInfo(String url, List<CompletableFuture> futureList) {
// http://weixin.qq.com/q/02mGra51v48q_10000M07-
futureList.add(CompletableFuture.supplyAsync(() -> {
BookGroupDTO bookGroupInfo = null;
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getByUrl(url);
if (qrcodeSceneDto != null && qrcodeSceneDto.getSceneId() > 0) {
bookGroupInfo = new BookGroupDTO();
bookGroupInfo.setGroupQrcodeUrl(qrcodeSceneDto.getQrcodeUrl());
bookGroupInfo.setGroupQrcodeName(qrcodeSceneDto.getSceneName());
bookGroupInfo.setLocationName(qrcodeSceneDto.getQrcodeLocations().get(0).getLocationName());
bookGroupInfo.setProLabelId(qrcodeSceneDto.getQrcodeLabelDto().getProLabelId());
bookGroupInfo.setDepLabelId(qrcodeSceneDto.getQrcodeLabelDto().getDepLabelId());
bookGroupInfo.setPurLabelId(qrcodeSceneDto.getQrcodeLabelDto().getPurLabelId());
bookGroupInfo.setCreateTime(qrcodeSceneDto.getCreatedDate());
bookGroupInfo.setBookId(qrcodeSceneDto.getAdviserBookId());
bookGroupInfo.setAdviserId(qrcodeSceneDto.getCreatedByUserLogin());
BookDto bookInfo = bookBiz.getBaseById(bookGroupInfo.getBookId());
if (null != bookInfo) {
bookInfo.setBookName(null != bookInfo.getBookName() ? StringUtil.addBracket(bookInfo.getBookName()) : null);
bookInfo.setAdviserName(adviserConsr.getNameById(bookInfo.getCreatedUser()));
Long agentId = adviserConsr.getAgentIdByAdviser(bookInfo.getCreatedUser());
Map<Long, String> agentNameMap = agentConsr.getNames(Collections.singletonList(agentId));
if (!MapUtils.isEmpty(agentNameMap) && agentNameMap.containsKey(agentId)) {
bookInfo.setAgentName(agentNameMap.get(agentId));
}
bookGroupInfo.setBookInfo(bookInfo);
}
// 填充标签
this.setBookGroupLabel(Lists.newArrayList(bookGroupInfo));
}
return bookGroupInfo;
}, ThreadPoolUtils.FILL_APPLET_RECORD));
}
} }
...@@ -1141,4 +1141,40 @@ public class BookFacadeImpl implements BookFacade { ...@@ -1141,4 +1141,40 @@ public class BookFacadeImpl implements BookFacade {
bookBiz.addCreateInfoToMq(createBookVOList); bookBiz.addCreateInfoToMq(createBookVOList);
return new ResponseDto<>(); return new ResponseDto<>();
} }
/**
* 获取单个书籍基础信息
*/
@ApiOperation("获取单个书籍基础信息(ERP)")
@RequestMapping(value = "getBaseById4Erp", method = RequestMethod.GET)
public ResponseDto<BookDto> getBaseById4Erp( @RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "channelId") Long channelId,
@RequestParam(value = "adviserId") Long adviserId )
throws BizException {
return new ResponseDto<>(bookBiz.getBaseById4Erp(bookId, channelId, adviserId));
}
@ApiOperation("获取书籍下所有二维码信息(ERP)")
@GetMapping("getQrcode4Erp")
public ResponseDto<?> getQrcode4Erp(@RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "channelId") Long channelId,
@RequestParam(value = "adviserId") Long adviserId ) {
return new ResponseDto<>(bookBiz.getQrcode4Erp(bookId, channelId, adviserId));
}
@ApiOperation("获取二维码下的应用作品(ERP)")
@GetMapping("getQrcodeDetail4Erp")
public ResponseDto<?> getQrcodeDetail4Erp(@RequestParam(value = "sceneId", required = false) Long sceneId,
@RequestParam(value = "bookGroupId", required = false) Long bookGroupId,
@RequestParam(value = "channelId") Long channelId,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage) {
return new ResponseDto<>(bookBiz.getQrcodeDetail4Erp(sceneId, bookGroupId, channelId, currentPage, numPerPage));
}
@ApiOperation("扫码检查二维码内容(ERP)")
@GetMapping("checkQrcodeDetail4Erp")
public ResponseDto<?> checkQrcodeDetail4Erp(@RequestParam(value = "url") String url) {
return new ResponseDto<>(bookBiz.checkQrcodeDetail4Erp(url));
}
} }
...@@ -438,4 +438,15 @@ public class QrcodeSceneConsr { ...@@ -438,4 +438,15 @@ public class QrcodeSceneConsr {
public Long createQrcodeScene4Erp(QrcodeScene qrcodeScene) { public Long createQrcodeScene4Erp(QrcodeScene qrcodeScene) {
return ResponseHandleUtil.parseResponse(qrcodeSceneService.createQrcodeScene4Erp(qrcodeScene), Long.class); return ResponseHandleUtil.parseResponse(qrcodeSceneService.createQrcodeScene4Erp(qrcodeScene), Long.class);
} }
@ParamLog("根据url获取二维码信息")
public QrcodeSceneDto getByUrl(String url) {
if(url == null) return null;
try {
return ResponseHandleUtil.parseResponse(qrcodeSceneService.getByUrl(url), QrcodeSceneDto.class);
} catch (BizException e) {
LOGGER.error("【二维码-渠道(消)】 获取二维码基本信息失败,<ERROR>.[getById]:" + e.getMessage(), e);
}
return null;
}
} }
...@@ -7,6 +7,7 @@ import com.pcloud.channelcenter.base.exceptions.ChannelBizException; ...@@ -7,6 +7,7 @@ import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
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;
import com.pcloud.channelcenter.qrcode.service.QrcodeLocationAssocService;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService; import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
import com.pcloud.channelcenter.wechat.entity.AccountSetting; import com.pcloud.channelcenter.wechat.entity.AccountSetting;
import com.pcloud.channelcenter.wechat.service.AccountSettingService; import com.pcloud.channelcenter.wechat.service.AccountSettingService;
...@@ -20,7 +21,9 @@ import org.slf4j.Logger; ...@@ -20,7 +21,9 @@ 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 org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -45,6 +48,8 @@ public class ChannelConsr { ...@@ -45,6 +48,8 @@ public class ChannelConsr {
private QrcodeSceneService qrcodeSceneService; private QrcodeSceneService qrcodeSceneService;
@Autowired @Autowired
private AccountSettingService accountSettingService; private AccountSettingService accountSettingService;
@Autowired
private QrcodeLocationAssocService qrcodeLocationAssocService;
/** /**
* 获取渠道名称 * 获取渠道名称
...@@ -219,7 +224,7 @@ public class ChannelConsr { ...@@ -219,7 +224,7 @@ public class ChannelConsr {
} }
/** /**
* 批量获取现代纸书下所有的二维码 * 批量获取现代纸书下所有二维码的统计信息UV/PV
* @param adviserIds * @param adviserIds
* @param bookIds * @param bookIds
* @param channelIds * @param channelIds
...@@ -232,4 +237,16 @@ public class ChannelConsr { ...@@ -232,4 +237,16 @@ public class ChannelConsr {
mapResourceCountDTO.setChannelIds(channelIds); mapResourceCountDTO.setChannelIds(channelIds);
return ResponseHandleUtil.parseList(qrcodeSceneService.listQrcodeScene(mapResourceCountDTO), QrcodeSceneDto.class); return ResponseHandleUtil.parseList(qrcodeSceneService.listQrcodeScene(mapResourceCountDTO), QrcodeSceneDto.class);
} }
public Map<Long, String> listLocationNames(List<Long> locationIds) {
if(CollectionUtils.isEmpty(locationIds)){
return new HashMap<>();
}
try {
return ResponseHandleUtil.parseMap(qrcodeLocationAssocService.listLocationNames(locationIds), Long.class, String.class);
} catch (Exception e) {
LOGGER.error("获取二维码位置 " + e.getMessage(), e);
throw new ChannelBizException(ChannelBizException.PARAM_IS_NULL, "获取二维码位置失败");
}
}
} }
...@@ -287,6 +287,19 @@ public class BookGroupDTO extends BaseDto { ...@@ -287,6 +287,19 @@ public class BookGroupDTO extends BaseDto {
private Integer groupQrcodePageNum; private Integer groupQrcodePageNum;
private Integer groupQrcodeLocationId; private Integer groupQrcodeLocationId;
private String groupQrcodeRemark; private String groupQrcodeRemark;
private String locationName;
/**
* wechat:公众号码;ali:自有码
*/
private String qrcodeType;
public String getQrcodeType() {
return qrcodeType;
}
public void setQrcodeType(String qrcodeType) {
this.qrcodeType = qrcodeType;
}
public String getGroupQrcodeLink() { public String getGroupQrcodeLink() {
return groupQrcodeLink; return groupQrcodeLink;
...@@ -797,6 +810,14 @@ public class BookGroupDTO extends BaseDto { ...@@ -797,6 +810,14 @@ public class BookGroupDTO extends BaseDto {
this.groupQrcodeRemark = groupQrcodeRemark; this.groupQrcodeRemark = groupQrcodeRemark;
} }
public String getLocationName() {
return locationName;
}
public void setLocationName(String locationName) {
this.locationName = locationName;
}
@Override @Override
public String toString() { public String toString() {
return "BookGroupDTO{" + return "BookGroupDTO{" +
...@@ -856,4 +877,4 @@ public class BookGroupDTO extends BaseDto { ...@@ -856,4 +877,4 @@ public class BookGroupDTO extends BaseDto {
", adviserId=" + adviserId + ", adviserId=" + adviserId +
'}'; '}';
} }
} }
\ No newline at end of file
...@@ -305,7 +305,7 @@ ...@@ -305,7 +305,7 @@
IF(ISNULL(BF.BOOK_FUND_ID),0,1) IS_FUND_SUPPORT,START_TIME,END_TIME,BA.TEMPLET_ID,BA.SECOND_TEMPLET_ID, IF(ISNULL(BF.BOOK_FUND_ID),0,1) IS_FUND_SUPPORT,START_TIME,END_TIME,BA.TEMPLET_ID,BA.SECOND_TEMPLET_ID,
BA.GRA_LABEL_ID,BA.SUB_LABEL_ID,BA.VER_LABEL_ID,BA.AREA_LABEL_ID, BA.IS_PRINT isPrint, BA.GRA_LABEL_ID,BA.SUB_LABEL_ID,BA.VER_LABEL_ID,BA.AREA_LABEL_ID, BA.IS_PRINT isPrint,
BA.pro_label_id, BA.dep_label_id,BA.pur_label_id,BA.vol_label_id,if(G.ID IS NULL, 0, 1) isBookGroup, G.id BOOK_GROUP_ID,G.join_group_type, BA.pro_label_id, BA.dep_label_id,BA.pur_label_id,BA.vol_label_id,if(G.ID IS NULL, 0, 1) isBookGroup, G.id BOOK_GROUP_ID,G.join_group_type,
BA.is_open_robot_process,BA.vol_label_id,b.unique_number BA.is_open_robot_process,BA.vol_label_id,b.unique_number,BA.CREATED_DATE
FROM FROM
BOOK_ADVISER BA BOOK_ADVISER BA
INNER JOIN INNER JOIN
......
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