Commit 14507999 by 吴博 Committed by 郑永强

feat:[1003265] ERP各部门新增展示关联RAYS书刊下配置的码与资源信息

parent 77c27dcc
package com.pcloud.book.book.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class BookResourceStatisticsDTO {
private String bookChannelAdviserId;
@ApiModelProperty("图书标识")
private Long bookId;
@ApiModelProperty("运营标识")
private Long channelId;
@ApiModelProperty("编辑id")
private Long adviserId;
@ApiModelProperty("服务数量")
private Integer serveCount;
@ApiModelProperty("二维码数量")
private Integer qrcodeCount;
}
package com.pcloud.book.book.dto;
import lombok.Data;
import java.util.List;
@Data
public class MapResourceTotalCountDTO {
private List<Long> adviserIds;
private List<Long> bookIds;
private List<Long> channelIds;
}
......@@ -136,4 +136,8 @@ public interface BookAdviserService {
ResponseEntity<ResponseDto<BookRightsSettingDTO>>getBookRightsSetting(
@RequestParam("bookId") Long bookId, @RequestParam("channelId") Long channelId,
@RequestParam("adviserId") Long adviserId);
@ApiOperation("获取书下资源总数(包括现代纸书、1V1、小睿、社群码)")
@GetMapping("mapResourceTotalCount")
ResponseEntity<ResponseDto<Map<String, BookResourceStatisticsDTO>>> mapResourceTotalCount(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO);
}
package com.pcloud.book.group.dto;
import com.pcloud.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author zhuyajie
* @Description 书刊资源数量
* @Date 2020/6/15 17:55
* @Version 1.0
**/
@Data
public class BookGroupServeCountDTO extends BaseDto {
@ApiModelProperty("唯一键")
private String bookChannelAdviserId;
@ApiModelProperty("图书标识")
private Long bookId;
@ApiModelProperty("运营标识")
private Long channelId;
@ApiModelProperty("编辑id")
private Long adviserId;
@ApiModelProperty("服务数量")
private Integer serveCount;
@ApiModelProperty("二维码数量")
private Integer qrcodeCount;
}
package com.pcloud.book.group.dto;
import lombok.Data;
import java.util.List;
@Data
public class MapBookGroupServeCountDTO {
private List<Long> adviserIds;
private List<Long> bookIds;
private List<Long> channelIds;
}
......@@ -6,10 +6,12 @@ import com.pcloud.book.group.dto.BookGroupClassifyDTO;
import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.dto.ErpBookGroupDTO;
import com.pcloud.book.group.dto.ErpGroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.MapBookGroupServeCountDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QueryByBookAdviserDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
......@@ -228,4 +230,7 @@ public interface BookGroupService {
@RequestParam(value = "raysBookId") Long raysBookId
) throws BizException;
@ApiOperation(value = "批量获取书的资源数",httpMethod = "POST")
@RequestMapping(value = "/mapBookGroupServeCount", method = RequestMethod.POST)
ResponseEntity<ResponseDto<Map<String, BookGroupServeCountDTO>>> mapBookGroupServeCount(@RequestBody MapBookGroupServeCountDTO mapBookGroupServeCountDTO);
}
......@@ -8,6 +8,7 @@ import com.pcloud.book.book.dto.*;
import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.vo.ErpAdviserBookVO;
import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
......@@ -211,4 +212,15 @@ public interface BookAdviserBiz {
* @return
*/
BookAdviserDto getOneMainBook(Long bookId);
PageBeanNew<QrCodeVO> getQrList(Long bookId, Long adviserId, Long channelId, Integer currentPage, Integer numPerPage);
/**
* 获取书下资源总数(包括现代纸书、1V1、小睿、社群码)
* @param adviserIds
* @param bookIds
* @param channelIds
* @return
*/
Map<String, BookResourceStatisticsDTO> mapResourceTotalCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds);
}
......@@ -9,16 +9,23 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.pcloud.book.book.dto.BookResourceStatisticsDTO;
import com.pcloud.book.book.dto.BookRightsSettingDTO;
import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.book.book.vo.request.UpdateBookRobotProcessDto;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.rightsSetting.dto.RightsSettingDto;
import com.pcloud.book.es.biz.ESBookAndAdviserBiz;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.qrcode.dto.QrcodeMessageDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
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;
......@@ -876,4 +883,84 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
public BookAdviserDto getOneMainBook(Long bookId) {
return bookAdviserDao.getOneMainBook(bookId);
}
@Override
@ParamLog("获取某本书关联的二维码")
public PageBeanNew<QrCodeVO> getQrList(Long bookId, Long adviserId, Long channelId, Integer currentPage, Integer numPerPage) {
if (null == bookId || null == adviserId || null == channelId || null == currentPage || null == numPerPage ){
throw new BookBizException(BookBizException.ERROR, "参数为空");
}
//BookAdviserDto bookAdviserDto = bookAdviserDao.getBase(bookId, channelId, adviserId);
List<QrCodeVO> qrCodeVOS = new ArrayList<>();
BookGroupDTO bookGroupDTO = bookGroupDao.getDTOByBookId(bookId, channelId, adviserId);
if (null != bookGroupDTO) {
Map<String, BookGroupServeCountDTO> mapBookGroupServeCount = bookGroupBiz.mapBookGroupServeCount(Lists.newArrayList(adviserId),Lists.newArrayList(bookId),Lists.newArrayList(channelId));
QrCodeVO qrCodeVO = new QrCodeVO();
qrCodeVO.setQrCodeName(bookGroupDTO.getGroupQrcodeName());
qrCodeVO.setQrCodeUrl(bookGroupDTO.getGroupQrcodeUrl());
qrCodeVO.setServeCount(0);
if(mapBookGroupServeCount!=null && !mapBookGroupServeCount.isEmpty()) {
BookGroupServeCountDTO bookGroupServeCountDTO = mapBookGroupServeCount.get("" + bookId + "_" + channelId + "_" + adviserId);
qrCodeVO.setServeCount(bookGroupServeCountDTO.getServeCount());
}
qrCodeVOS.add(qrCodeVO);
}
List<QrcodeSceneDto> qrcodeSceneDtos = qrcodeSceneConsr.getQrCodeList(bookId, adviserId, channelId);
if (!ListUtils.isEmpty(qrcodeSceneDtos)) {
for (QrcodeSceneDto e : qrcodeSceneDtos) {
QrCodeVO qrCodeVO = new QrCodeVO();
qrCodeVO.setQrCodeName(e.getSceneName());
qrCodeVO.setQrCodeUrl(e.getQrcodeUrl());
qrCodeVO.setServeCount(ListUtils.isEmpty(e.getMessages()) ? 0 : e.getMessages().size());
qrCodeVOS.add(qrCodeVO);
}
}
if (ListUtils.isEmpty(qrCodeVOS)){
return new PageBeanNew<>(currentPage, numPerPage,new ArrayList<>());
}
List<QrCodeVO> record = new ArrayList<>();
if (qrCodeVOS.size() > (currentPage + 1) * numPerPage){
record = qrCodeVOS.subList(currentPage * numPerPage,(currentPage + 1) * numPerPage);
} else {
record = qrCodeVOS.subList(currentPage * numPerPage, qrCodeVOS.size());
}
return new PageBeanNew<>(currentPage, numPerPage,qrCodeVOS.size(), record);
}
@Override
public Map<String, BookResourceStatisticsDTO> mapResourceTotalCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds){
Map<String, BookResourceStatisticsDTO> mapBookResourceStatistics = new HashMap<>();
if(CollectionUtils.isEmpty(adviserIds) || CollectionUtils.isEmpty(bookIds) || CollectionUtils.isEmpty(channelIds)){
throw new ChannelBizException(ChannelBizException.FILED_NULL, "adviserIds、bookIds、channelIds 参数为空!");
}
Map<String, QrcodeMessageDTO> mapQrcodeMessage = channelConsr.mapResourceCount(adviserIds, bookIds, channelIds);
Map<String, BookGroupServeCountDTO> mapBookGroupServeCount = bookGroupBiz.mapBookGroupServeCount(adviserIds, bookIds, channelIds);
if(mapQrcodeMessage == null || mapQrcodeMessage.isEmpty()){
mapQrcodeMessage = new HashMap<>();
}
BookResourceStatisticsDTO bookResourceStatisticsDTO;
for (QrcodeMessageDTO qrcodeMessageDTO : mapQrcodeMessage.values()) {
bookResourceStatisticsDTO = new BookResourceStatisticsDTO();
BeanUtils.copyProperties(qrcodeMessageDTO, bookResourceStatisticsDTO);
mapBookResourceStatistics.put(bookResourceStatisticsDTO.getBookChannelAdviserId(), bookResourceStatisticsDTO);
if(mapBookGroupServeCount == null || mapBookGroupServeCount.isEmpty()){
continue;
}
BookGroupServeCountDTO bookGroupServeCountDTO = mapBookGroupServeCount.get(bookResourceStatisticsDTO.getBookChannelAdviserId());
if(bookGroupServeCountDTO == null){
continue;
}
bookResourceStatisticsDTO.setServeCount(bookResourceStatisticsDTO.getServeCount() + bookGroupServeCountDTO.getServeCount());
bookResourceStatisticsDTO.setQrcodeCount(bookResourceStatisticsDTO.getQrcodeCount() + bookGroupServeCountDTO.getQrcodeCount());
}
for(BookGroupServeCountDTO bookGroupServeCountDTO : mapBookGroupServeCount.values()){
if(mapBookResourceStatistics.containsKey(bookGroupServeCountDTO.getBookChannelAdviserId())){
continue;
}
bookResourceStatisticsDTO = new BookResourceStatisticsDTO();
BeanUtils.copyProperties(bookGroupServeCountDTO, bookResourceStatisticsDTO);
mapBookResourceStatistics.put(bookResourceStatisticsDTO.getBookChannelAdviserId(), bookResourceStatisticsDTO);
}
return mapBookResourceStatistics;
}
}
......@@ -5,6 +5,10 @@ package com.pcloud.book.book.facade.impl;
import java.util.ArrayList;
import java.util.List;
import com.pcloud.book.book.vo.QrCodeVO;
import com.pcloud.channelcenter.qrcode.entity.QrcodeScene;
import com.pcloud.common.page.PageBeanNew;
import org.codehaus.jackson.JsonParseException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -191,4 +195,20 @@ public class BookAdviserFacadeImpl implements BookAdviserFacade {
bookAdviserBiz.setIsPrint(bookAdviser);
return new ResponseDto<>();
}
/**
* 获取某本书关联的二维码列表
*/
@RequestMapping(value = "getQrList", method = RequestMethod.GET)
public ResponseDto<PageBeanNew<QrCodeVO>> getQrList(@RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "adviserId") Long adviserId,
@RequestParam(value = "channelId") Long channelId,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage) throws BizException {
PageBeanNew<QrCodeVO> qrCodeVOPageBeanNew = bookAdviserBiz.getQrList(bookId, adviserId, channelId, currentPage, numPerPage);
return new ResponseDto<>(qrCodeVOPageBeanNew);
}
}
......@@ -143,4 +143,10 @@ public class BookAdviserServiceImpl implements BookAdviserService {
BookRightsSettingDTO bookRightsSettingDTO = bookAdviserBiz.getBookRightsSetting(bookId,channelId,adviserId);
return ResponseHandleUtil.toResponse(bookRightsSettingDTO);
}
@Override
@PostMapping("mapResourceTotalCount")
public ResponseEntity<ResponseDto<Map<String, BookResourceStatisticsDTO>>> mapResourceTotalCount(@RequestBody MapResourceTotalCountDTO mapResourceTotalCountDTO) {
return ResponseHandleUtil.toResponse(bookAdviserBiz.mapResourceTotalCount(mapResourceTotalCountDTO.getAdviserIds(), mapResourceTotalCountDTO.getBookIds(), mapResourceTotalCountDTO.getChannelIds()));
}
}
package com.pcloud.book.book.vo;
import lombok.Data;
@Data
public class QrCodeVO {
private String qrCodeName;
private String qrCodeUrl;
private Integer serveCount;
}
......@@ -24,6 +24,7 @@ import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import org.apache.regexp.RE;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -396,4 +397,14 @@ public class QrcodeSceneConsr {
}
return map;
}
public List<QrcodeSceneDto> getQrCodeList(Long bookId, Long adviserId, Long channelId) {
List<QrcodeSceneDto> qrcodeSceneDtos = new ArrayList<>();
try {
qrcodeSceneDtos = ResponseHandleUtil.parseList(qrcodeSceneService.getQrCodeList(adviserId, bookId, channelId),QrcodeSceneDto.class);
}catch (Exception e){
LOGGER.error("调用qrcodeSceneService.getQrCodeList失败" + e.getMessage(), e);
}
return qrcodeSceneDtos;
}
}
......@@ -4,6 +4,8 @@
package com.pcloud.book.consumer.user;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.qrcode.dto.MapResourceCountDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeMessageDTO;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
import com.pcloud.channelcenter.wechat.service.MessageService;
import com.pcloud.common.exceptions.BizException;
......@@ -159,4 +161,13 @@ public class ChannelConsr {
throw new ChannelBizException(ChannelBizException.PARAM_IS_NULL, "bookId为空");
}
}
public Map<String, QrcodeMessageDTO> mapResourceCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds) {
MapResourceCountDTO mapResourceCountDTO = new MapResourceCountDTO();
mapResourceCountDTO.setAdviserIds(adviserIds);
mapResourceCountDTO.setBookIds(bookIds);
mapResourceCountDTO.setChannelIds(channelIds);
Map<String, QrcodeMessageDTO> mapQrcodeMessage = ResponseHandleUtil.parseMap(qrcodeSceneService.mapResourceCount(mapResourceCountDTO), String.class, QrcodeMessageDTO.class);
return mapQrcodeMessage;
}
}
......@@ -10,6 +10,7 @@ import com.pcloud.book.group.dto.BookGroupClassifyDTO;
import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.dto.BookGroupStatistic4AgentDTO;
import com.pcloud.book.group.dto.BookGroupStatisticsDTO;
import com.pcloud.book.group.dto.BookServeDTO;
......@@ -897,4 +898,13 @@ public interface BookGroupBiz {
* * @param null
*/
Map<String,Integer> mapServeCount4Applet(List<Long> bookIds);
/**
* 批量获取书下的资源数
* @param adviserIds
* @param bookIds
* @param channelIds
* @return
*/
Map<String, BookGroupServeCountDTO> mapBookGroupServeCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds);
}
......@@ -74,6 +74,7 @@ import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupIdAndCountDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.dto.BookGroupStatistic4AgentDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.book.group.dto.BookGroupStatisticsDTO;
......@@ -168,6 +169,7 @@ import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.book.util.properties.BookProps;
import com.pcloud.channelcenter.base.constants.ChannelConstants;
import com.pcloud.channelcenter.base.constants.ChannelEnum;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
......@@ -5243,4 +5245,11 @@ public class BookGroupBizImpl implements BookGroupBiz {
return map;
}
@Override
public Map<String, BookGroupServeCountDTO> mapBookGroupServeCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds){
if(CollectionUtils.isEmpty(adviserIds) || CollectionUtils.isEmpty(bookIds) || CollectionUtils.isEmpty(channelIds)){
throw new ChannelBizException(ChannelBizException.FILED_NULL, "adviserIds、bookIds、channelIds 参数为空!");
}
return bookGroupServeDao.mapBookGroupServeCount(adviserIds, bookIds, channelIds);
}
}
package com.pcloud.book.group.dao;
import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.entity.BookGroupApp;
import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.vo.BookGroupServeCountVO;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
import java.util.Map;
public interface BookGroupServeDao extends BaseDao<BookGroupServe> {
Integer batchInsert(List<BookGroupServe> bookGroupServes);
......@@ -60,4 +62,12 @@ public interface BookGroupServeDao extends BaseDao<BookGroupServe> {
*/
List<BookGroupServeCountVO> getServeList4Applet(List<Long> bookIds);
/**
* 批量获取书下的资源数
* @param adviserIds
* @param bookIds
* @param channelIds
* @return
*/
Map<String, BookGroupServeCountDTO> mapBookGroupServeCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds);
}
......@@ -2,6 +2,7 @@ package com.pcloud.book.group.dao.impl;
import com.pcloud.book.group.dao.BookGroupServeDao;
import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.entity.BookGroupApp;
import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.vo.BookGroupServeCountVO;
......@@ -104,4 +105,13 @@ public class BookGroupServeDaoImpl extends BaseDaoImpl<BookGroupServe> implement
map.put("bookIds", bookIds);
return getSessionTemplate().selectList(getStatement("getServeList4Applet"), map);
}
@Override
public Map<String, BookGroupServeCountDTO> mapBookGroupServeCount(List<Long> adviserIds, List<Long> bookIds, List<Long> channelIds) {
Map<String,Object> map = new HashMap<>();
map.put("adviserIds", adviserIds);
map.put("bookIds", bookIds);
map.put("channelIds", channelIds);
return getSessionTemplate().selectMap(getStatement("mapBookGroupServeCount"), map, "bookChannelAdviserId");
}
}
......@@ -7,10 +7,12 @@ import com.pcloud.book.group.dto.BookAppletSceneDTO;
import com.pcloud.book.group.dto.BookGroupCountDTO;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupKeywordResourceDTO;
import com.pcloud.book.group.dto.BookGroupServeCountDTO;
import com.pcloud.book.group.dto.ErpBookGroupDTO;
import com.pcloud.book.group.dto.ErpGroupQrcodeDTO;
import com.pcloud.book.group.dto.GroupCipherDTO;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.MapBookGroupServeCountDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QueryByBookAdviserDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
......@@ -389,4 +391,10 @@ public class BookGroupServiceImpl implements BookGroupService {
throws BizException {
return ResponseHandleUtil.toResponse(bookGroupBiz.getBookGroupId4OldData(raysBookId));
}
@Override
@PostMapping("mapBookGroupServeCount")
public ResponseEntity<ResponseDto<Map<String, BookGroupServeCountDTO>>> mapBookGroupServeCount(@RequestBody MapBookGroupServeCountDTO mapBookGroupServeCountDTO) {
return ResponseHandleUtil.toResponse(bookGroupBiz.mapBookGroupServeCount(mapBookGroupServeCountDTO.getAdviserIds(),mapBookGroupServeCountDTO.getBookIds(),mapBookGroupServeCountDTO.getChannelIds()));
}
}
......@@ -210,4 +210,25 @@
GROUP BY g.book_id,g.create_user,g.channel_id
</select>
</mapper>
\ No newline at end of file
<select id="mapBookGroupServeCount" parameterType="map" resultType="com.pcloud.book.group.dto.BookGroupServeCountDTO">
SELECT
CONCAT(bg.book_id,'_',bg.channel_id,'_',bg.create_user) bookChannelAdviserId, COUNT(bgs.id) serveCount,
bg.book_id bookId, bg.create_user adviserId, bg.channel_id channelId,COUNT(DISTINCT bg.group_qrcode_url) qrcodeCount
FROM `book_group` bg LEFT JOIN book_group_serve bgs ON bg.id = bgs.book_group_id
WHERE
bg.is_delete=0
AND bg.book_id IN
<foreach collection="bookIds" item="bookId" separator="," open="(" close=")">
${bookId}
</foreach>
AND bg.channel_id IN
<foreach collection="channelIds" item="channelId" separator="," open="(" close=")">
${channelId}
</foreach>
AND bg.create_user IN
<foreach collection="adviserIds" item="adviserId" separator="," open="(" close=")">
${adviserId}
</foreach>
GROUP BY bg.book_id,bg.create_user,bg.channel_id
</select>
</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