Commit 61fa9fb8 by 郑永强

1002771 处理湖南出版社二维码特殊跳转的逻辑

parent d91af14d
...@@ -2163,18 +2163,20 @@ public class BookBizImpl implements BookBiz { ...@@ -2163,18 +2163,20 @@ public class BookBizImpl implements BookBiz {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bookGroupId", bookGroupId); paramMap.put("bookGroupId", bookGroupId);
SearchBookVO bookVO=bookDao.getBookInfoByBookGroupId(paramMap); SearchBookVO bookVO=bookDao.getBookInfoByBookGroupId(paramMap);
if(bookVO!=null) {
//通过agentId查找出版社名称 //通过agentId查找出版社名称
List<Long> agentIds=new ArrayList<>(); List<Long> agentIds = new ArrayList<>();
agentIds.add(bookVO.getAgentId()); agentIds.add(bookVO.getAgentId());
Map<Long, String> names = agentConsr.getNames(agentIds); Map<Long, String> names = agentConsr.getNames(agentIds);
String name = names.get(bookVO.getAgentId()); String name = names.get(bookVO.getAgentId());
bookVO.setAgentName(name); bookVO.setAgentName(name);
//通过编辑id查找编辑名称 //通过编辑id查找编辑名称
List<Long> adviserIds=new ArrayList<>(); List<Long> adviserIds = new ArrayList<>();
adviserIds.add(bookVO.getAdviserId()); adviserIds.add(bookVO.getAdviserId());
Map<Long, String> map = adviserConsr.getNames(adviserIds); Map<Long, String> map = adviserConsr.getNames(adviserIds);
String adviserName = map.get(bookVO.getAdviserId()); String adviserName = map.get(bookVO.getAdviserId());
bookVO.setAdviserName(adviserName); bookVO.setAdviserName(adviserName);
}
return bookVO; return bookVO;
} }
} }
package com.pcloud.book.consumer.app; package com.pcloud.book.consumer.app;
import com.pcloud.appcenter.base.dto.AppPriceCacheDTO;
import com.pcloud.appcenter.cache.service.AppPriceCacheService;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -36,6 +39,8 @@ public class AppConsr { ...@@ -36,6 +39,8 @@ public class AppConsr {
@Autowired @Autowired
private AppService appService; private AppService appService;
@Autowired
private AppPriceCacheService appPriceCacheService;
/** /**
* 获取审核通过的应用 * 获取审核通过的应用
...@@ -171,4 +176,21 @@ public class AppConsr { ...@@ -171,4 +176,21 @@ public class AppConsr {
return map; return map;
} }
/**
* 获取应用价格
* @param appPriceCacheDTOS
* @return
*/
public Map<Long, BigDecimal> getAppPrice(List<AppPriceCacheDTO> appPriceCacheDTOS) {
Map<Long, BigDecimal> appPrices = null;
if(ListUtils.isEmpty(appPriceCacheDTOS)){
return null;
}
try{
appPrices = ResponseHandleUtil.parseMapResponse(appPriceCacheService.getCaches(appPriceCacheDTOS), Long.class, BigDecimal.class);
}catch (Exception e){
LOGGER.error("获取应用价格失败"+e.getMessage(),e);
}
return appPrices;
}
} }
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package com.pcloud.book.consumer.resource; package com.pcloud.book.consumer.resource;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.channelcenter.base.exceptions.ChannelBizException;
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;
...@@ -283,4 +284,27 @@ public class ProductConsr { ...@@ -283,4 +284,27 @@ public class ProductConsr {
} }
} }
/**
* 获取商品信息
*
* @return
* @throws BizException
*/
public Map<Long, ProductDto> getProPriceInfo(List<Long> productIds, Long channelId) throws BizException {
Map<Long, ProductDto> productMap = null;
if (ListUtils.isEmpty(productIds)) {
return null;
}
try {
productMap = ResponseHandleUtil.parseMapResponse(productService.getProPriceInfo(productIds, channelId),
Long.class, ProductDto.class);
} catch (BizException e) {
throw new BizException(e.getCode(), e.getMessage());
} catch (Exception e) {
LOGGER.error("获取商品信息失败[productService.getProRetailBase]:" + e.getMessage(), e);
throw new ChannelBizException(ChannelBizException.INVOKE_RES_ERROR, "获取商品信息失败~!");
}
return productMap;
}
} }
...@@ -2,7 +2,40 @@ package com.pcloud.book.group.biz; ...@@ -2,7 +2,40 @@ package com.pcloud.book.group.biz;
import com.pcloud.book.book.dto.BookDto; import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.entity.Book; import com.pcloud.book.book.entity.Book;
import com.pcloud.book.group.dto.*; import com.pcloud.book.group.dto.AgentStatisticsInfoDTO;
import com.pcloud.book.group.dto.AltAndCountDTO;
import com.pcloud.book.group.dto.BookAppletSceneDTO;
import com.pcloud.book.group.dto.AppStatisticsDTO;
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.BookGroupStatistic4AgentDTO;
import com.pcloud.book.group.dto.BookGroupStatisticsDTO;
import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.group.dto.BookServeResourceDTO;
import com.pcloud.book.group.dto.ChangeQrCodeTypeDto;
import com.pcloud.book.group.dto.ClassifyKeywordDTO;
import com.pcloud.book.group.dto.CountAndTimeDTO;
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.GroupStoreMyPayDto;
import com.pcloud.book.group.dto.GroupUseDTO;
import com.pcloud.book.group.dto.JoinGroupCipherDTO;
import com.pcloud.book.group.dto.LabelUserCountDTO;
import com.pcloud.book.group.dto.LargeTempletDTO;
import com.pcloud.book.group.dto.OwnAltQrcodeInfoDTO;
import com.pcloud.book.group.dto.PersonalQrcodeDTO;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.dto.ResourceBrowseParamDto;
import com.pcloud.book.group.dto.SelfBookGroupStDTO;
import com.pcloud.book.group.dto.SelfBookGroupStParamDTO;
import com.pcloud.book.group.dto.SelfRobotBookGroupDTO;
import com.pcloud.book.group.dto.SelfRobotUserDTO;
import com.pcloud.book.group.dto.SelfRobtParamDTO;
import com.pcloud.book.group.dto.TopAgentBookGroupDTO;
import com.pcloud.book.group.dto.UserBookBaseInfoDTO;
import com.pcloud.book.group.dto.UserSelectParamDTO;
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.entity.BookGroupServe;
import com.pcloud.book.group.dto.AgentStatisticsInfoDTO; import com.pcloud.book.group.dto.AgentStatisticsInfoDTO;
...@@ -450,6 +483,13 @@ public interface BookGroupBiz { ...@@ -450,6 +483,13 @@ public interface BookGroupBiz {
PageBeanNew<BookGroupServe> getBookGroupServeList4Wechat(Long bookGroupId, Integer currentPage, Integer numPerPage); PageBeanNew<BookGroupServe> getBookGroupServeList4Wechat(Long bookGroupId, Integer currentPage, Integer numPerPage);
/** /**
* 获取资源配置集合
* @param bookGroupId
* @return
*/
BookServeResourceDTO getBookGroupServeListByBookGroupId(Long bookGroupId);
/**
* 获取社群码暗号 * 获取社群码暗号
*/ */
String getBookGroupCipher(); String getBookGroupCipher();
......
...@@ -22,6 +22,7 @@ import com.pcloud.book.book.dto.BookDto; ...@@ -22,6 +22,7 @@ import com.pcloud.book.book.dto.BookDto;
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;
import com.pcloud.book.book.set.BookSet; import com.pcloud.book.book.set.BookSet;
import com.pcloud.book.book.vo.SearchBookVO;
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.channel.QrcodeSceneConsr; import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
...@@ -83,6 +84,7 @@ import com.pcloud.book.rightsSetting.biz.RightsSettingBiz; ...@@ -83,6 +84,7 @@ import com.pcloud.book.rightsSetting.biz.RightsSettingBiz;
import com.pcloud.book.rightsSetting.dto.RightsSettingDto; import com.pcloud.book.rightsSetting.dto.RightsSettingDto;
import com.pcloud.book.util.common.ThreadPoolUtils; import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.base.constants.ChannelConstants; import com.pcloud.channelcenter.base.constants.ChannelConstants;
import com.pcloud.channelcenter.base.constants.ChannelEnum;
import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO; import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto; import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto; import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
...@@ -2501,6 +2503,135 @@ public class BookGroupBizImpl implements BookGroupBiz { ...@@ -2501,6 +2503,135 @@ public class BookGroupBizImpl implements BookGroupBiz {
return pageBeanNew; return pageBeanNew;
} }
@ParamLog("客户端获取资源配置集合")
@Override
public BookServeResourceDTO getBookGroupServeListByBookGroupId(Long bookGroupId) {
if (bookGroupId == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "参数不能为空!");
}
BookServeResourceDTO bookResourceDTO = new BookServeResourceDTO();
SearchBookVO bookInfo = bookBiz.getBookInfoByBookGroupId(bookGroupId);
bookResourceDTO.setAgentName(bookInfo.getAgentName());
bookResourceDTO.setAuthor(bookInfo.getAuthor());
bookResourceDTO.setBookCoverImg(bookInfo.getCoverImg());
bookResourceDTO.setBookId(bookInfo.getBookId());
bookResourceDTO.setBookName(bookInfo.getBookName());
bookResourceDTO.setAdviserId(bookInfo.getAdviserId());
bookResourceDTO.setChannelId(bookInfo.getChannelId());
List<BookGroupServe> bookGroupServes = bookGroupServeDao.getListByBookGroupId(bookGroupId);
bookResourceDTO.setMessages(fillMessages(bookGroupServes));
bookResourceDTO.setOriginalCost(setQrMessagePrice(bookResourceDTO.getMessages(), bookInfo.getChannelId()));
return bookResourceDTO;
}
private List<WechatMessageDTO> fillMessages(List<BookGroupServe> list) {
if (ListUtils.isEmpty(list)){
return Lists.newArrayList();
}
List<Long> productIds = new ArrayList<>();
List<Long> appIds = new ArrayList<>();
for (BookGroupServe bookGroupServe : list) {
if (AppAndProductTypeEnum.PRODUCT.value.equals(bookGroupServe.getServeType())) {
productIds.add(bookGroupServe.getServeId());
}
if (AppAndProductTypeEnum.APP.value.equals(bookGroupServe.getServeType())) {
appIds.add(bookGroupServe.getServeId());
}
}
Map<Long, ProductDto> productDtoMap = new HashMap<>();
Map<Long, AppDto> appDtoMap = new HashMap<>();
if (!ListUtils.isEmpty(productIds)) {
productDtoMap = productConsr.getProBasesByIds(productIds);
}
if (!ListUtils.isEmpty(appIds)) {
appDtoMap = appConsr.mapByIds(appIds);
}
List<WechatMessageDTO> messages = Lists.newArrayList();
WechatMessageDTO wechatMessageDTO;
for (BookGroupServe bookGroupServe : list) {
wechatMessageDTO = new WechatMessageDTO();
if (AppAndProductTypeEnum.PRODUCT.value.equals(bookGroupServe.getServeType())) {
ProductDto productDto = productDtoMap.get(bookGroupServe.getServeId());
if (productDto != null) {
wechatMessageDTO.setPosterPicUrl(productDto.getPicture1());
wechatMessageDTO.setCoverImg(productDto.getCoverImg());
wechatMessageDTO.setFromId(productDto.getProductId());
wechatMessageDTO.setFromType(productDto.getProductTypeDto().getTypeCode());
wechatMessageDTO.setPrice(productDto.getRetailPrice());
wechatMessageDTO.setShortName(productDto.getShortName());
wechatMessageDTO.setTitle(productDto.getProductName());
wechatMessageDTO.setTypeCode(bookGroupServe.getServeType());
wechatMessageDTO.setUrl(bookGroupServe.getShortUrl());
messages.add(wechatMessageDTO);
}
}
if (AppAndProductTypeEnum.APP.value.equals(bookGroupServe.getServeType())) {
AppDto appDto = appDtoMap.get(bookGroupServe.getServeId());
if (appDto != null) {
wechatMessageDTO.setPosterPicUrl(appDto.getTransverseImg());
wechatMessageDTO.setCoverImg(appDto.getSquareImg());
wechatMessageDTO.setFromId(appDto.getAppId());
wechatMessageDTO.setFromType(appDto.getTypeCode());
wechatMessageDTO.setPrice(appDto.getRetailPrice());
wechatMessageDTO.setShortName(appDto.getShortTitle());
wechatMessageDTO.setTitle(appDto.getTitle());
wechatMessageDTO.setTypeCode(bookGroupServe.getServeType());
wechatMessageDTO.setUrl(bookGroupServe.getShortUrl());
messages.add(wechatMessageDTO);
}
}
}
return messages;
}
private BigDecimal setQrMessagePrice(List<WechatMessageDTO> wechatMessages, Long chennelId) {
if(CollectionUtils.isEmpty(wechatMessages)) {
return BigDecimal.ZERO;
}
final List<Long> productIds = Lists.newArrayList();
final List<AppPriceCacheDTO> appPriceCacheDTOS = Lists.newArrayList();
for (WechatMessageDTO message : wechatMessages) {
if(ChannelEnum.PRODUCT.value.equals(message.getTypeCode())) {
productIds.add(message.getFromId());
}
if(ChannelEnum.APP.value.equals(message.getTypeCode())) {
AppPriceCacheDTO dto = new AppPriceCacheDTO();
dto.setAppId(message.getFromId());
dto.setAppTypeEnum(AppTypeEnum.APP_TYPE_MAP.get(message.getFromType()));
appPriceCacheDTOS.add(dto);
}
}
final Map<Long, BigDecimal> appPrice = this.appConsr.getAppPrice(appPriceCacheDTOS);
final Map<Long, ProductDto> priceInfo = this.productConsr.getProPriceInfo(productIds, chennelId);
BigDecimal originalCost = BigDecimal.ZERO;
for (WechatMessageDTO message : wechatMessages) {
if(ChannelEnum.PRODUCT.value.equals(message.getTypeCode()) && !CollectionUtils.isEmpty(priceInfo)) {
final ProductDto productDto = priceInfo.get(message.getFromId());
if(null == productDto || CollectionUtils.isEmpty(productDto.getSpecification())) {
continue;
}
final Double retailPrice = productDto.getSpecification().get(0).getRetailPrice();
message.setPrice(new BigDecimal(null == retailPrice ? 0 : retailPrice));
}
if(ChannelEnum.APP.value.equals(message.getTypeCode()) && !CollectionUtils.isEmpty(appPrice)) {
final BigDecimal price = appPrice.get(message.getFromId());
if(null == price) {
continue;
}
message.setPrice(price);
}
if(null != message.getPrice()) {
originalCost = originalCost.add(message.getPrice());
}
}
return originalCost;
}
@ParamLog("填充资源信息") @ParamLog("填充资源信息")
private void fillServeInfo(List<BookGroupServe> list) { private void fillServeInfo(List<BookGroupServe> list) {
if (ListUtils.isEmpty(list)){ if (ListUtils.isEmpty(list)){
......
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import lombok.Data;
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModel
@Data
public class BookServeResourceDTO implements Serializable {
private static final long serialVersionUID = -4087382700500198821L;
private Long bookId;
private String bookName;
private String bookCoverImg;
private String agentName;
private String author;
private Object readerNum;
private Object readerInfo;
private Integer serverNum;
private Long templetId;
private String templetName;
private Boolean isOpenAuth;
private BigDecimal originalCost;
private List<WechatMessageDTO> messages;
@ApiModelProperty("公众号ID")
private Long officialAccountsId;
@ApiModelProperty("宣传语")
private String slogan;
@ApiModelProperty("总销售价")
private BigDecimal totalPrice;
@ApiModelProperty("折扣")
private Double sale;
@ApiModelProperty("折后价")
private BigDecimal salePrice;
@ApiModelProperty("短名称")
private String shortTitle;
@ApiModelProperty("是否开启活动")
private Integer isOpen;
@ApiModelProperty("授权状态")
private Boolean authStatus;
@ApiModelProperty("授权状态")
private Long adviserId;
@ApiModelProperty("渠道id")
private Long channelId;
}
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
@ApiModel
@JsonInclude(JsonInclude.Include.NON_NULL)
public class WechatMessageDTO implements Serializable {
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("具体类型")
private String fromType;
@ApiModelProperty("来源标识")
private Long fromId;
@ApiModelProperty("封面图")
private String coverImg;
@ApiModelProperty("宣传图")
private String posterPicUrl;
@ApiModelProperty("跳转链接")
private String url;
@ApiModelProperty("短名称")
private String shortName;
@ApiModelProperty("服务引导语")
private String serviceLead;
@ApiModelProperty("类型(商品或应用)")
private String typeCode;
@ApiModelProperty("图片url")
private String picUrl;
@ApiModelProperty("价格")
private BigDecimal price;
@ApiModelProperty("是否开启授权")
private Boolean isOpen = false;
@ApiModelProperty("是否辅导")
private Boolean isParentCoach = false;
public Boolean getParentCoach() {
return isParentCoach;
}
public void setParentCoach(Boolean parentCoach) {
isParentCoach = parentCoach;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getFromType() {
return fromType;
}
public void setFromType(String fromType) {
this.fromType = fromType;
}
public Long getFromId() {
return fromId;
}
public void setFromId(Long fromId) {
this.fromId = fromId;
}
public String getCoverImg() {
return coverImg;
}
public void setCoverImg(String coverImg) {
this.coverImg = coverImg;
}
public String getPosterPicUrl() {
return posterPicUrl;
}
public void setPosterPicUrl(String posterPicUrl) {
this.posterPicUrl = posterPicUrl;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public String getTypeCode() {
return typeCode;
}
public void setTypeCode(String typeCode) {
this.typeCode = typeCode;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Boolean getOpen() {
return isOpen;
}
public void setOpen(Boolean open) {
isOpen = open;
}
public String getServiceLead() {
return serviceLead;
}
public void setServiceLead(String serviceLead) {
this.serviceLead = serviceLead;
}
@Override
public String toString() {
return "WechatMessageVO{" +
"title='" + title + '\'' +
", fromType='" + fromType + '\'' +
", fromId=" + fromId +
", coverImg='" + coverImg + '\'' +
", posterPicUrl='" + posterPicUrl + '\'' +
", url='" + url + '\'' +
", shortName='" + shortName + '\'' +
", serviceLead='" + serviceLead + '\'' +
", typeCode='" + typeCode + '\'' +
", picUrl='" + picUrl + '\'' +
", isOpen=" + isOpen +
'}';
}
}
...@@ -466,6 +466,12 @@ public interface BookGroupFacade { ...@@ -466,6 +466,12 @@ public interface BookGroupFacade {
@RequestParam("numPerPage") Integer numPerPage @RequestParam("numPerPage") Integer numPerPage
) throws BizException, PermissionException, JsonParseException; ) throws BizException, PermissionException, JsonParseException;
@ApiOperation("获取资源配置集合(特殊二维码用)")
@GetMapping("getBookGroupServeListByBookGroupId")
ResponseDto<?> getBookGroupServeListByBookGroupId(
@RequestParam("bookGroupId") Long bookGroupId
) throws BizException, PermissionException, JsonParseException;
@ApiOperation("获取社群码暗号") @ApiOperation("获取社群码暗号")
@GetMapping("getBookGroupCipher") @GetMapping("getBookGroupCipher")
ResponseDto<?> getBookGroupCipher( ResponseDto<?> getBookGroupCipher(
......
...@@ -672,6 +672,15 @@ public class BookGroupFacadeImpl implements BookGroupFacade { ...@@ -672,6 +672,15 @@ public class BookGroupFacadeImpl implements BookGroupFacade {
return new ResponseDto<>(bookGroupBiz.getBookGroupServeList4Wechat(bookGroupId,currentPage,numPerPage)); return new ResponseDto<>(bookGroupBiz.getBookGroupServeList4Wechat(bookGroupId,currentPage,numPerPage));
} }
@ApiOperation("获取资源配置集合(特殊二维码用)")
@GetMapping("getBookGroupServeListByBookGroupId")
@Override
public ResponseDto<?> getBookGroupServeListByBookGroupId(
@RequestParam("bookGroupId") Long bookGroupId
) throws BizException, PermissionException, JsonParseException {
return new ResponseDto<>(bookGroupBiz.getBookGroupServeListByBookGroupId(bookGroupId));
}
@ApiOperation("获取社群码暗号") @ApiOperation("获取社群码暗号")
@GetMapping("getBookGroupCipher") @GetMapping("getBookGroupCipher")
@Override @Override
......
...@@ -2225,7 +2225,7 @@ ...@@ -2225,7 +2225,7 @@
</select> </select>
<select id="getBookInfoByBookGroupId" parameterType="map" resultType="com.pcloud.book.book.vo.SearchBookVO"> <select id="getBookInfoByBookGroupId" parameterType="map" resultType="com.pcloud.book.book.vo.SearchBookVO">
select a.id bookGroupId,b.book_id bookId ,b.book_name bookName,b.publish , select a.id bookGroupId,b.book_id bookId ,b.book_name bookName,b.publish ,
b.author,b.COVER_IMG coverImg,b.isbn,b.is_show_qualify_info isShowQualifyInfo,c.ADVISER_ID adviserId,a.agent_id agentId b.author,b.COVER_IMG coverImg,b.isbn,b.is_show_qualify_info isShowQualifyInfo,c.ADVISER_ID adviserId,a.agent_id agentId,a.channel_id channelId
from book_group a from book_group a
LEFT JOIN book b on a.book_id=b.book_id LEFT JOIN book b on a.book_id=b.book_id
left join book_adviser c on a.book_id=c.book_id left join book_adviser c on a.book_id=c.book_id
......
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