[feat]增加首页视频、商品和用户搜索接口v1.0
This commit is contained in:
parent
f27e96ffed
commit
214d1cf82e
@ -1,21 +1,38 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.content.domain.bo.ArticleBO;
|
||||
import com.wzj.soopin.content.domain.bo.IndexListBO;
|
||||
import com.wzj.soopin.content.domain.bo.SearchBO;
|
||||
import com.wzj.soopin.content.domain.vo.ArticleVO;
|
||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||
import com.wzj.soopin.content.enums.SearchTypeEnum;
|
||||
import com.wzj.soopin.content.service.VlogService;
|
||||
import com.wzj.soopin.goods.domain.bo.ProductBo;
|
||||
import com.wzj.soopin.goods.domain.vo.ProductVO;
|
||||
import com.wzj.soopin.goods.service.ProductService;
|
||||
import com.wzj.soopin.goods.service.impl.ProductServiceImpl;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBO;
|
||||
import com.wzj.soopin.member.service.IMemberService;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.service.ISysTenantService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/app/common/search")
|
||||
@Tag(name = "公共检索")
|
||||
@ -29,6 +46,9 @@ public class AppSearchController {
|
||||
|
||||
private final IMemberService memberService;
|
||||
|
||||
private final VlogService vlogService;
|
||||
|
||||
|
||||
@Tag(name = "检索")
|
||||
@PostMapping("/search")
|
||||
public R<List<ArticleVO>> search(@RequestBody ArticleBO bo,@RequestBody Page<ArticleBO> page) {
|
||||
@ -40,4 +60,36 @@ public class AppSearchController {
|
||||
// return R.ok(articleList);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Tag(name = "视频、商品和用户检索")
|
||||
@PostMapping("/searchApp")
|
||||
public R<IPage<?>> searchApp(@RequestBody SearchBO searchBO, @RequestBody Page page) {
|
||||
try {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
searchBO.setUserId(String.valueOf(loginUser.getUserId()));
|
||||
} catch (Exception e) {
|
||||
log.error("用户没登陆", e);
|
||||
}
|
||||
|
||||
IPage<?> pages = null;
|
||||
// 视频检索信息
|
||||
if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.VIDEO.type.intValue() == searchBO.getType().intValue())) {
|
||||
pages = vlogService.getIndexSearchVlogList(searchBO, page);
|
||||
// 商品检索信息
|
||||
} else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.PRODUCT.type.intValue() == searchBO.getType().intValue())) {
|
||||
ProductBo productBo = new ProductBo();
|
||||
productBo.setNameLike(searchBO.getTitle());
|
||||
pages = productService.getProductPageList(productBo, page);
|
||||
// 用户检索信息
|
||||
} else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.MEMBER.type.intValue() == searchBO.getType().intValue())) {
|
||||
MemberBO memberBO = new MemberBO();
|
||||
memberBO.setNickname(searchBO.getTitle());
|
||||
pages = memberService.getMemberPageList(memberBO, page);
|
||||
}
|
||||
return R.ok(pages);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,46 @@
|
||||
package com.wzj.soopin.content.domain.bo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 搜索DO
|
||||
*
|
||||
* @author haolj
|
||||
* @since 2025/08/29
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "视频、商品和用户检索查询对象")
|
||||
public class SearchBO {
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
@Schema(description = "类型:1-视频;2-商品;3-用户")
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
@Schema(description = "标题")
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
@Schema(description = "用户ID")
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* 城市编码
|
||||
*/
|
||||
@Schema(description = "城市编码")
|
||||
private String cityCode;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@Schema(description = "状态")
|
||||
private String status;
|
||||
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package com.wzj.soopin.content.enums;
|
||||
|
||||
/**
|
||||
* 首页搜索内容类型
|
||||
*/
|
||||
public enum SearchTypeEnum {
|
||||
VIDEO(1, "视频"),
|
||||
PRODUCT(2, "商品"),
|
||||
MEMBER(3, "用户");
|
||||
|
||||
public final Integer type;
|
||||
public final String value;
|
||||
|
||||
SearchTypeEnum(Integer type, String value) {
|
||||
this.type = type;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
@ -147,4 +147,9 @@ public interface VlogService {
|
||||
* @return 随机视频列表
|
||||
*/
|
||||
List<Map<String, Object>> getRandomVlogs(int limit);
|
||||
|
||||
/**
|
||||
* 首页搜索/搜索的vlog列表
|
||||
*/
|
||||
Page<IndexVlogVO> getIndexSearchVlogList(SearchBO bo, Page page);
|
||||
}
|
||||
|
@ -783,4 +783,50 @@ public class VlogServiceImpl extends BaseInfoProperties implements VlogService {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<IndexVlogVO> getIndexSearchVlogList(SearchBO bo, Page page) {
|
||||
String userId = bo.getUserId();
|
||||
int current = (int) page.getCurrent();
|
||||
int size = (int) page.getSize();
|
||||
Page<Vlog> pageParam = new Page<>(current, size);
|
||||
|
||||
LambdaQueryWrapper<Vlog> queryWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotBlank(bo.getTitle())) {
|
||||
queryWrapper.like(Vlog::getTitle, bo.getTitle());
|
||||
}
|
||||
if (StringUtils.isNotBlank(bo.getCityCode())) {
|
||||
queryWrapper.eq(Vlog::getCityCode, bo.getCityCode());
|
||||
}
|
||||
if (StringUtils.isNotBlank(bo.getStatus())) {
|
||||
queryWrapper.eq(Vlog::getStatus, bo.getStatus());
|
||||
}
|
||||
|
||||
Page<Vlog> vlogPage = vlogMapper.selectPage(pageParam, queryWrapper);
|
||||
List<Vlog> vlogList = vlogPage.getRecords();
|
||||
List<IndexVlogVO> voList = vlogList.stream().map(v -> {
|
||||
IndexVlogVO vo = MapstructUtils.convert(v, IndexVlogVO.class);
|
||||
if (StringUtils.isNotBlank(userId)) {
|
||||
vo.setDoIFollowVloger(fansService.queryDoIFollowVloger(userId, v.getMemberId()));
|
||||
vo.setDoILikeThisVlog(doILikeVlog(userId, v.getId()));
|
||||
}
|
||||
vo.setLikeCounts(getVlogBeLikedCounts(v.getId()));
|
||||
vo.setCommentsCounts(getVlogComment(v.getId()));
|
||||
MemberVO m =memberService.getMemberInfo(vo.getMemberId());
|
||||
if (m != null) {
|
||||
vo.setAvatar(m.getAvatar());
|
||||
vo.setNickname(m.getNickname());
|
||||
}
|
||||
return vo;
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
// 封装分页结果
|
||||
Page<IndexVlogVO> gridResult = new Page<IndexVlogVO>();
|
||||
gridResult.setRecords(voList); // 当前页数据列表
|
||||
gridResult.setCurrent(current); // 当前页码
|
||||
gridResult.setTotal(vlogPage.getTotal()); // 总记录数
|
||||
gridResult.setSize(vlogPage.getPages()); // 总页数
|
||||
|
||||
return gridResult;
|
||||
}
|
||||
}
|
||||
|
@ -18,4 +18,13 @@ public interface ProductService extends IService<Product> {
|
||||
*/
|
||||
IPage<ProductVO> getRecommendPage( Page<Product> page);
|
||||
|
||||
/**
|
||||
* 不带租户的获取商品信息
|
||||
*
|
||||
* @param query
|
||||
* @param page
|
||||
* @return
|
||||
*/
|
||||
IPage<ProductVO> getProductPageList(ProductBo query, Page<Product> page);
|
||||
|
||||
}
|
||||
|
@ -167,4 +167,17 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
|
||||
public IPage<ProductVO> getProduct(Page<Product> page, ProductBo query) {
|
||||
return TenantHelper.ignore(() -> productMapper.getProduct(page, query));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 不带租户的获取商品信息
|
||||
*
|
||||
* @param query
|
||||
* @param page
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public IPage<ProductVO> getProductPageList(ProductBo query, Page<Product> page) {
|
||||
return TenantHelper.ignore(() -> productMapper.getProduct(page, query));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user