Commit dab59d36 by 阮思源

Merge branch 'feat-1002383' into 'master'

1002383 书单服务页2处(个人号回复、H5技能页)设计

See merge request rays/pcloud-book!433
parents 1ea6fa34 c7168f2a
...@@ -513,6 +513,11 @@ public class BookDto extends BaseDto { ...@@ -513,6 +513,11 @@ public class BookDto extends BaseDto {
private Long secondTempletId; private Long secondTempletId;
/** /**
* 第二类型名称
*/
private String secondTempletName;
/**
* 第二级类型typeCode * 第二级类型typeCode
*/ */
private String secondTypeCode; private String secondTypeCode;
...@@ -1442,6 +1447,14 @@ public class BookDto extends BaseDto { ...@@ -1442,6 +1447,14 @@ public class BookDto extends BaseDto {
this.secondTempletId = secondTempletId; this.secondTempletId = secondTempletId;
} }
public String getSecondTempletName() {
return secondTempletName;
}
public void setSecondTempletName(String secondTempletName) {
this.secondTempletName = secondTempletName;
}
public String getSecondTypeCode() { public String getSecondTypeCode() {
return secondTypeCode; return secondTypeCode;
} }
...@@ -1760,6 +1773,7 @@ public class BookDto extends BaseDto { ...@@ -1760,6 +1773,7 @@ public class BookDto extends BaseDto {
", totalIncome=" + totalIncome + ", totalIncome=" + totalIncome +
", groupQrcodeLink='" + groupQrcodeLink + '\'' + ", groupQrcodeLink='" + groupQrcodeLink + '\'' +
", secondTempletId=" + secondTempletId + ", secondTempletId=" + secondTempletId +
", secondTempletName='" + secondTempletName + '\'' +
", secondTypeCode='" + secondTypeCode + '\'' + ", secondTypeCode='" + secondTypeCode + '\'' +
", registerNum=" + registerNum + ", registerNum=" + registerNum +
", registerRate=" + registerRate + ", registerRate=" + registerRate +
......
...@@ -611,4 +611,14 @@ public interface BookBiz { ...@@ -611,4 +611,14 @@ public interface BookBiz {
* @return * @return
*/ */
List<Long> getBookIdsByBookName(String bookName); List<Long> getBookIdsByBookName(String bookName);
/**
* 平台端获取编辑书刊
*/
PageBeanNew<BookDto> getAdviserBooks4Pcloud(String keyword, Long agentId, Long templetId, Long secondTempletId, String typeCode, Integer currentPage, Integer numPerPage);
/**
* 获取编辑书刊H5
*/
PageBeanNew<BookDto> getAdviserBooks4H5(String keyword, Long templetId, Long secondTempletId, Integer currentPage, Integer numPerPage);
} }
package com.pcloud.book.book.biz;
import com.pcloud.book.book.entity.HotBook;
import com.pcloud.book.book.entity.SearchRecord;
import com.pcloud.book.book.vo.SearchBookVO;
import com.pcloud.common.page.PageBeanNew;
import java.util.List;
public interface SearchBiz {
void createHotBook(HotBook hotBook);
void deleteHotBook(Long id);
PageBeanNew<HotBook> getHotBookList(Integer currentPage,Integer numPerPage);
void updateHotBookSeqNum(HotBook hotBook);
void createSearchRecord4H5(SearchRecord searchRecord);
PageBeanNew<SearchBookVO> getSearchList(String content, Integer currentPage, Integer numPerPage);
PageBeanNew<SearchRecord> getSearchRecordList(String content, Long bookId, Long agentId, Integer currentPage, Integer numPerPage);
PageBeanNew<SearchRecord> getUserSearchList4H5(String wxId, Integer currentPage, Integer numPerPage);
void deleteUserSearchList4H5(String wxId);
void exportSearchList(String systemCode, Long partyId, String content);
void exportSearchRecordList(String systemCode, Long partyId, String content, Long bookId, Long agentId);
List<String> getBookSearchUserList4H5(Long bookId);
}
...@@ -7,6 +7,7 @@ import com.google.common.collect.Lists; ...@@ -7,6 +7,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.pcloud.analysisengine.qrcode.dto.BookTimeSourceDto; import com.pcloud.analysisengine.qrcode.dto.BookTimeSourceDto;
import com.pcloud.appcenter.assist.dto.AssistTempletDTO;
import com.pcloud.appcenter.base.exception.AppBizException; import com.pcloud.appcenter.base.exception.AppBizException;
import com.pcloud.book.base.enums.BookFreezeEnum; import com.pcloud.book.base.enums.BookFreezeEnum;
import com.pcloud.book.base.enums.BookStatusEnum; import com.pcloud.book.base.enums.BookStatusEnum;
...@@ -80,6 +81,7 @@ import com.pcloud.common.utils.string.StringUtil; ...@@ -80,6 +81,7 @@ import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.commoncenter.export.dto.ExportDto; import com.pcloud.commoncenter.export.dto.ExportDto;
import com.pcloud.commoncenter.export.service.ExportService; import com.pcloud.commoncenter.export.service.ExportService;
import com.pcloud.settlementcenter.record.exceptions.RecordException; import com.pcloud.settlementcenter.record.exceptions.RecordException;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -1918,4 +1920,79 @@ public class BookBizImpl implements BookBiz { ...@@ -1918,4 +1920,79 @@ public class BookBizImpl implements BookBiz {
} }
return bookIds; return bookIds;
} }
@ParamLog("平台端获取编辑书刊")
@Override
public PageBeanNew<BookDto> getAdviserBooks4Pcloud(String keyword, Long agentId, Long templetId, Long secondTempletId, String typeCode, Integer currentPage, Integer numPerPage) {
Map<String,Object> map=new HashMap<>();
map.put("keyword",keyword);
map.put("templetId",templetId);
map.put("secondTempletId",secondTempletId);
map.put("typeCode",typeCode);
if (agentId!=null){
List<Long> adviserIds = adviserConsr.getIdsByNameAndAgentId(agentId, null);
if (ListUtils.isEmpty(adviserIds)){
map.put("adviserIds",Arrays.asList(-1L));
}else {
map.put("adviserIds",adviserIds);
}
}
PageBeanNew<BookDto> page = bookDao.listPageNew(new PageParam(currentPage, numPerPage), map, "getAdviserBooks4Pcloud");
fillBookInfo(page.getRecordList());
return page;
}
@ParamLog("获取编辑书刊H5")
@Override
public PageBeanNew<BookDto> getAdviserBooks4H5(String keyword, Long templetId, Long secondTempletId, Integer currentPage, Integer numPerPage) {
Map<String,Object> map=new HashMap<>();
map.put("keyword",keyword);
map.put("templetId",templetId);
map.put("secondTempletId",secondTempletId);
PageBeanNew<BookDto> page = bookDao.listPageNew(new PageParam(currentPage, numPerPage), map, "getAdviserBooks4H5");
fillBookInfo(page.getRecordList());
return page;
}
@ParamLog("填充书刊信息")
private void fillBookInfo(List<BookDto> list) {
if (ListUtils.isEmpty(list)){
return;
}
//填充出版社信息
List<Long> adviserIds=list.stream().filter(s->s.getAdviserId()!=null).map(BookDto::getAdviserId).distinct().collect(Collectors.toList());
Map<Long, AdviserBaseInfoDto> infoDtoMap = adviserConsr.getAdviserId2AdviserInfoDtoMap(adviserIds);
List<Long> templetIds = new ArrayList<>();
list.forEach(BookDto -> {
if (Objects.nonNull(BookDto.getTempletId())) {
templetIds.add(BookDto.getTempletId());
}
if (Objects.nonNull(BookDto.getSecondTempletId())) {
templetIds.add(BookDto.getSecondTempletId());
}
});
Map<Long, AssistTempletDTO> assistTempletDTOMap = assistTempletConsr.mapByIds(templetIds);
list.forEach(bookDto -> {
Long secondTempletId = bookDto.getSecondTempletId();
Long templetId = bookDto.getTempletId();
if (secondTempletId!=null&&assistTempletDTOMap!=null) {
AssistTempletDTO templetDTO = assistTempletDTOMap.get(secondTempletId);
bookDto.setSecondTempletName(Optional.ofNullable(templetDTO).map(AssistTempletDTO::getTempletName).orElse(null));
}
if (templetId!=null&&assistTempletDTOMap!=null) {
AssistTempletDTO templetDTO = assistTempletDTOMap.get(templetId);
bookDto.setTempletName(Optional.ofNullable(templetDTO).map(AssistTempletDTO::getTempletName).orElse(null));
}
Long adviserId=bookDto.getAdviserId();
if (infoDtoMap!=null){
AdviserBaseInfoDto infoDto = infoDtoMap.get(adviserId);
if (infoDto!=null){
bookDto.setAgentId(infoDto.getAgentId());
bookDto.setAgentName(infoDto.getAgentName());
}
}
});
}
} }
...@@ -327,4 +327,6 @@ public interface BookDao extends BaseDao<Book> { ...@@ -327,4 +327,6 @@ public interface BookDao extends BaseDao<Book> {
* @return * @return
*/ */
List<Long> getBookIdsByBookName(String bookName); List<Long> getBookIdsByBookName(String bookName);
BookDto getAdviserBookByName(String bookName);
} }
package com.pcloud.book.book.dao;
import com.pcloud.book.book.entity.HotBook;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
public interface HotBookDao extends BaseDao<HotBook> {
Integer getMaxSeqNum();
void updateSeqNum(Long id, Integer seqNum);
List<HotBook> getHotBookList();
}
package com.pcloud.book.book.dao;
import com.pcloud.book.book.entity.SearchRecord;
import com.pcloud.common.core.dao.BaseDao;
import java.util.List;
public interface SearchRecordDao extends BaseDao<SearchRecord> {
void deleteByWxId(String wxId);
List<String> getRecent5WxIds(Long bookId);
}
...@@ -321,4 +321,11 @@ public class BookDaoImpl extends BaseDaoImpl<Book> implements BookDao { ...@@ -321,4 +321,11 @@ public class BookDaoImpl extends BaseDaoImpl<Book> implements BookDao {
paramMap.put("bookName", bookName); paramMap.put("bookName", bookName);
return super.getSqlSession().selectList(getStatement("getBookIdsByBookName"),paramMap); return super.getSqlSession().selectList(getStatement("getBookIdsByBookName"),paramMap);
} }
@Override
public BookDto getAdviserBookByName(String bookName) {
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("bookName", bookName);
return super.getSqlSession().selectOne(getStatement("getAdviserBookByName"),paramMap);
}
} }
package com.pcloud.book.book.dao.impl;
import com.pcloud.book.book.dao.HotBookDao;
import com.pcloud.book.book.entity.HotBook;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component("hotBookDao")
public class HotBookDaoImpl extends BaseDaoImpl<HotBook> implements HotBookDao {
@Override
public Integer getMaxSeqNum() {
return super.getSqlSession().selectOne(super.getStatement("getMaxSeqNum"));
}
@Override
public void updateSeqNum(Long id, Integer seqNum) {
Map<String,Object> map=new HashMap<>();
map.put("id",id);
map.put("seqNum",seqNum);
super.getSqlSession().update(super.getStatement("updateSeqNum"),map);
}
@Override
public List<HotBook> getHotBookList() {
return super.getSqlSession().selectList(super.getStatement("getHotBookList"));
}
}
package com.pcloud.book.book.dao.impl;
import com.pcloud.book.book.dao.SearchRecordDao;
import com.pcloud.book.book.entity.SearchRecord;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.List;
@Component("searchRecordDao")
public class SearchRecordDaoImpl extends BaseDaoImpl<SearchRecord> implements SearchRecordDao {
@Override
public void deleteByWxId(String wxId) {
super.getSqlSession().delete(super.getStatement("deleteByWxId"),wxId);
}
@Override
public List<String> getRecent5WxIds(Long bookId) {
return super.getSqlSession().selectList(super.getStatement("getRecent5WxIds"),bookId);
}
}
package com.pcloud.book.book.entity;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("热门书")
public class HotBook extends BaseEntity {
@ApiModelProperty("名称")
private Long bookId;
@ApiModelProperty("书名")
private String bookName;
@ApiModelProperty("排序值")
private Integer seqNum;
@ApiModelProperty("编辑id")
private Long adviserId;
@ApiModelProperty("出版社id")
private Long agentId;
@ApiModelProperty("出版社名称")
private String agentName;
@ApiModelProperty("搜索次数")
private Integer searchCount;
}
package com.pcloud.book.book.entity;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("搜索记录")
public class SearchRecord extends BaseEntity {
@ApiModelProperty("搜索内容")
private String content;
@ApiModelProperty("书籍id")
private Long bookId;
@ApiModelProperty("书名")
private String bookName;
@ApiModelProperty("出版社id")
private Long agentId;
@ApiModelProperty("出版社名称")
private String agentName;
@ApiModelProperty("用户wxId")
private String wxId;
@ApiModelProperty("头像")
private String headUrl;
@ApiModelProperty("昵称")
private String nickName;
@ApiModelProperty("性别")
private Integer sex;
@ApiModelProperty("热门关键词id")
private Long hotBookId;
}
...@@ -681,4 +681,27 @@ public interface BookFacade { ...@@ -681,4 +681,27 @@ public interface BookFacade {
@RequestParam(value = "currentPage", required = false) Integer currentPage, @RequestParam(value = "currentPage", required = false) Integer currentPage,
@RequestParam(value = "numPerPage", required = false) Integer numPerPage) @RequestParam(value = "numPerPage", required = false) Integer numPerPage)
throws BizException, PermissionException; throws BizException, PermissionException;
@ApiOperation("平台端获取书刊列表")
@GetMapping("getAdviserBooks4Pcloud")
ResponseDto<?> getAdviserBooks4Pcloud(
@RequestHeader("token") String token,
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "agentId", required = false) Long agentId,
@RequestParam(value = "templetId", required = false) Long templetId,
@RequestParam(value = "secondTempletId", required = false) Long secondTempletId,
@RequestParam(value = "typeCode", required = false) String typeCode,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage
) throws BizException, PermissionException;
@ApiOperation("获取书刊列表H5")
@GetMapping("getAdviserBooks4H5")
ResponseDto<?> getAdviserBooks4H5(
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "templetId", required = false) Long templetId,
@RequestParam(value = "secondTempletId", required = false) Long secondTempletId,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage
) throws BizException, PermissionException;
} }
package com.pcloud.book.book.facade;
import com.pcloud.book.book.entity.HotBook;
import com.pcloud.book.book.entity.SearchRecord;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(value = "pcloud-service-book", qualifier = "searchFacadeCloud", path = "search")
@Api("书籍搜索")
public interface SearchFacade {
@ApiOperation("创建热门书")
@PostMapping("createHotBook")
ResponseDto<?> createHotBook(
@RequestHeader("token") String token,
@RequestBody HotBook hotBook
) throws PermissionException;
@ApiOperation("删除热门书")
@GetMapping("deleteHotBook")
ResponseDto<?> deleteHotBook(
@RequestHeader("token") String token,
@RequestParam("id") Long id
) throws PermissionException;
@ApiOperation("获取热门书PC")
@GetMapping("getHotBookList4PC")
ResponseDto<?> getHotBookList4PC(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException;
@ApiOperation("获取热门书H5")
@GetMapping("getHotBookList4H5")
ResponseDto<?> getHotBookList4H5(
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException;
@ApiOperation("修改热门书排序值")
@PostMapping("updateHotBookSeqNum")
ResponseDto<?> updateHotBookSeqNum(
@RequestHeader("token") String token,
@RequestBody HotBook hotBook
) throws PermissionException;
@ApiOperation("创建搜索记录H5")
@PostMapping("createSearchRecord4H5")
ResponseDto<?> createSearchRecord4H5(
@RequestBody SearchRecord searchRecord
) throws PermissionException;
@ApiOperation("获取热门搜索列表")
@GetMapping("getSearchList")
ResponseDto<?> getSearchList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam(value = "content" ,required = false) @ApiParam("内容") String content,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException;
@ApiOperation("导出热门搜索列表")
@GetMapping("exportSearchList")
ResponseDto<?> exportSearchList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam(value = "content" ,required = false) @ApiParam("内容") String content
) throws BizException, PermissionException;
@ApiOperation("获取某个热门搜索列表")
@GetMapping("getSearchRecordList")
ResponseDto<?> getSearchRecordList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("content" ) @ApiParam("内容") String content,
@RequestParam(value = "bookId", required = false) @ApiParam("书id") Long bookId,
@RequestParam(value = "agentId", required = false) @ApiParam("出版社id") Long agentId,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException;
@ApiOperation("导出某个热门搜索列表")
@GetMapping("exportSearchRecordList")
ResponseDto<?> exportSearchRecordList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("content" ) @ApiParam("内容") String content,
@RequestParam(value = "bookId", required = false) @ApiParam("书id") Long bookId,
@RequestParam(value = "agentId", required = false) @ApiParam("出版社id") Long agentId
) throws BizException, PermissionException;
@ApiOperation("获取用户最近搜索列表H5")
@GetMapping("getUserSearchList4H5")
ResponseDto<?> getUserSearchList4H5(
@RequestParam("wxId" ) @ApiParam("用户id") String wxId,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException;
@ApiOperation("删除用户搜索记录H5")
@GetMapping("deleteUserSearchList4H5")
ResponseDto<?> deleteUserSearchList4H5(
@RequestParam("wxId" ) @ApiParam("用户id") String wxId
) throws BizException, PermissionException;
@ApiOperation("获取搜索书籍的用户H5")
@GetMapping("getBookSearchUserList4H5")
ResponseDto<?> getBookSearchUserList4H5(
@RequestParam("bookId" ) @ApiParam("书id") Long bookId
) throws BizException, PermissionException;
}
...@@ -855,6 +855,40 @@ public class BookFacadeImpl implements BookFacade { ...@@ -855,6 +855,40 @@ public class BookFacadeImpl implements BookFacade {
return new ResponseDto<>(null == pageBean ? new PageBeanNew<>() : pageBean); return new ResponseDto<>(null == pageBean ? new PageBeanNew<>() : pageBean);
} }
@GetMapping("getAdviserBooks4Pcloud")
@Override
public ResponseDto<?> getAdviserBooks4Pcloud(
@RequestHeader("token") String token,
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "agentId", required = false) Long agentId,
@RequestParam(value = "templetId", required = false) Long templetId,
@RequestParam(value = "secondTempletId", required = false) Long secondTempletId,
@RequestParam(value = "typeCode", required = false) String typeCode,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage
) throws BizException, PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) {
throw BookBizException.PAGE_PARAM_DELETION;
}
return new ResponseDto<>(bookBiz.getAdviserBooks4Pcloud(keyword,agentId,templetId,secondTempletId,typeCode,currentPage,numPerPage));
}
@GetMapping("getAdviserBooks4H5")
@Override
public ResponseDto<?> getAdviserBooks4H5(
@RequestParam(value = "keyword", required = false) String keyword,
@RequestParam(value = "templetId", required = false) Long templetId,
@RequestParam(value = "secondTempletId", required = false) Long secondTempletId,
@RequestParam(value = "currentPage") Integer currentPage,
@RequestParam(value = "numPerPage") Integer numPerPage
) throws BizException, PermissionException {
if (currentPage == null || numPerPage == null || currentPage < 0 || numPerPage < 0) {
throw BookBizException.PAGE_PARAM_DELETION;
}
return new ResponseDto<>(bookBiz.getAdviserBooks4H5(keyword,templetId,secondTempletId,currentPage,numPerPage));
}
@GetMapping("getBookLabels") @GetMapping("getBookLabels")
@Override @Override
public ResponseDto<?> getBookLabels( public ResponseDto<?> getBookLabels(
......
package com.pcloud.book.book.facade.impl;
import com.pcloud.book.book.biz.SearchBiz;
import com.pcloud.book.book.entity.HotBook;
import com.pcloud.book.book.entity.SearchRecord;
import com.pcloud.book.book.facade.SearchFacade;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.SessionUtil;
import com.pcloud.wechatgroup.message.enums.IsSystem;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@Slf4j
@RestController("searchFacade")
@RequestMapping("search")
public class SearchFacadeImpl implements SearchFacade {
@Autowired
private SearchBiz searchBiz;
@ApiOperation("创建热门书")
@PostMapping("createHotBook")
@Override
public ResponseDto<?> createHotBook(
@RequestHeader("token") String token,
@RequestBody HotBook hotBook
) throws PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
searchBiz.createHotBook(hotBook);
return new ResponseDto<>();
}
@ApiOperation("删除热门书")
@GetMapping("deleteHotBook")
@Override
public ResponseDto<?> deleteHotBook(
@RequestHeader("token") String token,
@RequestParam("id") Long id
) throws PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
searchBiz.deleteHotBook(id);
return new ResponseDto<>();
}
@ApiOperation("获取热门书PC")
@GetMapping("getHotBookList4PC")
@Override
public ResponseDto<?> getHotBookList4PC(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
return new ResponseDto<>(searchBiz.getHotBookList(currentPage,numPerPage));
}
@ApiOperation("获取热门书H5")
@GetMapping("getHotBookList4H5")
@Override
public ResponseDto<?> getHotBookList4H5(
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException {
return new ResponseDto<>(searchBiz.getHotBookList(currentPage,numPerPage));
}
@ApiOperation("修改热门书排序值")
@PostMapping("updateHotBookSeqNum")
@Override
public ResponseDto<?> updateHotBookSeqNum(
@RequestHeader("token") String token,
@RequestBody HotBook hotBook
) throws PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
searchBiz.updateHotBookSeqNum(hotBook);
return new ResponseDto<>();
}
@ApiOperation("创建搜索记录H5")
@PostMapping("createSearchRecord4H5")
@Override
public ResponseDto<?> createSearchRecord4H5(
@RequestBody SearchRecord searchRecord
) throws PermissionException {
searchBiz.createSearchRecord4H5(searchRecord);
return new ResponseDto<>();
}
@ApiOperation("获取热门搜索列表")
@GetMapping("getSearchList")
@Override
public ResponseDto<?> getSearchList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam(value = "content" ,required = false) @ApiParam("内容") String content,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
return new ResponseDto<>(searchBiz.getSearchList(content,currentPage,numPerPage));
}
@ApiOperation("导出热门搜索列表")
@GetMapping("exportSearchList")
@Override
public ResponseDto<?> exportSearchList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam(value = "content" ,required = false) @ApiParam("内容") String content
) throws BizException, PermissionException {
String systemCode = (String) SessionUtil.getVlaue(token, SessionUtil.SYSTEM_CODE);
if (!SystemCode.pcloud.code.equalsIgnoreCase(systemCode)) {
throw new PermissionException(PermissionException.PERMISSION_NOT_FOUND);
}
Map<String,Object> map = SessionUtil.getToken4Redis(token);
String isSystem = (String)map.get(SessionUtil.IS_SYSTEM);
Long partyId = (Long) map.get(SessionUtil.PARTY_ID);
if (IsSystem.NOT_SYSTEM.code.equals(isSystem)){
partyId = (Long) map.get(SessionUtil.MEMBER_ID);
}
searchBiz.exportSearchList(systemCode,partyId,content);
return new ResponseDto<>();
}
@ApiOperation("获取某个热门搜索列表")
@GetMapping("getSearchRecordList")
@Override
public ResponseDto<?> getSearchRecordList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("content" ) @ApiParam("内容") String content,
@RequestParam(value = "bookId", required = false) @ApiParam("书id") Long bookId,
@RequestParam(value = "agentId", required = false) @ApiParam("出版社id") Long agentId,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException {
SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
return new ResponseDto<>(searchBiz.getSearchRecordList(content,bookId,agentId,currentPage,numPerPage));
}
@ApiOperation("导出某个热门搜索列表")
@GetMapping("exportSearchRecordList")
@Override
public ResponseDto<?> exportSearchRecordList(
@RequestHeader("token") @ApiParam("token信息") String token,
@RequestParam("content" ) @ApiParam("内容") String content,
@RequestParam(value = "bookId", required = false) @ApiParam("书id") Long bookId,
@RequestParam(value = "agentId", required = false) @ApiParam("出版社id") Long agentId
) throws BizException, PermissionException {
String systemCode = (String) SessionUtil.getVlaue(token, SessionUtil.SYSTEM_CODE);
if (!SystemCode.pcloud.code.equalsIgnoreCase(systemCode)) {
throw new PermissionException(PermissionException.PERMISSION_NOT_FOUND);
}
Map<String,Object> map = SessionUtil.getToken4Redis(token);
String isSystem = (String)map.get(SessionUtil.IS_SYSTEM);
Long partyId = (Long) map.get(SessionUtil.PARTY_ID);
if (IsSystem.NOT_SYSTEM.code.equals(isSystem)){
partyId = (Long) map.get(SessionUtil.MEMBER_ID);
}
searchBiz.exportSearchRecordList(systemCode,partyId,content,bookId,agentId);
return new ResponseDto<>();
}
@ApiOperation("获取用户最近搜索列表H5")
@GetMapping("getUserSearchList4H5")
@Override
public ResponseDto<?> getUserSearchList4H5(
@RequestParam("wxId" ) @ApiParam("用户id") String wxId,
@RequestParam("currentPage") @ApiParam("当前页") Integer currentPage,
@RequestParam("numPerPage") @ApiParam("每页条数") Integer numPerPage
) throws BizException, PermissionException {
return new ResponseDto<>(searchBiz.getUserSearchList4H5(wxId, currentPage,numPerPage));
}
@ApiOperation("删除用户搜索记录H5")
@GetMapping("deleteUserSearchList4H5")
@Override
public ResponseDto<?> deleteUserSearchList4H5(
@RequestParam("wxId" ) @ApiParam("用户id") String wxId
) throws BizException, PermissionException {
searchBiz.deleteUserSearchList4H5(wxId);
return new ResponseDto<>();
}
@ApiOperation("获取搜索书籍的用户头像H5")
@GetMapping("getBookSearchUserList4H5")
@Override
public ResponseDto<?> getBookSearchUserList4H5(
@RequestParam("bookId" ) @ApiParam("书id") Long bookId
) throws BizException, PermissionException {
return new ResponseDto<>(searchBiz.getBookSearchUserList4H5(bookId));
}
}
package com.pcloud.book.book.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
@ApiModel("搜索书名VO")
public class SearchBookVO {
@ApiModelProperty("内容")
private String content;
@ApiModelProperty("书id")
private Long bookId;
@ApiModelProperty("书名")
private String bookName;
@ApiModelProperty("出版社id")
private Long agentId;
@ApiModelProperty("出版社名称")
private String agentName;
@ApiModelProperty("搜索次数")
private Integer searchCount;
}
...@@ -7,11 +7,15 @@ import com.pcloud.appcenter.app.dto.AppDto; ...@@ -7,11 +7,15 @@ import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookKeywordWarehouseBiz; import com.pcloud.book.book.biz.BookKeywordWarehouseBiz;
import com.pcloud.book.book.dao.BookDao; import com.pcloud.book.book.dao.BookDao;
import com.pcloud.book.book.dao.SearchRecordDao;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.entity.SearchRecord;
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;
import com.pcloud.book.consumer.content.ResourceConsr; import com.pcloud.book.consumer.content.ResourceConsr;
import com.pcloud.book.consumer.live.LiveCons; import com.pcloud.book.consumer.live.LiveCons;
import com.pcloud.book.consumer.resource.ProductConsr; import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.user.ChannelConsr; import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr; import com.pcloud.book.consumer.wechatgroup.WechatGroupConsr;
import com.pcloud.book.group.biz.BookGroupAppBiz; import com.pcloud.book.group.biz.BookGroupAppBiz;
...@@ -233,6 +237,10 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -233,6 +237,10 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
private PcloudRobotBiz pcloudRobotBiz; private PcloudRobotBiz pcloudRobotBiz;
@Autowired @Autowired
private PcloudRobotClassifyDao pcloudRobotClassifyDao; private PcloudRobotClassifyDao pcloudRobotClassifyDao;
@Autowired
private SearchRecordDao searchRecordDao;
@Autowired
private AdviserConsr adviserConsr;
/** /**
* 字符串切割长度 * 字符串切割长度
*/ */
...@@ -573,10 +581,13 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -573,10 +581,13 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
pcloudRobotBiz.handlePcloudTdReply(sendTextDTO); pcloudRobotBiz.handlePcloudTdReply(sendTextDTO);
return; return;
} }
// 小睿对话索要出版社信息 // 读者发送书名
boolean _continue = replySelfKeywordTemplate(sendTextDTO); if (!StringUtil.isEmpty(sendTextDTO.getTextContent())
// 判断是否需要继续走下去 &&sendTextDTO.getTextContent().length()>1
if(!_continue) { return; } &&sendTextDTO.getTextContent().startsWith("#")){
sendSearchBook(sendTextDTO);
return;
}
sendPcloudKeyword(sendTextDTO,pcloudRobot); sendPcloudKeyword(sendTextDTO,pcloudRobot);
return; return;
} }
...@@ -591,6 +602,49 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -591,6 +602,49 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
} }
} }
@ParamLog("发送搜索书籍")
private void sendSearchBook(SendTextDTO sendTextDTO) {
String bookName=sendTextDTO.getTextContent().substring(1);
BookDto bookDto=bookDao.getAdviserBookByName(bookName);
String userWxId = sendTextDTO.getWechatUserId();
String ip = sendTextDTO.getIp();
Integer code = sendTextDTO.getCode();
String robotId = sendTextDTO.getWxId();
if (bookDto==null){
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent("如果这里没有你需要的,小睿深表歉意,小睿还在不断丰富阅读内容,提升阅读体验,一旦发现好东西就会快马加鞭分享给你的!");
sendTextMessageVO.setAltId(robotId);
sendTextMessageVO.setWxGroupId(userWxId);
sendTextMessageVO.setIp(ip);
sendTextMessageVO.setCode(code);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
String h5link = wechatGroupLinkPrefix +"/dialog/search?wxId=" + userWxId +"&robotWxId=" + robotId;
String linkUrl = UrlUtils.getShortUrl4Own(h5link);
linkUrl = "★" + linkUrl + "★";
sendTextMessageVO.setContent("详情点击进入:"+linkUrl);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}else {
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setAltId(robotId);
sendTextMessageVO.setWxGroupId(userWxId);
sendTextMessageVO.setIp(ip);
sendTextMessageVO.setCode(code);
String h5link = wechatGroupLinkPrefix +"/dialog/resource?bookId="+bookDto.getBookId()+"&adviserId="+bookDto.getAdviserId()+"&channelId="+bookDto.getChannelId()+"&wxId=" + userWxId +"&robotWxId=" + robotId;
String linkUrl = UrlUtils.getShortUrl4Own(h5link);
linkUrl = "★" + linkUrl + "★";
sendTextMessageVO.setContent("详情点击进入:"+linkUrl);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
//插入触发记录
SearchRecord searchRecord=new SearchRecord();
searchRecord.setContent(bookName);
searchRecord.setBookId(bookDto.getBookId());
searchRecord.setWxId(userWxId);
Long agentId=adviserConsr.getAgentIdByAdviser(bookDto.getAdviserId());
searchRecord.setAgentId(agentId);
searchRecordDao.insert(searchRecord);
}
}
@ParamLog("小睿根据书名推送匹配的资源") @ParamLog("小睿根据书名推送匹配的资源")
private boolean replySelfKeywordTemplate(SendTextDTO sendTextDTO) { private boolean replySelfKeywordTemplate(SendTextDTO sendTextDTO) {
try { try {
......
...@@ -2023,4 +2023,87 @@ ...@@ -2023,4 +2023,87 @@
b.BOOK_NAME LIKE CONCAT('%',#{bookName},'%') b.BOOK_NAME LIKE CONCAT('%',#{bookName},'%')
LIMIT 0,50 LIMIT 0,50
</select> </select>
<select id="getAdviserBooks4Pcloud" resultMap="bookMap" parameterType="map">
SELECT
A.BOOK_ID, A.CHANNEL_ID, A.ADVISER_ID, A.IS_MAIN_EDITOR, T.TYPE_CODE, T.TYPE_NAME, B.ISBN, B.BOOK_NAME, B.REMARK,
B.AUTHOR, B.PUBLISH, B.PUBLISH_DATE, B.COVER_IMG, B.ORIGIN_NAME, B.BOOK_PRICE, B.ISSN, B.BOOK_NUM, B.SERIAL_NUMBER,
A.TEMPLET_ID,A.SECOND_TEMPLET_ID,A.LAST_MODIFIED_DATE LAST_MODIFIED_DATE,A.BOOK_ADVISER_ID,CONCAT('BK',A.BOOK_ID) uniqueNumber
FROM
BOOK_ADVISER A
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID AND A.IS_DELETE = 0 AND B.IS_DELETE = 0
LEFT JOIN BOOK_TYPE T ON B.TYPE_CODE = T.TYPE_CODE
WHERE
1=1
AND A.IS_MAIN_EDITOR = 1
<if test="typeCode!=null">
AND
B.TYPE_CODE = #{typeCode}
</if>
<if test="keyword != null">
AND (B.BOOK_NAME LIKE CONCAT('%', #{keyword}, '%')
OR B.ISBN LIKE CONCAT(#{keyword},'%')
OR CONCAT('BK',A.BOOK_ID) = #{keyword})
</if>
<if test="templetId != null">
AND
A.TEMPLET_ID = #{templetId}
</if>
<if test="secondTempletId!=null ">
AND
A.SECOND_TEMPLET_ID=#{secondTempletId}
</if>
<if test="adviserIds!=null and adviserIds.size()>0">
AND
A.ADVISER_ID in
<foreach collection="adviserIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
GROUP BY A.BOOK_ID, A.CHANNEL_ID
ORDER BY
A.LAST_MODIFIED_DATE DESC
</select>
<select id="getAdviserBooks4H5" resultMap="bookMap" parameterType="map">
SELECT
A.BOOK_ID, A.CHANNEL_ID, A.ADVISER_ID, A.IS_MAIN_EDITOR, T.TYPE_CODE, T.TYPE_NAME, B.ISBN, B.BOOK_NAME, B.REMARK,
B.AUTHOR, B.PUBLISH, B.PUBLISH_DATE, B.COVER_IMG, B.ORIGIN_NAME, B.BOOK_PRICE, B.ISSN, B.BOOK_NUM, B.SERIAL_NUMBER,
A.TEMPLET_ID,A.SECOND_TEMPLET_ID,A.LAST_MODIFIED_DATE LAST_MODIFIED_DATE,A.BOOK_ADVISER_ID,CONCAT('BK',A.BOOK_ID) uniqueNumber
FROM
BOOK_ADVISER A
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID AND A.IS_DELETE = 0 AND B.IS_DELETE = 0
LEFT JOIN BOOK_TYPE T ON B.TYPE_CODE = T.TYPE_CODE
WHERE
1=1
AND A.IS_MAIN_EDITOR = 1
<if test="keyword != null">
AND (B.BOOK_NAME LIKE CONCAT('%', #{keyword}, '%'))
</if>
<if test="templetId != null">
AND
A.TEMPLET_ID = #{templetId}
</if>
<if test="secondTempletId!=null ">
AND
A.SECOND_TEMPLET_ID=#{secondTempletId}
</if>
GROUP BY A.BOOK_ID, A.CHANNEL_ID
ORDER BY
A.LAST_MODIFIED_DATE DESC
</select>
<select id="getAdviserBookByName" parameterType="map" resultMap="bookMap">
SELECT
A.BOOK_ID, A.CHANNEL_ID, A.ADVISER_ID, A.IS_MAIN_EDITOR, T.TYPE_CODE, T.TYPE_NAME, B.ISBN, B.BOOK_NAME, B.REMARK,
B.AUTHOR, B.PUBLISH, B.PUBLISH_DATE, B.COVER_IMG, B.ORIGIN_NAME, B.BOOK_PRICE, B.ISSN, B.BOOK_NUM, B.SERIAL_NUMBER,
A.TEMPLET_ID,A.SECOND_TEMPLET_ID,A.LAST_MODIFIED_DATE LAST_MODIFIED_DATE,A.BOOK_ADVISER_ID,CONCAT('BK',A.BOOK_ID) uniqueNumber
FROM
BOOK_ADVISER A
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID AND A.IS_DELETE = 0 AND B.IS_DELETE = 0
LEFT JOIN BOOK_TYPE T ON B.TYPE_CODE = T.TYPE_CODE
WHERE B.BOOK_NAME=#{bookName}
AND A.IS_MAIN_EDITOR = 1
limit 1
</select>
</mapper> </mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.book.dao.impl.HotBookDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.book.entity.HotBook">
<id column="id" property="id" jdbcType="BIGINT" />
<result column="book_id" property="bookId" jdbcType="BIGINT" />
<result column="seq_num" property="seqNum" jdbcType="INTEGER" />
<result column="create_time" property="createTime" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List">
id,book_id,seq_num,create_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.book.entity.HotBook" useGeneratedKeys="true"
keyProperty="id">
insert into hot_book
<trim prefix="(" suffix=")" suffixOverrides=",">
book_id,
seq_num,
create_time
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{bookId,jdbcType=BIGINT},
#{seqNum,jdbcType=INTEGER},
NOW()
</trim>
</insert>
<select id="getMaxSeqNum" resultType="integer">
select ifnull(max(seq_num),0) from hot_book
</select>
<delete id="deleteById" parameterType="long">
delete from hot_book
where id=#{id}
</delete>
<select id="getHotBookList" parameterType="map" resultType="com.pcloud.book.book.entity.HotBook">
select
t1.id,
t1.book_id bookId,
t1.seq_num seqNum,
t1.create_time createTime,
t2.book_name bookName,
t3.adviser_id adviserId,
count(t4.id) searchCount
from hot_book t1
left join search_record t4
on t1.id=t4.hot_book_id
left join book t2
on t1.book_id=t2.book_id
left join book_adviser t3
on t1.book_id=t3.book_id
group by t1.id
order by seq_num
</select>
<update id="updateSeqNum" parameterType="map" >
update hot_book
set seq_num=#{seqNum}
where id=#{id}
</update>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.book.dao.impl.SearchRecordDaoImpl">
<resultMap id="BaseResultMap" type="com.pcloud.book.book.entity.SearchRecord">
<id column="id" property="id" jdbcType="BIGINT" />
<result column="content" property="content" jdbcType="VARCHAR" />
<result column="book_id" property="bookId" jdbcType="BIGINT" />
<result column="agent_id" property="agentId" jdbcType="BIGINT" />
<result column="wx_id" property="wxId" jdbcType="VARCHAR" />
<result column="hot_book_id" property="hotBookId" jdbcType="BIGINT" />
<result column="create_time" property="createTime" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List">
id,content,book_id,agent_id,wx_id,hot_book_id,create_time
</sql>
<insert id="insert" parameterType="com.pcloud.book.book.entity.SearchRecord" useGeneratedKeys="true"
keyProperty="id">
insert into search_record
<trim prefix="(" suffix=")" suffixOverrides=",">
content,
book_id,
agent_id,
wx_id,
hot_book_id,
create_time
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{content,jdbcType=VARCHAR},
#{bookId,jdbcType=BIGINT},
#{agentId,jdbcType=BIGINT},
#{wxId,jdbcType=VARCHAR},
#{hotBookId,jdbcType=BIGINT},
NOW()
</trim>
</insert>
<select id="getSearchList" parameterType="map" resultType="com.pcloud.book.book.vo.SearchBookVO">
select
content,
book_id bookId,
agent_id agentId,
count(1) searchCount
from search_record
where 1=1
<if test="content!=null">
and content like CONCAT('%', #{content}, '%')
</if>
group by
content,book_id,agent_id
</select>
<select id="getSearchRecordList" parameterType="map" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from search_record
where content=#{content}
<if test="bookId!=null">
and book_id=#{bookId}
</if>
<if test="agentId!=null">
and agent_id=#{agentId}
</if>
</select>
<select id="getUserSearchList4H5" parameterType="map" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from search_record
where wx_id=#{wxId}
group by content
order by create_time desc
</select>
<delete id="deleteByWxId" parameterType="string" >
delete from search_record
where wx_id=#{wxId}
</delete>
<select id="getRecent5WxIds" parameterType="long" resultType="string">
select distinct wx_id
from search_record
where book_id=#{bookId}
limit 5
</select>
</mapper>
\ No newline at end of file
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