Commit 75346191 by 吴博

Merge branch 'feature/1009524' into 'master'

平台端新增“书刊列表”菜单

See merge request rays/pcloud-book!1724
parents b3b7eb48 3bf447c5
...@@ -8,7 +8,9 @@ import com.pcloud.book.book.dto.*; ...@@ -8,7 +8,9 @@ import com.pcloud.book.book.dto.*;
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.*; import com.pcloud.book.book.vo.*;
import com.pcloud.book.book.vo.request.BookParam4PcloudVO;
import com.pcloud.book.book.vo.request.RelateRaysBookApprovalVO; import com.pcloud.book.book.vo.request.RelateRaysBookApprovalVO;
import com.pcloud.book.book.vo.response.BookApprovalPcloudVO;
import com.pcloud.book.group.dto.BookAppletSceneDTO; import com.pcloud.book.group.dto.BookAppletSceneDTO;
import com.pcloud.book.group.dto.BookServeDTO; import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.channelcenter.qrcode.vo.BookQrcodeVO; import com.pcloud.channelcenter.qrcode.vo.BookQrcodeVO;
...@@ -527,4 +529,11 @@ public interface BookAdviserBiz { ...@@ -527,4 +529,11 @@ public interface BookAdviserBiz {
void updateOpenGiftBag(Long bookId, Long adviserId, Long channelId, Integer isOpenGiftBag); void updateOpenGiftBag(Long bookId, Long adviserId, Long channelId, Integer isOpenGiftBag);
Integer getOpenGiftBag(Long sceneId, Long bookId, Long adviserId, Long channelId); Integer getOpenGiftBag(Long sceneId, Long bookId, Long adviserId, Long channelId);
/**
* @Description 平台端书刊列表-立项书筛选
* @Author zhuyajie
* @Date 9:53 2023/1/30
**/
PageBeanNew<BookApprovalPcloudVO> listApprovalBook4Pcloud(BookParam4PcloudVO bookParam4PcloudVO);
} }
...@@ -15,6 +15,7 @@ import com.google.common.collect.Maps; ...@@ -15,6 +15,7 @@ import com.google.common.collect.Maps;
import com.pcloud.analysisengine.browse.dto.BookBrowseAndScanStatsDTO; import com.pcloud.analysisengine.browse.dto.BookBrowseAndScanStatsDTO;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto; import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
import com.pcloud.appcenter.app.dto.AppDto; import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
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.*; import com.pcloud.book.book.biz.*;
...@@ -26,10 +27,13 @@ import com.pcloud.book.book.entity.BookAdviser; ...@@ -26,10 +27,13 @@ import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.enums.BookQrcodeType; import com.pcloud.book.book.enums.BookQrcodeType;
import com.pcloud.book.book.set.BookSet; import com.pcloud.book.book.set.BookSet;
import com.pcloud.book.book.vo.*; import com.pcloud.book.book.vo.*;
import com.pcloud.book.book.vo.request.BookParam4PcloudVO;
import com.pcloud.book.book.vo.request.RelateRaysBookApprovalVO; import com.pcloud.book.book.vo.request.RelateRaysBookApprovalVO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto; import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.book.vo.response.BookApprovalPcloudVO;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr; import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.app.AppConsr; import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.app.AssistTempletConsr;
import com.pcloud.book.consumer.book.elasticsearch.BookElasticSearchConsr; import com.pcloud.book.consumer.book.elasticsearch.BookElasticSearchConsr;
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;
...@@ -240,6 +244,8 @@ public class BookAdviserBizImpl implements BookAdviserBiz { ...@@ -240,6 +244,8 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
private OperationConsr operationConsr; private OperationConsr operationConsr;
@Autowired @Autowired
private BookElasticSearchConsr bookElasticSearchConsr; private BookElasticSearchConsr bookElasticSearchConsr;
@Autowired
private AssistTempletConsr assistTempletConsr;
@Override @Override
public List<BookDto> listByAdviserId(Long adviserId) { public List<BookDto> listByAdviserId(Long adviserId) {
...@@ -3846,4 +3852,105 @@ public class BookAdviserBizImpl implements BookAdviserBiz { ...@@ -3846,4 +3852,105 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
} }
return result; return result;
} }
@Override
public PageBeanNew<BookApprovalPcloudVO> listApprovalBook4Pcloud(BookParam4PcloudVO bookParam4PcloudVO) {
Integer currentPage=bookParam4PcloudVO.getCurrentPage();
Integer numPerPage=bookParam4PcloudVO.getNumPerPage();
if (null==bookParam4PcloudVO.getCurrentPage()||null==bookParam4PcloudVO.getNumPerPage()) {
return new PageBeanNew<>(currentPage,numPerPage,0,new ArrayList<>());
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("keyword", bookParam4PcloudVO.getKeyword());
paramMap.put("isApproval",bookParam4PcloudVO.getIsApproval());
List<Long> paramAdviserIds = new ArrayList<>();
if (CollUtil.isNotEmpty(bookParam4PcloudVO.getAdviserIds())) {
paramAdviserIds = bookParam4PcloudVO.getAdviserIds();
} else if (null!=bookParam4PcloudVO.getAgentId()) {
paramAdviserIds = adviserConsr.getByAgentId(bookParam4PcloudVO.getAgentId());
}
paramMap.put("adviserIds",paramAdviserIds);
paramMap.put("startTime",bookParam4PcloudVO.getStartTime());
paramMap.put("endTime",bookParam4PcloudVO.getEndTime());
paramMap.put("templetId",bookParam4PcloudVO.getTempletId());
paramMap.put("secondTempletId",bookParam4PcloudVO.getSecondTempletId());
paramMap.put("thirdTempletId",bookParam4PcloudVO.getThirdTempletId());
PageBeanNew<BookApprovalPcloudVO> pageBeanNew = bookAdviserDao.listPageNew(new PageParam(currentPage, numPerPage), paramMap, "listApprovalBook4Pcloud");
List<BookApprovalPcloudVO> bookVOS = pageBeanNew.getRecordList();
if(CollectionUtils.isEmpty(bookVOS)) {
return new PageBeanNew<>(currentPage,numPerPage,pageBeanNew.getTotalCount(),new ArrayList<>());
}
// 年级科目版本地域上下册标签
CompletableFuture<Map<Long, String>> newLabelIdFuture = CompletableFuture.supplyAsync(() -> bookLabelBiz.getLabelMapByIds(Stream.of(
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getGraLabelId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getSubLabelId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getVerLabelId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getAreaLabelId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getVolLabelId)
).flatMap(Function.identity()).filter(Objects::nonNull).distinct().collect(Collectors.toList())), ThreadPoolUtils.SMALL_THREAD_POOL);
// 专业深度目的标签
CompletableFuture<Map<Long, String>> oldLabelIdFuture = CompletableFuture.supplyAsync(() -> labelConsr.getLabelName(Stream.of(
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getProLabelId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getPurLabelId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getDepLabelId)
).flatMap(Function.identity()).filter(Objects::nonNull).distinct().collect(Collectors.toList())), ThreadPoolUtils.SMALL_THREAD_POOL);
//编辑信息
CompletableFuture<Map<Long, AdviserBaseInfoDto>> adviserFuture = CompletableFuture.supplyAsync(()->adviserConsr.getAdviserId2AdviserInfoDtoMap(bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getAdviserId).distinct().collect(Collectors.toList())), ThreadPoolUtils.SMALL_THREAD_POOL);
//编辑登录信息
CompletableFuture<Map<Long, UserLogin>> userLoginFuture = CompletableFuture.supplyAsync(()->adviserConsr.getUserLoginInfoList(bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getAdviserId).distinct().collect(Collectors.toList())), ThreadPoolUtils.SMALL_THREAD_POOL);
//运营信息
CompletableFuture<Map<Long, String>> channelFuture = CompletableFuture.supplyAsync(()->channelConsr.getNamesByIdList( bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getChannelId).distinct().collect(Collectors.toList())), ThreadPoolUtils.SMALL_THREAD_POOL);
//书刊分类
CompletableFuture<Map<Long, AssistTempletDTO>> assistTempletFuture = CompletableFuture.supplyAsync(()->assistTempletConsr.mapByIds(Stream.of(
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getTempletId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getSecondTempletId),
bookVOS.stream().filter(Objects::nonNull).map(BookApprovalPcloudVO::getThirdTempletId)
).flatMap(Function.identity()).filter(Objects::nonNull).distinct().collect(Collectors.toList())), ThreadPoolUtils.SMALL_THREAD_POOL);
CompletableFuture<Void> allCompletableFuture = CompletableFuture.allOf(newLabelIdFuture,oldLabelIdFuture,adviserFuture,channelFuture,userLoginFuture,assistTempletFuture);
try{
allCompletableFuture.get();
Map<Long, String> newLabelMap = Optional.ofNullable(newLabelIdFuture.get()).orElse(new HashMap<>());
Map<Long, String> oldLabelMap = Optional.ofNullable(oldLabelIdFuture.get()).orElse(new HashMap<>());
Map<Long, AdviserBaseInfoDto> adviserAgentMap = Optional.ofNullable(adviserFuture.get()).orElse(new HashMap<>());
Map<Long, String> channelMap = Optional.ofNullable(channelFuture.get()).orElse(new HashMap<>());
Map<Long, UserLogin> userLoginInfoMap = Optional.ofNullable(userLoginFuture.get()).orElse(new HashMap<>());
Map<Long, AssistTempletDTO> assistTempletDTOMap = Optional.ofNullable(assistTempletFuture.get()).orElse(new HashMap<>());
bookVOS.forEach(book->{
book.setProLabelName(Optional.ofNullable(oldLabelMap.get(book.getProLabelId())).orElse(""));
book.setPurLabelName(Optional.ofNullable(oldLabelMap.get(book.getPurLabelId())).orElse(""));
book.setDepLabelName(Optional.ofNullable(oldLabelMap.get(book.getDepLabelId())).orElse(""));
book.setGraLabelName(Optional.ofNullable(newLabelMap.get(book.getGraLabelId())).orElse(""));
book.setSubLabelName(Optional.ofNullable(newLabelMap.get(book.getSubLabelId())).orElse(""));
book.setVerLabelName(Optional.ofNullable(newLabelMap.get(book.getVerLabelId())).orElse(""));
book.setAreaLabelName(Optional.ofNullable(newLabelMap.get(book.getAreaLabelId())).orElse(""));
book.setVolLabelName(Optional.ofNullable(newLabelMap.get(book.getVolLabelId())).orElse(""));
Long adviserId = book.getAdviserId();
if(null!=adviserId && MapUtils.isNotEmpty(adviserAgentMap) && adviserAgentMap.containsKey(adviserId)) {
AdviserBaseInfoDto adviserBaseInfoDto = adviserAgentMap.get(adviserId);
book.setAgentName(null != adviserBaseInfoDto ? adviserBaseInfoDto.getAgentName() : "");
book.setAdviserName(null != adviserBaseInfoDto ? adviserBaseInfoDto.getPartyName() : "");
book.setAgentId(null != adviserBaseInfoDto ? adviserBaseInfoDto.getAgentId() : null);
book.setAdviserPhone(null!=adviserBaseInfoDto?adviserBaseInfoDto.getPhoneNum():"");
}
if (null!=adviserId&&MapUtils.isNotEmpty(userLoginInfoMap) && userLoginInfoMap.containsKey(adviserId)) {
UserLogin userLogin = userLoginInfoMap.get(adviserId);
book.setAdviserPwd(userLogin!=null ? userLogin.getCurrentPassword() :null);
}
book.setChannelName(Optional.ofNullable(channelMap.get(book.getChannelId())).orElse(""));
if (MapUtils.isNotEmpty(assistTempletDTOMap)) {
book.setTempletName(Optional.ofNullable(assistTempletDTOMap.get(book.getTempletId())).map(AssistTempletDTO::getTempletName).orElse(null));
book.setSecondTempletName(Optional.ofNullable(assistTempletDTOMap.get(book.getSecondTempletId())).map(AssistTempletDTO::getTempletName).orElse(null));
book.setThirdTempletName(Optional.ofNullable(assistTempletDTOMap.get(book.getThirdTempletId())).map(AssistTempletDTO::getTempletName).orElse(null));
}
});
}catch (InterruptedException | ExecutionException e) {
LOGGER.warn("listApprovalBook4Pcloud 异步任务处理失败");
}
return pageBeanNew;
}
} }
...@@ -25,6 +25,8 @@ import com.pcloud.book.book.vo.BookLabelAndClassifyVO; ...@@ -25,6 +25,8 @@ import com.pcloud.book.book.vo.BookLabelAndClassifyVO;
import com.pcloud.book.book.vo.BookServeInfo; import com.pcloud.book.book.vo.BookServeInfo;
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.book.book.vo.request.BookParam4PcloudVO;
import com.pcloud.book.book.vo.response.BookApprovalPcloudVO;
import com.pcloud.channelcenter.qrcode.vo.BookQrcodeVO; import com.pcloud.channelcenter.qrcode.vo.BookQrcodeVO;
import com.pcloud.book.book.vo.request.RelateRaysBookApprovalVO; import com.pcloud.book.book.vo.request.RelateRaysBookApprovalVO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto; import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
...@@ -631,4 +633,12 @@ public class BookAdviserFacadeImpl implements BookAdviserFacade { ...@@ -631,4 +633,12 @@ public class BookAdviserFacadeImpl implements BookAdviserFacade {
@RequestParam(value = "channelId", required = false) Long channelId) throws PermissionException { @RequestParam(value = "channelId", required = false) Long channelId) throws PermissionException {
return new ResponseDto<>(bookAdviserBiz.getOpenGiftBag(sceneId,bookId, adviserId, channelId)); return new ResponseDto<>(bookAdviserBiz.getOpenGiftBag(sceneId,bookId, adviserId, channelId));
} }
@ApiOperation("平台端查立项书书刊列表")
@PostMapping("listApprovalBook4Pcloud")
public ResponseDto<PageBeanNew<BookApprovalPcloudVO>> listApprovalBook4Pcloud(
@RequestHeader("token") String token, @RequestBody BookParam4PcloudVO bookParam4PcloudVO)
throws PermissionException, BizException {
return new ResponseDto<>(bookAdviserBiz.listApprovalBook4Pcloud(bookParam4PcloudVO));
}
} }
package com.pcloud.book.book.vo.request;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @ClassName com.pcloud.book.book.vo.request.BookParam4PcloudVO
* @Author zhuyajie
* @Description
* @Date 2023/1/29 18:10
**/
@Data
public class BookParam4PcloudVO {
private Integer currentPage;
private Integer numPerPage;
private String startTime;
private String endTime;
/**
* 第一级分类
*/
private Long templetId;
/**
* 第二级分类
*/
private Long secondTempletId;
/**
* 第三级分类
*/
private Long thirdTempletId;
private Long agentId;
private List<Long> adviserIds;
private String keyword;
@ApiModelProperty("是否立项;0:未立项;1:已立项;")
private Integer isApproval;
}
package com.pcloud.book.book.vo.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pcloud.common.dto.BaseDto;
import java.util.Date;
import lombok.Data;
/**
* @ClassName com.pcloud.book.book.vo.response.BookApprovalPcloudVO
* @Author zhuyajie
* @Description
* @Date 2023/1/29 18:22
**/
@Data
public class BookApprovalPcloudVO extends BaseDto {
/**
* 出版社ID
*/
private Long agentId;
/**
* 出版社名称
*/
private String agentName;
/**
* 渠道ID
*/
private Long channelId;
/**
* 运营平台
*/
private String channelName;
/**
* 编辑ID
*/
private Long adviserId;
/**
* 编辑名称
*/
private String adviserName;
/**
* 编辑手机号
*/
private String adviserPhone;
/**
* 书籍ID
*/
private Long bookId;
/**
* 书籍名称
*/
private String bookName;
/**
* 条形码
*/
private String isbn;
private String coverImg;
/**
* 刊物序号
*/
private String serialNumber;
/**
* 是否立项
*/
private Integer isApproval;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createdDate;
/**
* 第一级分类
*/
private Long templetId;
/**
* 第二级分类
*/
private Long secondTempletId;
/**
* 第三级分类
*/
private Long thirdTempletId;
/**
* 年级标签id
*/
private Long graLabelId;
/**
* 科目标签id
*/
private Long subLabelId;
/**
* 版本标签id
*/
private Long verLabelId;
/**
* 地域标签id
*/
private Long areaLabelId;
/**
* 上下册标签id
*/
private Long volLabelId;
/**
* 专业
*/
private Long depLabelId;
/**
* 深度
*/
private Long proLabelId;
/**
* 目的
*/
private Long purLabelId;
private String graLabelName;
private String subLabelName;
private String verLabelName;
private String areaLabelName;
private String volLabelName;
private String depLabelName;
private String proLabelName;
private String purLabelName;
private String adviserPwd;
/**
* 第一类型名称
*/
private String templetName;
/**
* 第二类型名称
*/
private String secondTempletName;
/**
* 第三类型名称
*/
private String thirdTempletName;
}
...@@ -1479,4 +1479,64 @@ ...@@ -1479,4 +1479,64 @@
limit 1 limit 1
</select> </select>
<select id="listApprovalBook4Pcloud" parameterType="map" resultType="com.pcloud.book.book.vo.response.BookApprovalPcloudVO">
SELECT
ba.BOOK_ID bookId,
ba.ADVISER_ID adviserId,
ba.channel_id channelId,
b.BOOK_NAME bookName,
b.COVER_IMG coverImg,
b.ISBN isbn,
b.SERIAL_NUMBER serialNumber,
ba.is_approval isApproval,
ba.TEMPLET_ID AS templetId,
ba.SECOND_TEMPLET_ID AS secondTempletId,
ba.third_templet_id AS thirdTempletId,
ba.pro_label_id AS proLabelId,
ba.dep_label_id AS depLabelId,
ba.pur_label_id AS purLabelId,
ba.GRA_LABEL_ID AS graLabelId,
ba.SUB_LABEL_ID AS subLabelId,
ba.VER_LABEL_ID AS verLabelId,
ba.AREA_LABEL_ID AS areaLabelId,
ba.vol_label_id AS volLabelId,
ba.CREATED_DATE createdDate
FROM
book_adviser ba
LEFT JOIN book b ON ba.BOOK_ID = b.BOOK_ID
WHERE
ba.IS_DELETE = 0
AND b.IS_DELETE = 0
<if test="keyword != null">
AND (
b.ISBN =#{keyword}
or b.BOOK_NAME LIKE CONCAT('%', #{keyword}, '%')
or b.BOOK_ID LIKE CONCAT('%', #{keyword}, '%')
)
</if>
<if test="isApproval!=null">
AND ba.is_approval = #{isApproval}
</if>
<if test="templetId!=null">
AND ba.TEMPLET_ID = #{templetId}
</if>
<if test="secondTempletId!=null">
AND ba.SECOND_TEMPLET_ID = #{secondTempletId}
</if>
<if test="thirdTempletId!=null">
AND ba.third_templet_id = #{thirdTempletId}
</if>
<if test="startTime != null and endTime != null">
AND ba.CREATED_DATE BETWEEN #{startTime} AND #{endTime}
</if>
<if test="adviserIds != null and adviserIds.size>0">
AND ba.ADVISER_ID in
<foreach collection="adviserIds" index="index" separator="," item="item" close=")" open="(">
#{item}
</foreach>
</if>
ORDER BY
ba.CREATED_DATE 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