day115-mall business-search service-search query parameter model + search return result model analysis and extraction

1. Look at the picture and think

Compare the page of Jingdong and the data model of our sku before, and then think about what our query conditions and query result entities should be encapsulated. 

2. Several parts of the query conditions

3. Physical packaging

The query condition package entity is as follows

package com.atguigu.gulimall.search.vo;

/**
 * @author rengang
 * @version 1.0
 * @date 2021/3/31 11:00
 */

import lombok.Data;

import java.util.List;

/**
 * 封装页面所有可能传递的查询条件
 */
@Data
public class SearchParam {

    private String keyWord;//页面传过来的全文匹配关键字

    private Long catelog3Id;//三级分类Id

    private String sort;//排序

    private Integer hasStock;//是否有货 0/1

    private String skuPrice;//价格区间 0-199/199-/-199

    private List<Long> brandId;//brandId=2&brandId=7

    private List<String> attrs;//属性 attrs=1_其他:安卓&attrs=2_黑色:绿色 1号属性为其它或者安卓 2号属性为 ..或者..

    private Integer pageNum;//页码
}

 The query result entity is as follows

package com.atguigu.gulimall.search.vo;

import com.atguigu.common.to.es.SkuEsModel;
import lombok.Data;

import java.util.List;

/**
 * @author rengang
 * @version 1.0
 * @date 2021/3/31 16:05
 */
@Data
public class SearchResult {

    //所有商品信息
    private List<SkuEsModel> products;

    //分页信息
    private Integer pageNo;//当前页码
    private Integer totalPages;//总页码
    private Integer total;//总记录数

    private List<CatalogVo> catalogs;
    private List<BrandVo> brands;
    private List<AttrVo> attrs;


    class CatalogVo{
        private Long catelogId;
        private String catelogName;
    }

    class BrandVo{
        private Long brandId;
        private String  brandName;
        private String brandImg;
    }

    class AttrVo{
        private Long attrId;
        private String attrName;
        private List<String> attrValues;
    }

}

4. Query the general code

Write a model first, and then implement the specific logic of the query

package com.atguigu.gulimall.search.service;

import com.atguigu.gulimall.search.vo.SearchParam;
import com.atguigu.gulimall.search.vo.SearchResult;

/**
 * @author rengang
 * @version 1.0
 * @date 2021/3/31 11:09
 */
public interface MallSearchService {
    SearchResult search(SearchParam searchParam);
}
package com.atguigu.gulimall.search.service.impl;

import com.atguigu.gulimall.search.service.MallSearchService;
import com.atguigu.gulimall.search.vo.SearchParam;
import com.atguigu.gulimall.search.vo.SearchResult;
import org.springframework.stereotype.Service;

/**
 * @author rengang
 * @version 1.0
 * @date 2021/3/31 11:09
 */
@Service
public class MallSearchServiceImpl implements MallSearchService {
    @Override
    public SearchResult search(SearchParam searchParam) {
        return null;
    }
}
package com.atguigu.gulimall.search.controller;

import com.atguigu.gulimall.search.service.MallSearchService;
import com.atguigu.gulimall.search.vo.SearchParam;
import com.atguigu.gulimall.search.vo.SearchResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @author rengang
 * @version 1.0
 * @date 2021/3/30 22:42
 */
@Controller
public class SearchController {

    @Autowired
    MallSearchService mallSearchService;

    @GetMapping("/list.html")
    public String listPage(SearchParam searchParam){
       SearchResult result =  mallSearchService.search(searchParam);

        return "list";
    }
}

 

Guess you like

Origin blog.csdn.net/JavaCoder_juejue/article/details/115353502