当前位置: 首页 > news >正文

医疗云网站建设网站需要多大数据库

医疗云网站建设,网站需要多大数据库,房子设计图,建一个网站容易吗目录 1 检索服务 1.1 搭建页面环境 1.1.1 引入依赖 1.1.2 将检索页面放到gulimall-search的src/main/resources/templates/目录下 1.1.3 调整搜索页面 1.1.4 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/ search/ 1.1.5 SwitchHosts配置域…目录 1 检索服务  1.1 搭建页面环境 1.1.1 引入依赖 1.1.2 将检索页面放到gulimall-search的src/main/resources/templates/目录下 1.1.3 调整搜索页面 1.1.4 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/ search/ 1.1.5 SwitchHosts配置域名转发 1.1.6 测试 1.1.7 nginx配置 1.1.8 网关配置 1.1.9 重启测试 1.2 调整页面跳转 1.2.1 引入spring-boot-devtools依赖 1.2.2 关闭thymeleaf缓存 1.2.3 修改页面能够跳转到商城首页 1.2.4 修改index.html文件名 1.3 检索查询参数模型分析抽取 1.3.1 检索条件分析 1.3.2 查询参数封装 1.4 检索返回结果模型分析抽取 1.5 检索DSL测试 1.5.1 DSL查询部分 1.5.1.1 查询部分DSL 1.5.1.2 查询部分排序分页高亮DSL 1.5.2 聚合部分 1.5.2.1 聚合时出现的问题Use doc values instead 1.5.2.1.1 报错原因 1.5.2.1.2 解决方案 1.5.2.2 聚合部分DSL 1.5.3 总的DSL查询聚合 1.6 SearchRequest构建 1.6.1 检索、排序、分页、高亮、聚合 1.6.1.1 controller层 1.6.1.2 service层 1.6.1.3 EsConstant.javaEs常量类 1.6.2 测试 1.7 SearchResponse分析封装 1.8 验证结果封装正确性 1.9 渲染检索页面【P184-192】 1.9.1 检索页面完整代码 1.9.2 检索服务后端相关代码 1.9.2.1 引入依赖 1.9.2.2 vo 1.9.2.3 controller 1.9.2.4 service 1.9.2.5 远程调用接口 1.9.3 远程服务相关接口 1.9.3.1 attrInfo接口 1.9.3.2 brandsInfo接口 1 检索服务  1.1 搭建页面环境 1. 引入依赖 2. 将页面复制到gulimall-search的src/main/resources/templates/目录下 3. 调整搜索页面1引入thymeleafxmlns:thhttp://www.thymeleaf.org2修改页面静态资源的引入加上/static/searcheg: 由link relstylesheet href./css/index.css改为link relstylesheet href/static/search/css/index.css 4. 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/search/ 5. SwitchHosts配置域名转发1以管理员身份运行SwitchHosts2让所有的search.gulimall.com可以定位到linux的nginx服务 6. 测试1浏览器访问http://localhost:120002浏览器访问http://search.gulimall.com/ 7. nginx配置 8. 网关配置 9. 测试 http://search.gulimall.com/1.1.1 引入依赖 !-- 模板引擎 thymeleaf -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId /dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdoptionaltrue/optional /dependency 1.1.2 将检索页面放到gulimall-search的src/main/resources/templates/目录下 1.1.3 调整搜索页面 引入thymeleaf修改引入静态资源的路径以/static/search开始。以下为了举例list.html完整代码见 1.9.1 检索页面完整代码 !DOCTYPE html html langen xmlns:thhttp://www.thymeleaf.org headmeta charsetUTF-8meta nameviewportcontentwidthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0meta http-equivX-UA-Compatible contentieedgelink relstylesheet href/static/search/css/index.csslink relstylesheet typetext/css href/static/search/font/iconfont.css!--script src/static/search/js/jquery-3.2.1.min.js/script--script src/static/search/js/jquery-1.12.4.js/scripttitleDocument/title /head ... 1.1.4 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/ search/ 1.1.5 SwitchHosts配置域名转发 (1以管理员身份运行SwitchHosts     (2让所有的search.gulimall.com可以定位到linux的nginx服务 1.1.6 测试 (1浏览器访问http://localhost:12000 (2浏览器访问http://search.gulimall.com/ 1.1.7 nginx配置 1修改gulimall.conf将 server_name 由 gulimall.com 改为 *.gulimall.com 2保存gulimall.conf并重启nginx。 # 进入/root/docker/nginx/conf/conf.d/ cd /root/docker/nginx/conf/conf.d/# 进入gulimall.conf修改server_name vi gulimall.conf# 重启nginx docker restart nginx# 查看nginx是否启动成功 docker ps -a 1.1.8 网关配置 - id: gulimall_host_routeuri: lb://gulimall-productpredicates:# 由以下的主机域名访问转发到商品服务- Hostgulimall.com- id: gulimall_search_routeuri: lb://gulimall-searchpredicates:# 由以下的主机域名访问转发到搜索服务- Hostsearch.gulimall.com 1.1.9 重启测试 http://search.gulimall.com/ 注意静态资源的路径是否正确有些图片可能缺失影响不大。 1.2 调整页面跳转 1.2.1 引入spring-boot-devtools依赖 前面已经引入。 1.2.2 关闭thymeleaf缓存 页面修改后同过CtrlShiftF9对html页面进行重新构建无需重启项目 spring:thymeleaf:cache: false 1.2.3 修改页面能够跳转到商城首页 效果要求点击搜索页面左上角的谷粒商城首页或谷粒商城都能跳转到商城首页。如下图  1. 修改页面代码跳转路径 http://gulimall.com 2. 测试 点击谷粒商城首页或谷粒商城 3. 解决商城首页显示问题 server_name gulimall.com *.gulimall.com; 相关命令 # 进入gulimall.conf修改server_name vi gulimall.conf# 重启nginx docker restart nginx 重启nginx访问 gulimall.com 1.2.4 修改index.html文件名 1. gulimall-search下的index.html重命名为list.html 原因:在首页点击搜索跳转的链接为list.html 2. 新增由/list.html能跳转到list.thml页面的方法gulimall-search/src/main/java/com/wen/gulimall/search/controller/SearchController.java Controller public class SearchController {GetMapping(/list.html)public String listPage(){return list;} }3. 将gulimall-product的index.html页面中的search()方法的调用由img标签放到a标签 4. 重启服务测试 1.3 检索查询参数模型分析抽取 1.3.1 检索条件分析 全文检索skuTitle-》keyword排序saleCount销量、hotScore热度分、skuPrice价格过滤hasStock、skuPrice区间、brandId、catalog3Id、attrs聚合attrs 完整查询参数 keyword小米sortsaleCount_desc/aschasStock0/1skuPrice400_1900brandId1catalog3Id1at trs1_3G:4G:5Gattrs2_骁龙845attrs4_高清屏 1.3.2 查询参数封装 gulimall-search/src/main/java/com/wen/gulimall/search/vo/SearchParam.java /*** author W* createDate 2023/7/17 16:10* description 封装页面所有可能传递过来的查询条件* catalog3Id255keyword小米sortsaleCount_aschasStock0/1bandId1bandId2*/ Data public class SearchParam {private String keyword; // 页面穿过来的全文匹配关键字private Long catalog3Id; // 三级分类的id/*** sortsaleCount_asc/desc* sortskuPrice_asc/desc* sorthotScore_asc/desc*/private String sort; //排序条件/*** 好多的过滤条件* hasStock0/1* skuPrice1_500/_500/500_* bandId1* attrs2_5寸6寸*/private Integer hasStock; // 是否只显示有货private String skuPrice;// 价格区间查询private ListLong brandId;// 按照品牌进行查询可以多选private ListString attrs;// 按照属性进行筛选private Integer pageNum;// 页码}1.4 检索返回结果模型分析抽取 gulimall-search/src/main/java/com/wen/gulimall/search/vo/SearchResult.java Data public class SearchResult {// 查询到的所有商品信息private ListSkuEsModel products;/*** 以下是分页信息*/private Integer pageNum; // 当前页码private Long total; // 总记录数private Integer totalPages; // 总页码private ListBrandVo brands; // 当前查询到的结果所有涉及到的品牌private ListCatalogVo catalogs; // 当前查询到的结果所有涉及到的所有分类private ListAttrVo attrs; // 当前查询到的结果所有涉及到的所有属性//以上是返回给页面的所有信息Datapublic static class BrandVo{private Long brandId;private String brandName;private String brandImg;}Datapublic static class CatalogVo{private Long catalogId;private String catalogName;}Datapublic static class AttrVo{private Long attrId;private String attrName;private ListString attrValue;}} 1.5 检索DSL测试 1.5.1 DSL查询部分 属性数据类型为嵌入式即typenested查询、过滤也需要嵌入式。可参照官网Nested query | Elasticsearch Guide [7.4] | Elastic价格区间使用range gte lte. 1.5.1.1 查询部分DSL # 查询部分 GET product/_search {query: {bool: {must: [{match: {skuTitle: 华为}}],filter: [{term: {catalogId: 225}},{terms: {brandId: [1,2,7]}},{nested: {path: attrs,query: {bool: {must: [{term: {attrs.attrId: {value: 12}}},{terms: {attrs.attrValue: [HUAWEI Kirin 980,A13]}}]}}}},{term: {hasStock: {value: false}}},{range: {skuPrice: {gte: 0,lte: 6000}}}]}} } 1.5.1.2 查询部分排序分页高亮DSL 模糊匹配过滤按照属性分类品牌价格区间库存排序分页高亮聚合分析 # 模糊匹配过滤按照属性分类品牌价格区间库存排序分页高亮聚合分析 GET product/_search {query: {bool: {must: [{match: {skuTitle: 华为}}],filter: [{term: {catalogId: 225}},{terms: {brandId: [1,2,7]}},{nested: {path: attrs,query: {bool: {must: [{term: {attrs.attrId: {value: 12}}},{terms: {attrs.attrValue: [HUAWEI Kirin 980,A13]}}]}}}},{term: {hasStock: {value: false}}},{range: {skuPrice: {gte: 0,lte: 6000}}}]}},sort: [{skuPrice: {order: desc}}],from: 0,size: 1,highlight: {fields: {skuTitle: {}},pre_tags: b stylecolor:red,post_tags: /b} } 1.5.2 聚合部分 1.5.2.1 聚合时出现的问题Use doc values instead 1.5.2.1.1 报错原因 1. mapping映射参数index、doc_values使用说明  indexindex选项控制是否对字段值进行索引。它接受true或false默认为true。如果为 false 表示该字段不会被索引 但是检索结果里面有 但字段本身不能当做检索条件。doc_values默认为true。如果为false表示字段不需要进行排序、聚合、或者使用脚本访问字段值这样可以节省磁盘空间。还可以通过设定doc_values为trueindex为false 来让字段不能被检索但是可以用于排序、聚合以及脚本操作。 具体可以参照官网mapping parameters 2. 错误原因 brandName属性的doc_values为false不可以进行聚合。 1.5.2.1.2 解决方案 更新映射删除映射中的index和doc_values参数。 1创建新的索引指定映射 PUT gulimall_product {mappings: {properties: {skuId: {type: long},spuId: {type: keyword},skuTitle: {type: text,analyzer: ik_smart},skuPrice: {type: keyword},skuImg: {type: keyword},saleCount: {type: long},hasStock: {type: boolean},hotScore: {type: long},brandId: {type: long},catalogId: {type: long},brandName: {type: keyword},brandImg: {type: keyword},catalogName: {type: keyword},attrs: {type: nested,properties: {attrId: {type: long},attrName: {type: keyword},attrValue: {type: keyword}}}}} } 2迁移数据 # 数据迁移 POST _reindex {source: {index: product},dest: {index: gulimall_product} } 迁移成功 3修改索引常量名 由product改为gulimall_product public class EsConstant {public static final String PRODUCT_INDEX gulimall_product; } 1.5.2.2 聚合部分DSL 1DSL聚合部分 GET gulimall_product/_search {query: {match_all: {}},aggs: {brand_agg: {terms: {field: brandId,size: 10},aggs: {brand_name_agg: {terms: {field: brandName,size: 10}},brand_img_agg:{terms: {field: brandImg,size: 10}}}},catalog_agg:{terms: {field: catalogId,size: 10},aggs: {catalog_name_agg: {terms: {field: catalogName,size: 10}}}},attr_agg:{nested: {path: attrs},aggs: {attr_id_agg: {terms: {field: attrs.attrId,size: 10},aggs: {attr_name_agg: {terms: {field: attrs.attrName,size: 10}},attr_value_agg:{terms: {field: attrs.attrValue,size: 10}}}}}}} } 1.5.3 总的DSL查询聚合 GET gulimall_product/_search {query: {bool: {must: [{match: {skuTitle: 华为}}],filter: [{term: {catalogId: 225}},{terms: {brandId: [1,2,7]}},{nested: {path: attrs,query: {bool: {must: [{term: {attrs.attrId: {value: 12}}},{terms: {attrs.attrValue: [HUAWEI Kirin 980,A13]}}]}}}},{term: {hasStock: {value: false}}},{range: {skuPrice: {gte: 0,lte: 6000}}}]}},sort: [{skuPrice: {order: desc}}],from: 0,size: 1,highlight: {fields: {skuTitle: {}},pre_tags: b stylecolor:red,post_tags: /b},aggs: {brand_agg: {terms: {field: brandId,size: 10},aggs: {brand_name_agg: {terms: {field: brandName,size: 10}},brand_img_agg:{terms: {field: brandImg,size: 10}}}},catalog_agg:{terms: {field: catalogId,size: 10},aggs: {catalog_name_agg: {terms: {field: catalogName,size: 10}}}},attr_agg:{nested: {path: attrs},aggs: {attr_id_agg: {terms: {field: attrs.attrId,size: 10},aggs: {attr_name_agg: {terms: {field: attrs.attrName,size: 10}},attr_value_agg:{terms: {field: attrs.attrValue,size: 10}}}}}}} } 1.6 SearchRequest构建 1.6.1 检索、排序、分页、高亮、聚合 1.6.1.1 controller层 gulimall-search/src/main/java/com/wen/gulimall/search/controller/SearchController.java Controller public class SearchController {Resourceprivate MallSearchService mallSearchService;/*** 自动将页面提交过来的所有请求查询参数封装成指定的对象* param searchParam* return*/GetMapping(/list.html)public String listPage(SearchParam searchParam, Model model){// 1. 根据传递来的页面的查询参数去es中检索商品SearchResult result mallSearchService.search(searchParam);model.addAttribute(result, result);return list;} } 1.6.1.2 service层 gulimall-search/src/main/java/com/wen/gulimall/search/service/MallSearchService.java public interface MallSearchService {/**** param searchParam 检索的所有参数* return 返回检索的结果里面包含页面需要的所有信息*/SearchResult search(SearchParam searchParam); } gulimall-search/src/main/java/com/wen/gulimall/search/service/impl/MallSearchServiceImpl.java Service public class MallSearchServiceImpl implements MallSearchService {Resourceprivate RestHighLevelClient restHighLevelClient;// 根据条件去es中检索Overridepublic SearchResult search(SearchParam searchParam) {// 动态的构建出查询所需要的DSLSearchResult result null;// 1. 准备检索请求SearchRequest searchRequest buildSearchRequest(searchParam);try {// 2. 执行检索请求SearchResponse searchResponse restHighLevelClient.search(searchRequest, GulimallElasticsearchConfig.COMMON_OPTIONS);// 3. 分析响应数据封装成需要的格式result buildSearchResponse(searchParam,searchResponse);} catch (IOException e) {e.printStackTrace();}return result;}/*** 准备检索请求* # 模糊匹配过滤按照属性分类品牌价格区间库存排序分页高亮聚合分析* return*/private SearchRequest buildSearchRequest(SearchParam searchParam) {// 构建DSL语句对象SearchSourceBuilder sourceBuilder new SearchSourceBuilder();/*** 查询模糊匹配过滤按照属性分类品牌价格区间库存*/// 1. 构建bool - queryBoolQueryBuilder boolQuery QueryBuilders.boolQuery();// 1.1 bool - must 模糊匹配if(StrUtil.isNotEmpty(searchParam.getKeyword())){boolQuery.must(QueryBuilders.matchQuery(skuTitle,searchParam.getKeyword()));}// 1.2 bool - filter - 按照三级分类id查询if(searchParam.getCatalog3Id() ! null){boolQuery.filter(QueryBuilders.termQuery(catalogId,searchParam.getCatalog3Id()));}// 1.2 bool -filter - 按照品牌id查询if(CollectionUtil.isNotEmpty(searchParam.getBrandId())){boolQuery.filter(QueryBuilders.termsQuery(brandId,searchParam.getBrandId()));}// 1.2 bool - filter - 按照所有指定的属性进行查询if(CollectionUtil.isNotEmpty(searchParam.getAttrs())){// attrs1_5寸:6寸attrs2_8G:16Gfor (String attrStr : searchParam.getAttrs()) {String[] s attrStr.split(_);String attrId s[0]; // 检索的属性idString[] attrValues s[1].split(:); // 这个属性检索所需要的值BoolQueryBuilder nestedBoolQuery QueryBuilders.boolQuery();nestedBoolQuery.must(QueryBuilders.termQuery(attrs.attrId,attrId));nestedBoolQuery.must(QueryBuilders.termsQuery(attrs.attrValue,attrValues));// ScoreMode.None 不参与评分// 每一个必须都得生成一个nested查询NestedQueryBuilder nestedQuery QueryBuilders.nestedQuery(attrs, nestedBoolQuery, ScoreMode.None);boolQuery.filter(nestedQuery);}}// 1.2 bool -filter - 按照库存是否有进行查询if(searchParam.getHasStock() ! null) {boolQuery.filter(QueryBuilders.termQuery(hasStock, searchParam.getHasStock() 1));}// 1.2 bool -filter - 按照价格区间if(StrUtil.isNotEmpty(searchParam.getSkuPrice())){String[] s searchParam.getSkuPrice().split(_);RangeQueryBuilder rangeQuery QueryBuilders.rangeQuery(skuPrice);if(s.length 2){rangeQuery.gte(s[0]).lte(s[1]);boolQuery.filter(rangeQuery);}else if(s.length 1){if(searchParam.getSkuPrice().startsWith(_)){rangeQuery.lte(s[0]);boolQuery.filter(rangeQuery);}if(searchParam.getSkuPrice().endsWith(_)){rangeQuery.gte(s[0]);boolQuery.filter(rangeQuery);}}}// 把以上所有的条件都拿来进行封装sourceBuilder.query(boolQuery);/*** 排序分页高亮*/// 2.1 排序if(StrUtil.isNotEmpty(searchParam.getSort())){// sortsaleCount_asc/descString[] s searchParam.getSort().split(_);SortOrder order s[1].equalsIgnoreCase(asc)?SortOrder.ASC:SortOrder.DESC;sourceBuilder.sort(s[0],order);}// 2.2 分页 pageSize 5// pageNum:1 from:0 size:5// pageNum:2 form:5 size:5// from (pageNum - 1)*sizesourceBuilder.from((searchParam.getPageNum()-1)*EsConstant.PRODUCT_PAGESIZE);sourceBuilder.size(EsConstant.PRODUCT_PAGESIZE);// 2.3 高亮if(StrUtil.isNotEmpty(searchParam.getKeyword())) {HighlightBuilder builder new HighlightBuilder();builder.field(skuTitle);builder.preTags(b stylecolor:red);builder.postTags(/b);sourceBuilder.highlighter(builder);}/*** 聚合分析*/// 1. 品牌聚合TermsAggregationBuilder brand_agg AggregationBuilders.terms(brand_agg);brand_agg.field(brandId).size(50);// 品牌聚合的子聚合brand_agg.subAggregation(AggregationBuilders.terms(brand_name_agg).field(brandName).size(1));brand_agg.subAggregation(AggregationBuilders.terms(brand_img_agg).field(brandImg).size(1));// TODO 1.聚合brandsourceBuilder.aggregation(brand_agg);// 2. 分类聚合 catalog_aggTermsAggregationBuilder catalog_agg AggregationBuilders.terms(catalog_agg).field(catalogId).size(20);// 分类聚合的子聚合catalog_agg.subAggregation(AggregationBuilders.terms(catalog_name_agg).field(catalogName).size(1));// TODO 1.聚合catalogsourceBuilder.aggregation(catalog_agg);// 3. 属性聚合NestedAggregationBuilder attr_agg AggregationBuilders.nested(attr_agg, attrs);// 聚合出当前所有的attrIdTermsAggregationBuilder attr_id_agg AggregationBuilders.terms(attr_id_agg).field(attrs.attrId).size(10);// 聚合出当前所有的attr_id对应的名字attr_id_agg.subAggregation(AggregationBuilders.terms(attr_name_agg).field(attrs.attrName).size(1));// 聚合出当前所有的attr_id对应的所有可能的属性值attrValueattr_id_agg.subAggregation(AggregationBuilders.terms(attr_value_agg).field(attrs.attrValue).size(50));attr_agg.subAggregation(attr_id_agg);// TODO 1.聚合attrsourceBuilder.aggregation(attr_agg);System.out.println(构建的DSL语句sourceBuilder.toString());SearchRequest searchRequest new SearchRequest(new String[]{EsConstant.PRODUCT_INDEX},sourceBuilder);return searchRequest;}/*** 封装检索结果* param searchParam* param searchResponse* return*/private SearchResult buildSearchResponse(SearchParam searchParam, SearchResponse searchResponse) {return null;} }buildSearchResponse(searchParam,searchResponse)方法具体实现见 1.7 SearchResponse分析封装 1.6.1.3 EsConstant.javaEs常量类 gulimall-search/src/main/java/com/wen/gulimall/search/constant/EsConstant.java public class EsConstant {public static final String PRODUCT_INDEX gulimall_product;public static final Integer PRODUCT_PAGESIZE 2;}1.6.2 测试 根据代码中System.out.println(构建的DSL语句sourceBuilder.toString());输出的DSL语句在Kibana中进行测试看输出结果是否正确。 1.7 SearchResponse分析封装 对search()接口进行debug根据debug确定聚合的具体类型。如下图以分类的聚合为例 gulimall-search/src/main/java/com/wen/gulimall/search/service/impl/MallSearchServiceImpl.java /*** 封装检索结果* param searchParam* param searchResponse* return*/ private SearchResult buildSearchResponse(SearchParam searchParam, SearchResponse searchResponse) {SearchResult result new SearchResult();// 1. 返回所有查询到的商品SearchHit[] hits searchResponse.getHits().getHits();ListSkuEsModel skuEsModels new ArrayList();if(ArrayUtil.isNotEmpty(hits)) {for (SearchHit hit : hits) {String sourceAsString hit.getSourceAsString();SkuEsModel skuEsModel JSON.parseObject(sourceAsString, SkuEsModel.class);// keyword非空设置高亮if(StrUtil.isNotEmpty(searchParam.getKeyword())) {String skuTitle hit.getHighlightFields().get(skuTitle).getFragments()[0].string();skuEsModel.setSkuTitle(skuTitle);}skuEsModels.add(skuEsModel);}}result.setProducts(skuEsModels);2. 当前所有商品涉及到的所有属性信息ListSearchResult.AttrVo attrVos new ArrayList();ParsedNested attr_agg searchResponse.getAggregations().get(attr_agg);ParsedLongTerms attr_id_agg attr_agg.getAggregations().get(attr_id_agg);for (Terms.Bucket bucket : attr_id_agg.getBuckets()) {// 1. 获取属性idlong attrId bucket.getKeyAsNumber().longValue();// 2. 获取属性的名字String attrName ((ParsedStringTerms) bucket.getAggregations().get(attr_name_agg)).getBuckets().get(0).getKeyAsString();// 3. 获取属性的值ListString attrValues ((ParsedStringTerms) bucket.getAggregations().get(attr_value_agg)).getBuckets().stream().map(item - {return ((Terms.Bucket) item).getKeyAsString();}).collect(Collectors.toList());SearchResult.AttrVo attrVo new SearchResult.AttrVo();attrVo.setAttrId(attrId);attrVo.setAttrName(attrName);attrVo.setAttrValue(attrValues);attrVos.add(attrVo);}result.setAttrs(attrVos);3. 当前所有商品涉及到的所有品牌信息ListSearchResult.BrandVo brandVos new ArrayList();ParsedLongTerms brand_agg searchResponse.getAggregations().get(brand_agg);for (Terms.Bucket bucket : brand_agg.getBuckets()) {// 1. 获取品牌的idlong brandId bucket.getKeyAsNumber().longValue();// 2. 获取品牌的名字String brandName ((ParsedStringTerms) bucket.getAggregations().get(brand_name_agg)).getBuckets().get(0).getKeyAsString();// 3. 获取平品牌的图片String brandImg ((ParsedStringTerms) bucket.getAggregations().get(brand_img_agg)).getBuckets().get(0).getKeyAsString();SearchResult.BrandVo brandVo new SearchResult.BrandVo();brandVo.setBrandId(brandId);brandVo.setBrandName(brandName);brandVo.setBrandImg(brandImg);brandVos.add(brandVo);}result.setBrands(brandVos);4. 当前所有商品涉及到的所有分类信息ParsedLongTerms catalog_agg searchResponse.getAggregations().get(catalog_agg);ListSearchResult.CatalogVo catalogVos new ArrayList();List? extends Terms.Bucket buckets catalog_agg.getBuckets();if(CollectionUtil.isNotEmpty(buckets)){for (Terms.Bucket bucket : buckets) {SearchResult.CatalogVo catalogVo new SearchResult.CatalogVo();// 获取分类idString keyAsString bucket.getKeyAsString();catalogVo.setCatalogId(Long.parseLong(keyAsString));// 获取分类名称ParsedStringTerms catalog_name_agg bucket.getAggregations().get(catalog_name_agg);String catalog_name catalog_name_agg.getBuckets().get(0).getKeyAsString();catalogVo.setCatalogName(catalog_name);catalogVos.add(catalogVo);}}result.setCatalogs(catalogVos);//5. 分页信息 - 当前页码result.setPageNum(searchParam.getPageNum());6. 分页信息 - 总记录数long total searchResponse.getHits().getTotalHits().value;result.setTotal(total);7. 分页信息 - 总页数Integer totalPages (int)total%EsConstant.PRODUCT_PAGESIZE 0?(int)total/EsConstant.PRODUCT_PAGESIZE:((int)total/EsConstant.PRODUCT_PAGESIZE 1);result.setTotalPages(totalPages);return result; } 参数keyword不为空时skuTitle中keyword的值设置高亮。 1.8 验证结果封装正确性 通过debug查看结果的封装。 1.9 渲染检索页面【P184-192】 1修改SearchParam类中库存属性hasStock不给默认值buildSearchRequest()方法中加上库存判断有库存才拼接库存查询。注意上面的hasStock和buildSearchRequest()已经修改 2要判断当前location.href是否有参数没有以?拼接有以拼接。可以通过字符串的indexOf()方法进行判断也可以通过includes()方法进行判断。具体可以参考W3C文档https://www.w3school.com.cn/jsref/jsref_obj_string.asp includes() 返回字符串是否包含指定值。 indexOf() 返回值在字符串中第一次出现的位置。 3搜索框回显可以使用 th:value${param.keyword}完成回显功能。${param.keyword}可以获取请求参数keyword的值。 4分页功能完善输入页码点击确定跳转到具体页面。 面包屑导航 1SearchResult中添加面包屑相关内容 2buildSearchResponse()构建查询结果里返回面包屑相关数据 3构建属性面包屑导航功能因为需要属性名所以需要远程调用gulimall-product服务1修改search服务的pom.xml添加spring-cloud引入openfeign2开启openfeign3编写远程调用接口GetMapping(/product/attr/info/{attrId})public R attrInfo(PathVariable(attrId) Long attrId); 5浏览器对空格的编码和Java不一样差异化处理 private String replaceQueryString(SearchParam searchParam, String value, String key) {String encode null;try {encode URLEncoder.encode(value, UTF-8);// 前端传递过来的空格被解码成替换成%20encode encode.replace(,%20); //浏览器对空格的编码和Java不一样差异化处理} catch (UnsupportedEncodingException e) {e.printStackTrace();}String replace searchParam.get_queryString().replace(key encode, );return replace; } 6构建品牌面包屑导航功能因为需要品牌名称所以需要远程调用gulimall-product服务1编写gulimall-product服务所需品牌的接口GetMapping(/infos)public R info(RequestParam(brandIds) ListLong brandIds){ListBrandEntity brand brandService.getBrandsByIds(brandIds);return R.ok().put(brand, brand);}2编写远程调用接口GetMapping(/product/brand/infos)public R brandsInfo(RequestParam(brandIds) ListLong brandIds); 7注意th:if的优先级比th:with高可以参照 usingthymeleaf.pdf -》 Attribute Precedence 1.9.1 检索页面完整代码 !DOCTYPE html html langen xmlns:thhttp://www.thymeleaf.org headmeta charsetUTF-8meta nameviewportcontentwidthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0meta http-equivX-UA-Compatible contentieedgelink relstylesheet href/static/search/css/index.csslink relstylesheet typetext/css href/static/search/font/iconfont.css!--script src/static/search/js/jquery-3.2.1.min.js/script--script src/static/search/js/jquery-1.12.4.js/scripttitleDocument/title /head body !--头部-- div classheader_headdiv classheader_head_boxb classheader_head_pdiv styleoverflow: hiddena hrefhttp://gulimall.com classheader_head_p_a1 stylewidth:73px;谷粒商城首页/aa href# classheader_head_p_a!--img src/static/search/img/img_05.png styleborder-radius: 50%;/--北京/a/divdiv classheader_head_p_csa href# stylebackground: #C81623;color: #fff;北京/aa href#上海/aa href#天津/aa href#重庆/aa href#河北/aa href#山西/aa href#河南/aa href#辽宁/aa href#吉林/aa href#黑龙江/aa href#内蒙古/aa href#江苏/aa href#山东/aa href#安徽/aa href#浙江/aa href#福建/aa href#湖北/aa href#湖南/aa href#广东/aa href#广西/aa href#江西/aa href#四川/aa href#海南/aa href#贵州/aa href#云南/aa href#西藏/aa href#陕西/aa href#甘肃/aa href#青海/aa href#宁夏/aa href#新疆/aa href#港澳/aa href#台湾/aa href#钓鱼岛/aa href#海外/a/div/bullia href# classli_2你好请登录/a/lilia href#免费注册/a/lispan|/spanlia href#我的订单/a/lispan|/spanli classheader_wdjd stylewidth:80px;a href#我的谷粒商城/aimg src/static/search/image/down-1x.png /!--b classglyphicon glyphicon-menu-down/b--div classheader_wdjd_txtullia href#待处理订单/a/lilia href#消息/a/lilia href#返修退换货/a/lilia href#我的回答/a/lilia href#降价商品/a/lilia href#我的关注/a/li/ulullia href#我的京豆/a/lilia href#我的优惠券/a/lilia href#我的白条/a/lilia href#我的理财/a/li/ul/div/lispan|/spanlia href#谷粒商城会员/a/lispan|/spanlia href#企业采购/a/lispan|/spanli classheader_wdjd1a href#客户服务/aimg src/static/search/image/down-1x.png /!--b classglyphicon glyphicon-menu-down/b--div classheader_wdjd_txtulp stylewidth:100%;客户/plia href#帮助中心/a/lilia href#售后服务/a/lilia href#在线客服/a/lilia href#意见建议/a/lilia href#电话客服/a/lilia href#客服邮箱/a/lilia href#金融资讯/a/lilia href#售全球客服/a/li/ululp stylewidth:100%;商户/plia href#合作招商/a/lilia href#学习中心/a/lilia href#商家后台/a/lilia href#京麦工作台/a/lilia href#商家帮助/a/lilia href#规则平台/a/li/ul/div/lispan|/spanli classheader_wzdha href#网站导航/aimg src/static/search/image/down-1x.png /!--b classglyphicon glyphicon-menu-down/b--div classheader_wzdh_txtul stylewidth: 25%;p stylewidth:100%;特色主题/plia href#谷粒商城试用/a/lilia href#谷粒商城金融/a/lilia href#全球售/a/lilia href#国际站/a/lilia href#谷粒商城会员/a/lilia href#谷粒商城预售/a/lilia href#买什么/a/lilia href#俄语站/a/lilia href#装机大师/a/lilia href#0元评测/a/lilia href#定期送/a/lilia href#港澳售/a/lilia href#优惠券/a/lilia href#秒杀/a/lilia href#闪购/a/lilia href#印尼站/a/lilia href#谷粒商城金融科技/a/lilia href#In货推荐/a/lilia href#陪伴计划/a/lilia href#出海招商/a/li/ulul stylewidth: 20%;p stylewidth:100%;行业频道/plia href#手机/a/lilia href#智能数码/a/lilia href#玩3c/a/lilia href#电脑办公/a/lilia href#家用电器/a/lilia href#谷粒商城智能/a/lilia href#服装城/a/lilia href#美妆馆/a/lilia href#家装城/a/lilia href#母婴/a/lilia href#食品/a/lilia href#运动户外/a/lilia href#农资频道/a/lilia href#整车/a/lilia href#图书/a/li/ulul stylewidth: 21%;p stylewidth:100%;生活服务/plia href#白条/a/lilia href#谷粒商城金融App/a/lilia href#谷粒商城小金库/a/lilia href#理财/a/lilia href#智能家电/a/lilia href#话费/a/lilia href#水电煤/a/lilia href#彩票/a/lilia href#旅行/a/lilia href#机票酒店/a/lilia href#电影票/a/lilia href#谷粒商城到家/a/lilia href#谷粒商城众测/a/lilia href#游戏/a/li/ulul stylewidth: 23%; border-right: 0;p stylewidth:100%;更多精选/plia href#合作招商/a/lilia href#谷粒商城通信/a/lilia href#谷粒商城E卡/a/lilia href#企业采购/a/lilia href#服务市场/a/lilia href#办公生活馆/a/lilia href#乡村招募/a/lilia href#校园加盟/a/lilia href#京友帮/a/lilia href#谷粒商城社区/a/lilia href#智能社区/a/lilia href#游戏社区/a/lilia href#知识产权维权/a/li/ul/div/lispan|/spanli classheader_sjjda href#手机谷粒商城/adiv classheader_sjjd_divimg src/static/search/img/01.png //div/li/ul/div /div!--搜索导航-- div classheader_sousdiv classlogoa hrefhttp://gulimall.comimg src/static/search/image/logo1.jpg alt/a/divdiv classheader_forminput idkeyword_input typetext placeholder手机 th:value${param.keyword}/a hrefjavascript:searchByKeyword()搜索/a/divdiv classheader_icodiv classheader_gwspana href#我的购物车/a/spanimg src/static/search/image/settleup-1x.png /span0/span/divdiv classheader_kop购物车中还没有商品赶紧选购吧/p/div/divdiv classheader_form_navullia href#谷粒商城之家/a/lilia href#谷粒商城专卖店/a/lilia href#平板/a/lilia href#电脑/a/lilia href#ipad/a/li/ul/divnavulli classnav_li1a href#全部商品分类/a/lili classnav_lia href#服装城/a/lili classnav_lia href#没装馆/a/lili classnav_lia href#超市/a/lili classnav_lia href#生鲜/a/li/uldiv classspacer|/divulli classnav_lia href#全球购/a/lili classnav_lia href#闪购/a/lili classnav_lia href#拍卖/a/li/uldiv classspacer|/divulli classnav_lia href#金融/a/li/ul/navdiv classheader_main_leftullia href# classheader_main_left_ab家用电器/b/a/lili classheader_li2a href# classheader_main_left_ab手机/b / b运营商/b / b数码/b/adiv classheader_main_left_maindiv classheader_sja href# classheader_sj_a玩3c/aa href# classheader_sj_a手机频道/aa href# classheader_sj_a网上营业厅/aa href# classheader_sj_a配件选购中心/aa href# classheader_sj_a企业购/aa href# classheader_sj_a以旧换新/a/divol classheader_ola href# stylecolor: #111; classaaa手机通讯 /alia href# stylecolor: #999;手机/aa href# stylecolor: #999;对讲机/aa href# stylecolor: #999;手机维修/aa href# stylecolor: #999;以旧换新/a/lia href# stylecolor: #111; classaaa运营商 /alia href# stylecolor: #999;合约机/aa href# stylecolor: #999;固话宽带/aa href# stylecolor: #999;办套餐/aa href# stylecolor: #999;从话费/流量/aa href# stylecolor: #999;中国电信/aa href# stylecolor: #999;中国移动/aa href# stylecolor: #999;中国联通/aa href# stylecolor: #999;谷粒商城通信/aa href# stylecolor: #999;170选号/a/lia href# stylecolor: #111; classaaa手机配件 /ali styleheight: 60px;a href# stylecolor: #999;手机壳/aa href# stylecolor: #999;贴膜/aa href# stylecolor: #999;手机储存卡/aa href# stylecolor: #999;数据线/aa href# stylecolor: #999;存电器/aa href# stylecolor: #999;手机耳机/aa href# stylecolor: #999;创业配件/aa href# stylecolor: #999;手机饰品/aa href# stylecolor: #999;手机电池/aa href# stylecolor: #999;苹果周边/aa href# stylecolor: #999;移动电源/aa href# stylecolor: #999;蓝牙耳机/aa href# stylecolor: #999;手机支架/aa href# stylecolor: #999;车载配件/aa href# stylecolor: #999;拍照配件/a/lia href# stylecolor: #111; classaaa摄影摄像 /ali styleheight: 60px;a href# stylecolor: #999;数码相机/aa href# stylecolor: #999;单电/微单相机/aa href# stylecolor: #999;单反相机/aa href# stylecolor: #999;拍立得/aa href# stylecolor: #999;运动相机/aa href# stylecolor: #999;摄像机/aa href# stylecolor: #999;镜头/aa href# stylecolor: #999;户外器材/aa href# stylecolor: #999;影棚器材/aa href# stylecolor: #999;冲印服务/aa href# stylecolor: #999;数码相框/a/lia href# stylecolor: #111; classaaa数码配件 /ali styleheight: 60px;a href# stylecolor: #999;三脚架/云台/aa href# stylecolor: #999;相机包/aa href# stylecolor: #999;滤镜/aa href# stylecolor: #999;散光灯/手柄/aa href# stylecolor: #999;相机清洁/aa href# stylecolor: #999;机身附件/aa href# stylecolor: #999;镜头附件/aa href# stylecolor: #999;读卡器/aa href# stylecolor: #999;支架/aa href# stylecolor: #999;电池/存电器/a/lia href# stylecolor: #111; classaaa影音娱乐 /alia href# stylecolor: #999;耳机/耳麦/aa href# stylecolor: #999;音箱/音响/aa href# stylecolor: #999;智能音箱/aa href# stylecolor: #999;便携/无线音箱/aa href# stylecolor: #999;收音机/aa href# stylecolor: #999;麦克风/aa href# stylecolor: #999;MP3/MP4/aa href# stylecolor: #999;专业音频/a/lia href# stylecolor: #111; classaaa智能设备 /ali styleheight: 60px;a href# stylecolor: #999;智能手环/aa href# stylecolor: #999;智能手表/aa href# stylecolor: #999;智能眼镜/aa href# stylecolor: #999;智能机器人/aa href# stylecolor: #999;运动跟踪器/aa href# stylecolor: #999;健康监测/aa href# stylecolor: #999;智能配饰/aa href# stylecolor: #999;智能家居/aa href# stylecolor: #999;体感车/aa href# stylecolor: #999;无人机/aa href# stylecolor: #999;其他配件/a/lia href# stylecolor: #111; classaaa电子教育 /alia href# stylecolor: #999;学生平板/aa href# stylecolor: #999;点读机/aa href# stylecolor: #999;早教益智/aa href# stylecolor: #999;录音笔/aa href# stylecolor: #999;电纸书/aa href# stylecolor: #999;电子词典/aa href# stylecolor: #999;复读机/a/li/oldiv classheader_rdiv classheader_r_tua href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //aa href#img src/static/search/img/56b2f385n8e4eb051.jpg //a/divdiv classheader_r_tu1a href#img src/static/search/img/JD_ash7 - 副本.png //aa href#img src/static/search/img/JD_ash6.png //a/div/div/div/lilia href# classheader_main_left_ab电脑/b / b办公/b/a/lilia href# classheader_main_left_ab家居/b / b家具/b / b家装/b / b厨具/b/a/lilia href# classheader_main_left_ab男装/b / b女装/b / b童装/b / b内衣/b/a/lilia href# classheader_main_left_ab美妆个护 /b/ b宠物/b/a/lilia href# classheader_main_left_ab女鞋/b / b箱包/b / b钟表/b / b珠宝/b/a/lilia href# classheader_main_left_ab男鞋/b / b运动/b / b户外/b/a/lilia href# classheader_main_left_ab汽车/b / b汽车用品/b/a/lilia href# classheader_main_left_ab母婴/b / b玩具乐器/b/a/lilia href# classheader_main_left_ab食品/b / b酒类/b / b生鲜/b / b特产/b/a/lilia href# classheader_main_left_ab礼品鲜花/b / b农资绿植/b/a/lilia href# classheader_main_left_ab医药保健/b / b计生情趣/b/a/lilia href# classheader_main_left_ab图书/b / b音箱/b/ b电子书/b/a/lilia href# classheader_main_left_ab机票/b / b酒店/b / b旅游/b / b生活/b/a/lilia href# classheader_main_left_ab理财/b / b众筹/b / b白条/b / b保险/b/a/li/ul/div /divhr styleborder: 1px solid red;margin-top: -7px;!--热卖促销-- div classJD_temaidiv classJD_maindiv classJD_leftdiv classhd热卖推荐/divdiv classbd mcul classmclia href# classmc_aimg src/static/search/img/5a28b5a1n8a5c095f.jpg alt/adiv classmc_diva href# classmc_div_a1em华为 HUAWEI nova 2S 全面屏四摄 6GB 64GB 曜石黑 移动联通电信4G手机 双卡双待/em/apstrongem classnumber J-p-59630642999.00/em/strong/pa href# classmc_div_a2立即抢购/a/div/lilia href# classmc_aimg src/static/search/img/59f5eef1n99542494.jpg alt/adiv classmc_diva href# classmc_div_a1em【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待/em/apstrongem classnumber J-p-59630641699.00/em/strong/pa href# classmc_div_a2立即抢购/a/div/lili stylemargin-right: 0a href# classmc_aimg src/static/search/img/59f5eef1n99542494.jpg alt/adiv classmc_diva href# classmc_div_a1em华为 HUAWEI nova 2S 全面屏四摄 6GB 64GB 曜石黑 移动联通电信4G手机 双卡双待/em/apstrongem classnumber J-p-59630642999.00/em/strong/pa href# classmc_div_a2立即抢购/a/div/li/ul/div/divdiv classJD_rightdiv classhd 促销活动/divdiv classbdulli . a href#红米千元全面屏手机上市/a/lili . a href#锤子坚果Pro2火爆预约中/a/lili . a href#大牌新品 疯狂抢购/a/lili . a href#X20 vivo蓝新色上市/a/lili . a href#荣耀畅玩7X新品上市/a/li/ul/div/div/div /div!--手机-- div classJD_iponediv classJD_ipone_bardiv classJD_ipone_one aa href#手机/a/diviimg src/static/search/image/right-1x.png alt/idiv classJD_ipone_one ba href# classqqq手机通讯录 img src/static/search/image/down-1x.png alt/adiva href#手机通讯/aa href#运营商/aa href#手机配件/aa href#手机服务/a/div/diviimg src/static/search/image/right-1x.png alt/idiv classJD_ipone_one ca href# classqqq手机 img src/static/search/image/down-1x.png alt/adiva href#手机/aa href#老人机/aa href#对讲机/aa href#女性手机/aa href#超续航手机/aa href#全面屏手机/aa href#拍照手机/aa href#游戏手机/a/div/divdiv classJD_ipone_one ca th:href${nav.link} th:eachnav:${result.navs}span th:text${nav.navName}/span : span th:text${nav.navValue}/span×/a/diviimg src/static/search/image/right-1x.png alt/i/div /div!--商品筛选和排序-- div classJD_banner wdiv classJD_navdiv classJD_selector!--手机商品筛选--div classtitleh3b手机/bem商品筛选/em/h3div classst-ext共nbsp;span10135/span个商品 /div/divdiv classJD_nav_logo th:withbrandid ${param.brandId} !--品牌--div classJD_nav_wrap th:if${#strings.isEmpty(brandid)}div classsl_keyspanb品牌/b/span/divdiv classsl_valuediv classsl_value_logoulli th:eachbrand:${result.brands}a href# th:href${javascript:searchProducts(quot;brandIdquot;,brand.brandId)}img th:src${brand.brandImg} altdiv th:text${brand.brandName}华为(HUAWEI)/div/a/li/ul/div/divdiv classsl_exta href#更多i stylebackground: url(static/search/image/search.ele.png)no-repeat 3px 7px/ib stylebackground: url(static/search/image/search.ele.png)no-repeat 3px -44px/b/aa href#多选i/ispan/span/a/div/div!--分类--div classJD_prediv classsl_keyspanb分类/b/span/divdiv classsl_valueulli th:eachcatalog:${result.catalogs}a href#th:href${javascript:searchProducts(quot;catalog3Idquot;,catalog.catalogId)}th:text${catalog.catalogName}5.56英寸及以上/a/li/ul/divdiv classsl_exta href#更多i stylebackground: url(static/search/image/search.ele.png)no-repeat 3px 7px/ib stylebackground: url(static/search/image/search.ele.png)no-repeat 3px -44px/b/aa href#多选i/ispan/span/a/div/div!--其他的所有需要展示的属性--div classJD_pre th:eachattr:${result.attrs} th:if${!#lists.contains(result.attrIds,attr.attrId)}div classsl_keyspan th:text${attr.attrName}屏幕尺寸/span/divdiv classsl_valueulli th:eachval:${attr.attrValue}a href#th:href${javascript:searchProducts(quot;attrsquot;,quot;attr.attrId_valquot;)}th:text${val}5.56英寸及以上/a/li/ul/div/div/divdiv classJD_showa href#span更多选项 CPU核数、网络、机身颜色 等/span/a/div/div!--排序--div classJD_banner_main!--商品精选--div classJD_con_leftdiv classJD_con_left_bardiv classJD_con_onediv classmth3商品精选/h3span广告/span/divdiv classmcullia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/59bf3c47n91d65c73.jpg alt/aa href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em华为 HUAWEI nova 2S 全面屏四摄 6GB 64GB 曜石黑 移动联通电信4G手机 双卡双待/em/adiv classmc_pricestrong classpricespan classJ-p-59630642999.00/span/strongspan classmc-ico title购买本商品送赠品i classgoods-icons赠品/i/span/divdiv classmc_rev已有a href# classnumber12466/a人评价/div/lilia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/59bf3c47n91d65c73.jpg alt/aa href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em华为 HUAWEI nova 2S 全面屏四摄 6GB 64GB 曜石黑 移动联通电信4G手机 双卡双待/em/adiv classmc_pricestrong classpricespan classJ-p-59630642999.00/span/strongspan classmc-ico title购买本商品送赠品i classgoods-icons赠品/i/span/divdiv classmc_rev已有a href# classnumber12466/a人评价/div/lilia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/593ba628n8794c6a6.jpg alt/aa href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/adiv classmc_pricestrong classpricespan classJ-p-59630641799.00/span/strongspan classmc-ico title购买本商品送赠品i classgoods-icons赠品/i/span/divdiv classmc_rev已有a href# classnumber15600/a人评价/div/lilia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/5919637an271a1301.jpg alt/aa href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待emvivo Xplay6 全网通 6GB64GB 磨砂黑 移动联通电信4G手机 双卡双待/em/adiv classmc_pricestrong classpricespan classJ-p-59630643498.00/span/strongspan classmc-ico title购买本商品送赠品i classgoods-icons赠品/i/span/divdiv classmc_rev已有a href# classnumber5369/a人评价/div/li/ul/div/divdiv classJD_con_onediv classmth3达人选购/h3/divdiv classmcullia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/59bf3c47n91d65c73.jpg alt/aa href#em华为 HUAWEI nova 2S 全面屏四摄 6GB 64GB 曜石黑 移动联通电信4G手机 双卡双待/em/adiv classmc_pricestrong classpricespan classJ-p-59630642999.00/span/strong/div/lilia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/59bf3c47n91d65c73.jpg alt/aa href#em华为 HUAWEI nova 2S 全面屏四摄 6GB 64GB 曜石黑 移动联通电信4G手机 双卡双待/em/adiv classmc_pricestrong classpricespan classJ-p-59630642999.00/span/strong/div/lilia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/593ba628n8794c6a6.jpg alt/aa href#em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/adiv classmc_pricestrong classpricespan classJ-p-59630641799.00/span/strong/div/lilia href# titlevivo X9s 全网通 4GB64GB 磨砂黑 移动联通电信4G手机 双卡双待img src/static/search/img/5919637an271a1301.jpg alt/aa href#emvivo Xplay6 全网通 6GB64GB 磨砂黑 移动联通电信4G手机 双卡双待/em/adiv classmc_pricestrong classpricespan classJ-p-59630643498.00/span/strong/div/li/ul/div/divdiv classJD_con_one styleborder:none;div classmth3商品精选/h3span广告/span/divdiv classmcullia href#img src/static/search/img/599a806bn9d829c1c.jpg alt/a/lilia href#img src/static/search/img/593e4de0n5ff878a4.jpg alt/a/li/ul/div/div/div/div!--综合排序--div classJD_con_rightdiv classfilter!--综合排序--!--saleCount_asc/desc skuPrice_asc/desc --div classfilter_topdiv classfilter_top_left th:withp${param.sort},priceRange${param.skuPrice}a th:class${(!#strings.isEmpty(p) #strings.startsWith(p,hotScore) #strings.endsWith(p,desc))?sort_a desc:sort_a}th:attrstyle${(#strings.isEmpty(p) || #strings.startsWith(p,hotScore))?color: #FFF;border-color: #e4393c;background: #e4393c:color: #333;border-color: #CCC;background: #FFF}sorthotScore href#综合排序[[${(!#strings.isEmpty(p) #strings.startsWith(p,hotScore) #strings.endsWith(p,desc))?↓:↑}]]/aa th:class${(!#strings.isEmpty(p) #strings.startsWith(p,saleCount) #strings.endsWith(p,desc))?sort_a desc:sort_a}th:attrstyle${(!#strings.isEmpty(p) #strings.startsWith(p,saleCount))?color: #FFF;border-color: #e4393c;background: #e4393c:color: #333;border-color: #CCC;background: #FFF}sortsaleCount href#销量[[${(!#strings.isEmpty(p) #strings.startsWith(p,saleCount) #strings.endsWith(p,desc))?↓:↑}]]/aa th:class${(!#strings.isEmpty(p) #strings.startsWith(p,skuPrice) #strings.endsWith(p,desc))?sort_a desc:sort_a}th:attrstyle${(!#strings.isEmpty(p) #strings.startsWith(p,skuPrice))?color: #FFF;border-color: #e4393c;background: #e4393c:color: #333;border-color: #CCC;background: #FFF}sortskuPrice href#价格[[${(!#strings.isEmpty(p) #strings.startsWith(p,skuPrice) #strings.endsWith(p,desc))?↓:↑}]]/aa classsort_a href#评论分/aa classsort_a href#上架时间/ainput idskuPriceFrom typenumberth:value${#strings.isEmpty(priceRange)?:#strings.substringBefore(priceRange,_)}stylewidth: 100px; margin-left: 30px; -input idskuPriceTo typenumberth:value${#strings.isEmpty(priceRange)?:#strings.substringAfter(priceRange,_)}stylewidth: 100px;button idskuPriceSearchBtn确定/button/divdiv classfilter_top_rightspan classfp-textb1/bem//emi169/i/spana href# classprev/aa href# classnext /a/div/div!--收货地址--div classfilter_bottomdiv classfilter_bottom_leftdiv classfs-cell收货地/divdiv classdizhidiv classdizhi_showem北京朝阳区三环以内/emb/b/div/divdiv classdizhi_conul idtabli idtab1 value1北京 img src/static/search/image/down-1x.png alt/lili idtab2 value2朝阳 img src/static/search/image/down-1x.png alt/lili idtab3 value3三环以内 img src/static/search/image/down-1x.png alt/li/uldiv idcontainerdiv idcontent1 stylez-index: 1;a href#北京/aa href#上海/aa href#天津/aa href#重庆/aa href#河北/aa href#山西/aa href#河南/aa href#辽宁/aa href#吉林/aa href#黑龙江/aa href#内蒙古/aa href#江苏/aa href#山东/aa href#安徽/aa href#浙江/aa href#福建/aa href#湖北/aa href#湖南/aa href#广东/aa href#广西/aa href#江西/aa href#四川/aa href#海南/aa href#贵州/aa href#云南/aa href#西藏/aa href#陕西/aa href#甘肃/aa href#青海/aa href#宁夏/aa href#新疆/aa href#港澳/aa href#台湾/aa href#钓鱼岛/aa href#海外/a/divdiv idcontent2a href#朝阳区/aa href#海淀区/aa href#西城区/aa href#东城区/aa href#大兴区/aa href#丰台区/aa href#昌平区/aa href#顺义区/a/divdiv idcontent3a href#三环以内/aa href#管庄/aa href#北苑/aa href#定福庄/aa href#三环到四环之间/aa href#四环到五环之间/aa href#五环到六环之间/a/div/div/div/divdiv classfilter_bottom_rightullia href#i/i谷粒商城配送/a/lilia href#i/i京尊达 /a/lilia href#i/i货到付款/a/lilia href# th:withcheck ${param.hasStock}input idshowHasStock typecheckbox th:checked${#strings.equals(check,1)}仅显示有货/a/lilia href#i/i可配送全球/a/li/ul/div/div!--排序内容--div classrig_tabdiv th:eachproduct:${result.getProducts()}div classicoi classiconfont icon-weiguanzhu/ia href#关注/a/divp classdaa href# img th:src${product.skuImg} classdim/a/pul classtab_imlia href# title黑色img th:src${product.skuImg}/a/li/ulp classtab_Rspan th:text¥${product.skuPrice}¥5199.00/span/pp classtab_JEa href# th:utext${product.skuTitle}Apple iPhone 7 Plus (A1661) 32G 黑色 移动联通电信4G手机/a/pp classtab_PI已有span11万/span热门评价a href#二手有售/a/pp classtab_CPa href# title谷粒商城Apple产品专营店谷粒商城Apple产品.../aa href# title联系供应商进行咨询img src/static/search/img/xcxc.png/a/pdiv classtab_FOdiv classFO_onep自营span谷粒商城自营,品质保证/span/pp满赠span该商品参加满赠活动/span/p/div/div/div/div!--分页--div classfilter_pagediv classpage_wrapspan classpage_span1a classpage_a th:attrpn${result.pageNum - 1} href# th:if${result.pageNum1} 上一页/aa classpage_a th:attrpn${nav},style${nav result.pageNum?border: 0;color:#ee2222;background: #fff:} href#th:eachnav:${result.pageNavs}[[${nav}]]/aa classpage_a th:attrpn${result.pageNum 1} href# th:if${result.pageNumresult.totalPages}下一页 /a/spanspan classpage_span2em共b[[${result.totalPages}]]/b页nbsp;nbsp;到第/eminput classpage_nb typenumber th:value${result.pageNum} min1 th:max${result.totalPages}em页/ema classpage_submit href#确定/a/span/div/div/div/div/div/div /div!--商品精选-- div classJD_jxdiv classJD_jx_titlediv classmtstrong classmt-title商品精选/strongimg src/static/search/image/u-ad.gif alt/divdiv classmcullidiv classmc_imga href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待img src/static/search/img/5a25ffc7N98b35d49.jpg alt/a/divdiv classmc_namea href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待/em/a/divdiv classmc_pricestrongspan1999.00/span/strongspan classmc_ico title购买本商品送赠品赠品/span/divdiv classmc_reva href#15930/aspan人好评/span/div/lilidiv classmc_imga href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待img src/static/search/img/5a25ffc7N98b35d49.jpg alt/a/divdiv classmc_namea href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待/em/a/divdiv classmc_pricestrongspan1999.00/span/strongspan classmc_ico title购买本商品送赠品赠品/span/divdiv classmc_reva href#15930/aspan人好评/span/div/lilidiv classmc_imga href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待img src/static/search/img/5a25ffc7N98b35d49.jpg alt/a/divdiv classmc_namea href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待/em/a/divdiv classmc_pricestrongspan1999.00/span/strongspan classmc_ico title购买本商品送赠品赠品/span/divdiv classmc_reva href#15930/aspan人好评/span/div/lilidiv classmc_imga href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待img src/static/search/img/5a25ffc7N98b35d49.jpg alt/a/divdiv classmc_namea href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待/em/a/divdiv classmc_pricestrongspan1999.00/span/strongspan classmc_ico title购买本商品送赠品赠品/span/divdiv classmc_reva href#15930/aspan人好评/span/div/lilidiv classmc_imga href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待img src/static/search/img/5a25ffc7N98b35d49.jpg alt/a/divdiv classmc_namea href# title【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待em【预约版】华为 HUAWEI 畅享7S 全面屏双摄 4GB 64GB 黑色 移动联通电信4G手机 双卡双待/em/a/divdiv classmc_pricestrongspan1999.00/span/strongspan classmc_ico title购买本商品送赠品赠品/span/divdiv classmc_reva href#15930/aspan人好评/span/div/li/ul/div/div /div!--猜你喜欢-- div classJD_cnxhdiv classJD_jx_titlediv classmtstrong classmt-title猜你喜欢/stronga href#img src/static/search/image/update.png alt换一批/a/divdiv classmcullidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/59bf3c47n91d65c73.jpg alt/a/divdiv classmc_namea href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/a/divdiv classmc_reva href#已有80万人评价/a/divdiv classmc_pricestrongspan1999.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/5a28b5c6Ndec5088f.jpg alt/a/divdiv classmc_namea href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/a/divdiv classmc_reva href#已有80万人评价/a/divdiv classmc_pricestrongspan1999.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/593e4de0n5ff878a4.jpg alt/a/divdiv classmc_namea href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/a/divdiv classmc_reva href#已有80万人评价/a/divdiv classmc_pricestrongspan1999.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/593e4de0n5ff878a4.jpg alt/a/divdiv classmc_namea href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/a/divdiv classmc_reva href#已有80万人评价/a/divdiv classmc_pricestrongspan1999.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/59c493a7N3f9b9c85 (1).jpg alt/a/divdiv classmc_namea href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/a/divdiv classmc_reva href#已有80万人评价/a/divdiv classmc_pricestrongspan1999.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/59c493a7N3f9b9c85 (1).jpg alt/a/divdiv classmc_namea href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机em诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机/em/a/divdiv classmc_reva href#已有80万人评价/a/divdiv classmc_pricestrongspan1999.00/span/strong/div/li/ul/div/div /div!--我的足迹-- div classJD_zujidiv classJD_jx_titlediv classmtstrong classmt-title我的足迹/stronga href#更多浏览记录/a/divdiv classmcullidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/59e58a11Nc38676d5.jpg alt/a/divdiv classmc_pricestrongspan2998.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/5a28acccN73689386.jpg alt/a/divdiv classmc_pricestrongspan88.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/5a1690ddN441b5dce.jpg alt/a/divdiv classmc_pricestrongspan199.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/5a02bde7N7d4453b1.jpg alt/a/divdiv classmc_pricestrongspan799.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/5a122dbeN044ebf19.jpg alt/a/divdiv classmc_pricestrongspan599.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/59c493a7N3f9b9c85.jpg alt/a/divdiv classmc_pricestrongspan699.00/span/strong/div/lilidiv classmc_imga href# title诺基亚 7 (Nokia 7) 4GB64GB 黑色 全网通 双卡双待 移动联通电信4G手机img src/static/search/img/5a08f6f6N5bab2c1c.jpg alt/a/divdiv classmc_pricestrongspan715.00/span/strong/div/li/ul/div/div /divdiv stylewidth: 1210px;margin: 0 auto;margin-bottom: 10pximg src/static/search/img/5a33a2e0N9a04b4af.jpg alt/div !--底部-- footer classfooterdiv classfooter_topullispan/spanh3品类齐全轻松购物/h3/lilispan/spanh3多仓直发极速配发/h3/lilispan/spanh3正品行货精致服务/h3/lilispan/spanh3天天低价畅选无忧/h3/li/ul/divdiv classfooter_centerolli购物指南/lilia href# stylecolor: rgb(114, 114, 114);购物流程/a/lilia href# stylecolor: rgb(114, 114, 114);会员介绍/a/lilia href#生活旅行/a/lilia href# stylecolor: rgb(114, 114, 114);常见问题/a/lilia href#大家电/a/lilia href# stylecolor: rgb(114, 114, 114);联系客服/a/li/ololli配送方式/lilia href# stylecolor: rgb(114, 114, 114);上门自提/a/lilia href# stylecolor: rgb(114, 114, 114);211限时达/a/lilia href# stylecolor: rgb(114, 114, 114);配送服务查询/a/lilia href# stylecolor: rgb(114, 114, 114);配送费收取标准/a/lilia href# stylecolor: rgb(114, 114, 114);海外配送/a/li/ololli支付方式/lilia href# stylecolor: rgb(114, 114, 114);货到付款/a/lilia href# stylecolor: rgb(114, 114, 114);在线支付/a/lilia href# stylecolor: rgb(114, 114, 114);分期付款/a/lilia href# stylecolor: rgb(114, 114, 114);邮局汇款/a/lilia href# stylecolor: rgb(114, 114, 114);公司转账/a/li/ololli售后服务/lilia href# stylecolor: rgb(114, 114, 114);售后政策/a/lilia href# stylecolor: rgb(114, 114, 114);价格保护/a/lilia href# stylecolor: rgb(114, 114, 114);退款说明/a/lilia href# stylecolor: rgb(114, 114, 114);返修/退换货/a/lilia href#取消订单/a/li/ololli特色服务/lilia href# stylecolor: rgb(114, 114, 114);夺宝岛/a/lilia href#DIY装机/a/lilia href# stylecolor: rgb(114, 114, 114);延保服务/a/lilia href# stylecolor: rgb(114, 114, 114);谷粒商城E卡/a/lilia href# stylecolor: rgb(114, 114, 114);谷粒商城通信/a/lilia href# stylecolor: rgb(114, 114, 114);谷粒商城gulimall/a/li/ololli谷粒商城自营覆盖区域/lili谷粒商城已向全国2661个区县提供自br 营配送服务支持货到付款、br POS机刷卡和售后上门服务。/lilia href# stylecolor: rgb(114, 114, 114);查看详情gt;/a/li/ol/divdiv classfooter_footp classfooter_p p1a href#关于我们/aspan/spana href# stylecolor: rgb(114, 114, 114);联系我们/aspan/spana href#联系客服/aspan/spana href# stylecolor: rgb(114, 114, 114);合作招商/aspan/spana href# stylecolor: rgb(114, 114, 114);商家帮助/aspan/spana href# stylecolor: rgb(114, 114, 114);营销中心/aspan/spana href# stylecolor: rgb(114, 114, 114);手机谷粒商城/aspan/spana href# stylecolor: rgb(114, 114, 114);友情链接/aspan/spana href# stylecolor: rgb(114, 114, 114);销售联盟/aspan/spana href# stylecolor: rgb(114, 114, 114);谷粒商城社区/aspan/spana href# stylecolor: rgb(114, 114, 114);风险监测/aspan/spana href#隐私政策/aspan/spana href#谷粒商城公益/aspan/spana href# stylecolor: rgb(114, 114, 114);English Site/aspan/spana href#media amp; IR/a/pp classfooter_pa href#京公网安备 11000002000088号/aspan/spana href#京ICP证070359号/aspan/spana href#互联网药品信息服务资格证编号(京)-经营性-2014-0008/aspan/spana href#新出发京零 字第大120007号/a/pp classfooter_pa href#互联网出版许可证编号新出网证(京)字150号/aspan/spana href#出版物经营许可证/aspan/spana href#网络文化经营许可证京网文[2014]2148-348号/aspan/spana href#违法和不良信息举报电话4006561155/a/pp classfooter_pa href#Copyright © 2004 - 2017 谷粒商城JD.com 版权所有/aspan/spana href#消费者维权热线4006067733/aa href#经营证照/a/pp classfooter_pa href#谷粒商城旗下网站:/aa href#谷粒商城支付/aspan/spana href#谷粒商城云/a/pulli/lili/lili/lili/lili/lili/li/ul/div /footer!--右侧侧边栏-- div classheader_bardiv classheader_bar_boxullia href#img src/static/search/img/wo.png //adiv classdiva href#谷粒商城会员/a/div/lilia href#img src/static/search/img/gouwuche.png //adiv classdiva href#购物车/a/div/lilia href#img src/static/search/img/taoxin.png //adiv classdiva href#我的关注/a/div/lilia href#img src/static/search/img/shi.png //adiv classdiva href#我的足迹/a/div/lilia href#img src/static/search/img/xinxi.png //adiv classdiva href#我的消息/a/div/lilia href#img src/static/search/img/qianbao.png //adiv classdiva href#资讯JIMI/a/div/li/ulullia href#img src/static/search/img/fa3f24a70d38bd439261cb7439e517a5.png //adiv classdiva href#顶部/a/div/lilia href#img src/static/search/img/xinxi.png //adiv classdiva href#反馈/a/div/li/ul/div /divscript$(.sl_ext a:nth-child(1)).hover(function(){$(this).children(b).stop(true).animate({top:3px},50);$(this).children(i).stop(true).animate({top:-23px},50)},function(){$(this).children(b).stop(true).animate({top:24px},50);$(this).children(i).stop(true).animate({top:3px},50)});$(.sl_ext a:nth-child(2)).hover(function(){$(this).children(span).stop(true).animate({top:-1px},100);$(this).children(i).stop(true).animate({top:-14px},100).css({display:none})},function(){$(this).children(span).stop(true).animate({top:14px},100);$(this).children(i).stop(true).animate({top:-1px},100).css({display:block})});$(.tab_im img).hover(function(){var a$(this).prop(src);var index$(this).parents(li).index();$(this).parents(li).css(border,2px solid red).siblings(li).css(border,1px solid #ccc);$(this).parents(ul).prev().find(img).prop(src,a);$(this).parents(ul).siblings(.tab_JE).find(a).eq(list).css(display,block).siblings(a).css(display,none);$(this).parents(ul).siblings(.tab_R).find(span).eq(list).css(display,block).siblings(span).css(display,none)});$(.JD_ipone_one).hover(function(){$(this).children(div).css({display:block})},function(){$(this).children(div).css({display:none})});$(#tabli).click(function() {var i $(this).index();$(#containerdiv).hide().eq(i).show()});$(.dizhi_show).hover(function(){$(.dizhi_con).css({display:block})},function(){$(.dizhi_con).css({display:none})});$(.dizhi_con).hover(function(){$(this).css({display:block})},function(){$(this).css({display:none})});//显示隐藏var $li $(.JD_nav_logodiv:gt(3)).hide();$(.JD_show span).click(function(){if($li.is(:hidden)){$li.show();$(this).css({width:86px}).text(收起 ^);}else{$li.hide();$(.JD_show span).css({width:291px}).text(更多选项 CPU核数、网络、机身颜色 等);}return false;});$(.rig_tabdiv).hover(function(){var i $(this).index();$(this).find(.ico).css({display:block}).stop(true).animate({top:190px},300)},function(){var i $(this).index();$(this).find(.ico).css({display:none}).stop(true).animate({top:230px})});$(.header_main_leftulli).hover(function() {$(this).css({background: #f0f0f0}).find(.header_main_left_main).stop(true).fadeIn(300)}, function() {$(this).css({background: #fff}).find(.header_main_left_a).css({color: #000});$(this).find(.header_main_left_main).stop(true).fadeOut(100)});$(.header_sj a).hover(function() {$(this).css({background: #444})}, function() {$(this).css({background: #6e6568})});$(.nav_li1 a).hover(function(){$(.header_main_left).stop(true).fadeIn()},function(){$(.header_main_left).stop(true).fadeOut()});$(.header_main_left).hover(function(){$(this).stop(true).fadeIn()},function(){$(this).stop(true).fadeOut()});//右侧侧边栏$(.header_bar_box ul li).hover(function() {$(this).css({background: #7A6E6E}).children(.div).css({display: block}).stop(true).animate({left: -60px}, 300)}, function() {$(this).css({background: #7A6E6E}).children(.div).css({display: none}).stop(true).animate({left: 0}, 300)});//底部$(.footer_foot .p1 a).hover(function(){$(this).css(color,#D70B1C)},function(){$(this).css(color,#727272)});$(.footer .footer_center ol li a).hover(function(){$(this).css(color,#D70B1C)},function(){$(this).css(color,#727272)})function searchProducts(name,value){// 原来的页面// var href location.href ;// if(href.includes(?)){// location.href location.href namevalue;// }else {// location.href location.href ?namevalue;// }location.href replaceAndAddParamVal(location.href,name,value,true)}function searchByKeyword(){searchProducts(keyword,$(#keyword_input).val());}$(.page_a).click(function (){var pn $(this).attr(pn);var href location.href;// if(href.includes(pageNum)){// 替换pageNumlocation.href replaceAndAddParamVal(href,pageNum,pn);// }else {// location.href location.href pageNumpn;// }return false;})function replaceAndAddParamVal(url,paramName,replaceVal,forceAdd){var oUrl url.toString();// 没有就添加有就替换if(oUrl.includes(paramName)){if(forceAdd){var nUrl ;if(oUrl.includes(?)){nUrl oUrl paramNamereplaceVal;}else {nUrl oUrl ? paramNamereplaceVal;}return nUrl;}else {var re eval(/(paramName)([^]*)/gi);var nUrl oUrl.replace(re,paramNamereplaceVal)return nUrl;}}else {var nUrl ;if(oUrl.includes(?)){nUrl oUrl paramNamereplaceVal;}else {nUrl oUrl ? paramNamereplaceVal;}return nUrl;}}// 分页 - 点击确定跳转到指定页面$(.page_submit).click(function (){var pageNum $(.page_nb).val();var href location.href;// if(href.includes(pageNum)){// 替换pageNumlocation.href replaceAndAddParamVal(href,pageNum,pageNum);// }else {// location.href location.href pageNumpageNum;// }return false;})// 排序$(.sort_a).click(function (){// 1. 当前被点击的元素变为选中状态// 改变当前元素及兄弟元素的样式// changeStyle(this);$(this).toggleClass(desc); //对当前被选中的元素进行进行class属性的desc隐藏或显示// 2. 跳转到指定位置 sortsaleCount_asc/descvar sort $(this).attr(sort);sort $(this).hasClass(desc)?sort_desc:sort_asc;location.href replaceAndAddParamVal(location.href,sort,sort);// 禁止默认行为a标签的跳转行为return false;})function changeStyle(ele){// color: #333;border-color: #CCC;background: #FFF 默认样式// color: #FFF;border-color: #e4393c;background: #e4393c 高亮样式$(.sort_a).css({color:#333,border-color:#CCC,background:#FFF});$(.sort_a).each(function (){var text $(this).text().replace(↓,).replace(↑,);$(this).text(text);});$(ele).css({color:#FFF,border-color:#e4393c,background:#e4393c});// 改变升降序 toggleClass-对当前被选中的元素进行进行class属性的desc隐藏或显示$(ele).toggleClass(desc);// 加上就是降序不加是升序if($(ele).hasClass(desc)){// 降序var text $(ele).text().replace(↓,).replace(↑,);text text ↓;$(ele).text(text);}else {// 升序var text $(ele).text().replace(↓,).replace(↑,);text text ↑;$(ele).text(text);}}$(#skuPriceSearchBtn).click(function (){// 1. 拼上价格区间的查询条件var from $(#skuPriceFrom).val();var to $(#skuPriceTo).val();var query from _to;location.href replaceAndAddParamVal(location.href,skuPrice,query);})$(#showHasStock).change(function (){if($(this).prop(checked)){location.href replaceAndAddParamVal(location.href,hasStock,1);}else {// 没选中var re eval(/(hasStock)([^]*)/gi);// var re eval(/(hasStock)([^]*)/gi);location.href (location.href).replace(re,);}})/script /body /html 1.9.2 检索服务后端相关代码 1.9.2.1 引入依赖 用于面包屑导航远程调用商品服务根据ID获取名称。注意要引入spring-cloud依赖管理以及版本控制。 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId /dependency 1.9.2.2 vo 包 gulimall-search/src/main/java/com/wen/gulimall/search/vo/ Data public class AttrResponseVo {private Long attrId;/*** 属性名*/private String attrName;/*** 是否需要检索[0-不需要1-需要]*/private Integer searchType;/*** 属性图标*/private String icon;/*** 可选值列表[用逗号分隔]*/private String valueSelect;/*** 属性类型[0-销售属性1-基本属性2-既是销售属性又是基本属性]*/private Integer attrType;/*** 启用状态[0 - 禁用1 - 启用]*/private Long enable;/*** 所属分类*/private Long catelogId;/*** 快速展示【是否展示在介绍上0-否 1-是】在sku中仍然可以调整*/private Integer showDesc;/*** 值类型[0-为单个值1-可以选择多个值]*/private Integer valueType;/*** 所属分组*/private Long attrGroupId;/*** 所属分组名称*/private String groupName;/*** 所属分类名称*/private String catelogName;/*** 所属分类的路径*/private Long[] catelogPath; } Data public class BrandVo {/*** brandId: 0,* brandName: string,*/private Long brandId;private String name; } Data public class SearchParam {private String keyword; // 页面穿过来的全文匹配关键字private Long catalog3Id; // 三级分类的id/*** sortsaleCount_asc/desc* sortskuPrice_asc/desc* sorthotScore_asc/desc*/private String sort; //排序条件/*** 好多的过滤条件* hasStock0/1* skuPrice1_500/_500/500_* bandId1* attrs2_5寸6寸*/private Integer hasStock; // 是否只显示有货,0无库存1有库存private String skuPrice;// 价格区间查询private ListLong brandId;// 按照品牌进行查询可以多选private ListString attrs;// 按照属性进行筛选private Integer pageNum 1;// 页码private String _queryString; // 原生的所有查询条件} Data public class SearchResult {// 查询到的所有商品信息private ListSkuEsModel products;/*** 以下是分页信息*/private Integer pageNum; // 当前页码private Long total; // 总记录数private Integer totalPages; // 总页码private ListInteger pageNavs; // 页码导航栏private ListBrandVo brands; // 当前查询到的结果所有涉及到的品牌private ListCatalogVo catalogs; // 当前查询到的结果所有涉及到的所有分类private ListAttrVo attrs; // 当前查询到的结果所有涉及到的所有属性//以上是返回给页面的所有信息// 面包屑导航数据private ListNavVo navs new ArrayList();private ListLong attrIds new ArrayList();Datapublic static class NavVo{private String navName;private String navValue;private String link;}Datapublic static class BrandVo{private Long brandId;private String brandName;private String brandImg;}Datapublic static class CatalogVo{private Long catalogId;private String catalogName;}Datapublic static class AttrVo{private Long attrId;private String attrName;private ListString attrValue;}} 1.9.2.3 controller Controller public class SearchController {Resourceprivate MallSearchService mallSearchService;/*** 自动将页面提交过来的所有请求查询参数封装成指定的对象* param searchParam* return*/GetMapping(/list.html)public String listPage(SearchParam searchParam, Model model, HttpServletRequest request){searchParam.set_queryString(request.getQueryString());// 1. 根据传递来的页面的查询参数去es中检索商品SearchResult result mallSearchService.search(searchParam);model.addAttribute(result, result);return list;} } 1.9.2.4 service Service public class MallSearchServiceImpl implements MallSearchService {Resourceprivate RestHighLevelClient restHighLevelClient;Resourceprivate ProductFeignService productFeignService;// 根据条件去es中检索Overridepublic SearchResult search(SearchParam searchParam) {// 动态的构建出查询所需要的DSLSearchResult result null;// 1. 准备检索请求SearchRequest searchRequest buildSearchRequest(searchParam);try {// 2. 执行检索请求SearchResponse searchResponse restHighLevelClient.search(searchRequest, GulimallElasticsearchConfig.COMMON_OPTIONS);// 3. 分析响应数据封装成需要的格式result buildSearchResponse(searchParam,searchResponse);} catch (IOException e) {e.printStackTrace();}return result;}/*** 准备检索请求* # 模糊匹配过滤按照属性分类品牌价格区间库存排序分页高亮聚合分析* return*/private SearchRequest buildSearchRequest(SearchParam searchParam) {// 构建DSL语句对象SearchSourceBuilder sourceBuilder new SearchSourceBuilder();/*** 查询模糊匹配过滤按照属性分类品牌价格区间库存*/// 1. 构建bool - queryBoolQueryBuilder boolQuery QueryBuilders.boolQuery();// 1.1 bool - must 模糊匹配if(StrUtil.isNotEmpty(searchParam.getKeyword())){boolQuery.must(QueryBuilders.matchQuery(skuTitle,searchParam.getKeyword()));}// 1.2 bool - filter - 按照三级分类id查询if(searchParam.getCatalog3Id() ! null){boolQuery.filter(QueryBuilders.termQuery(catalogId,searchParam.getCatalog3Id()));}// 1.2 bool -filter - 按照品牌id查询if(CollectionUtil.isNotEmpty(searchParam.getBrandId())){boolQuery.filter(QueryBuilders.termsQuery(brandId,searchParam.getBrandId()));}// 1.2 bool - filter - 按照所有指定的属性进行查询if(CollectionUtil.isNotEmpty(searchParam.getAttrs())){// attrs1_5寸:6寸attrs2_8G:16Gfor (String attrStr : searchParam.getAttrs()) {String[] s attrStr.split(_);String attrId s[0]; // 检索的属性idString[] attrValues s[1].split(:); // 这个属性检索所需要的值BoolQueryBuilder nestedBoolQuery QueryBuilders.boolQuery();nestedBoolQuery.must(QueryBuilders.termQuery(attrs.attrId,attrId));nestedBoolQuery.must(QueryBuilders.termsQuery(attrs.attrValue,attrValues));// ScoreMode.None 不参与评分// 每一个必须都得生成一个nested查询NestedQueryBuilder nestedQuery QueryBuilders.nestedQuery(attrs, nestedBoolQuery, ScoreMode.None);boolQuery.filter(nestedQuery);}}// 1.2 bool -filter - 按照库存是否有进行查询if(searchParam.getHasStock() ! null) {boolQuery.filter(QueryBuilders.termQuery(hasStock, searchParam.getHasStock() 1));}// 1.2 bool -filter - 按照价格区间if(StrUtil.isNotEmpty(searchParam.getSkuPrice())){String[] s searchParam.getSkuPrice().split(_);RangeQueryBuilder rangeQuery QueryBuilders.rangeQuery(skuPrice);if(s.length 2){rangeQuery.gte(s[0]).lte(s[1]);boolQuery.filter(rangeQuery);}else if(s.length 1){if(searchParam.getSkuPrice().startsWith(_)){rangeQuery.lte(s[0]);boolQuery.filter(rangeQuery);}if(searchParam.getSkuPrice().endsWith(_)){rangeQuery.gte(s[0]);boolQuery.filter(rangeQuery);}}}// 把以上所有的条件都拿来进行封装sourceBuilder.query(boolQuery);/*** 排序分页高亮*/// 2.1 排序if(StrUtil.isNotEmpty(searchParam.getSort())){// sortsaleCount_asc/descString[] s searchParam.getSort().split(_);SortOrder order s[1].equalsIgnoreCase(asc)?SortOrder.ASC:SortOrder.DESC;sourceBuilder.sort(s[0],order);}// 2.2 分页 pageSize 5// pageNum:1 from:0 size:5// pageNum:2 form:5 size:5// from (pageNum - 1)*sizesourceBuilder.from((searchParam.getPageNum()-1)*EsConstant.PRODUCT_PAGESIZE);sourceBuilder.size(EsConstant.PRODUCT_PAGESIZE);// 2.3 高亮if(StrUtil.isNotEmpty(searchParam.getKeyword())) {HighlightBuilder builder new HighlightBuilder();builder.field(skuTitle);builder.preTags(b stylecolor:red);builder.postTags(/b);sourceBuilder.highlighter(builder);}/*** 聚合分析*/// 1. 品牌聚合TermsAggregationBuilder brand_agg AggregationBuilders.terms(brand_agg);brand_agg.field(brandId).size(50);// 品牌聚合的子聚合brand_agg.subAggregation(AggregationBuilders.terms(brand_name_agg).field(brandName).size(1));brand_agg.subAggregation(AggregationBuilders.terms(brand_img_agg).field(brandImg).size(1));// TODO 1.聚合brandsourceBuilder.aggregation(brand_agg);// 2. 分类聚合 catalog_aggTermsAggregationBuilder catalog_agg AggregationBuilders.terms(catalog_agg).field(catalogId).size(20);// 分类聚合的子聚合catalog_agg.subAggregation(AggregationBuilders.terms(catalog_name_agg).field(catalogName).size(1));// TODO 1.聚合catalogsourceBuilder.aggregation(catalog_agg);// 3. 属性聚合NestedAggregationBuilder attr_agg AggregationBuilders.nested(attr_agg, attrs);// 聚合出当前所有的attrIdTermsAggregationBuilder attr_id_agg AggregationBuilders.terms(attr_id_agg).field(attrs.attrId).size(10);// 聚合出当前所有的attr_id对应的名字attr_id_agg.subAggregation(AggregationBuilders.terms(attr_name_agg).field(attrs.attrName).size(1));// 聚合出当前所有的attr_id对应的所有可能的属性值attrValueattr_id_agg.subAggregation(AggregationBuilders.terms(attr_value_agg).field(attrs.attrValue).size(50));attr_agg.subAggregation(attr_id_agg);// TODO 1.聚合attrsourceBuilder.aggregation(attr_agg);System.out.println(构建的DSL语句sourceBuilder.toString());SearchRequest searchRequest new SearchRequest(new String[]{EsConstant.PRODUCT_INDEX},sourceBuilder);return searchRequest;}/*** 封装检索结果* param searchParam* param searchResponse* return*/private SearchResult buildSearchResponse(SearchParam searchParam, SearchResponse searchResponse) {SearchResult result new SearchResult();// 1. 返回所有查询到的商品SearchHit[] hits searchResponse.getHits().getHits();ListSkuEsModel skuEsModels new ArrayList();if(ArrayUtil.isNotEmpty(hits)) {for (SearchHit hit : hits) {String sourceAsString hit.getSourceAsString();SkuEsModel skuEsModel JSON.parseObject(sourceAsString, SkuEsModel.class);// keyword非空设置高亮if(StrUtil.isNotEmpty(searchParam.getKeyword())) {String skuTitle hit.getHighlightFields().get(skuTitle).getFragments()[0].string();skuEsModel.setSkuTitle(skuTitle);}skuEsModels.add(skuEsModel);}}result.setProducts(skuEsModels);2. 当前所有商品涉及到的所有属性信息ListSearchResult.AttrVo attrVos new ArrayList();ParsedNested attr_agg searchResponse.getAggregations().get(attr_agg);ParsedLongTerms attr_id_agg attr_agg.getAggregations().get(attr_id_agg);for (Terms.Bucket bucket : attr_id_agg.getBuckets()) {// 1. 获取属性idlong attrId bucket.getKeyAsNumber().longValue();// 2. 获取属性的名字String attrName ((ParsedStringTerms) bucket.getAggregations().get(attr_name_agg)).getBuckets().get(0).getKeyAsString();// 3. 获取属性的值ListString attrValues ((ParsedStringTerms) bucket.getAggregations().get(attr_value_agg)).getBuckets().stream().map(item - {return ((Terms.Bucket) item).getKeyAsString();}).collect(Collectors.toList());SearchResult.AttrVo attrVo new SearchResult.AttrVo();attrVo.setAttrId(attrId);attrVo.setAttrName(attrName);attrVo.setAttrValue(attrValues);attrVos.add(attrVo);}result.setAttrs(attrVos);3. 当前所有商品涉及到的所有品牌信息ListSearchResult.BrandVo brandVos new ArrayList();ParsedLongTerms brand_agg searchResponse.getAggregations().get(brand_agg);for (Terms.Bucket bucket : brand_agg.getBuckets()) {// 1. 获取品牌的idlong brandId bucket.getKeyAsNumber().longValue();// 2. 获取品牌的名字String brandName ((ParsedStringTerms) bucket.getAggregations().get(brand_name_agg)).getBuckets().get(0).getKeyAsString();// 3. 获取平品牌的图片String brandImg ((ParsedStringTerms) bucket.getAggregations().get(brand_img_agg)).getBuckets().get(0).getKeyAsString();SearchResult.BrandVo brandVo new SearchResult.BrandVo();brandVo.setBrandId(brandId);brandVo.setBrandName(brandName);brandVo.setBrandImg(brandImg);brandVos.add(brandVo);}result.setBrands(brandVos);4. 当前所有商品涉及到的所有分类信息ParsedLongTerms catalog_agg searchResponse.getAggregations().get(catalog_agg);ListSearchResult.CatalogVo catalogVos new ArrayList();List? extends Terms.Bucket buckets catalog_agg.getBuckets();if(CollectionUtil.isNotEmpty(buckets)){for (Terms.Bucket bucket : buckets) {SearchResult.CatalogVo catalogVo new SearchResult.CatalogVo();// 获取分类idString keyAsString bucket.getKeyAsString();catalogVo.setCatalogId(Long.parseLong(keyAsString));// 获取分类名称ParsedStringTerms catalog_name_agg bucket.getAggregations().get(catalog_name_agg);String catalog_name catalog_name_agg.getBuckets().get(0).getKeyAsString();catalogVo.setCatalogName(catalog_name);catalogVos.add(catalogVo);}}result.setCatalogs(catalogVos);//5. 分页信息 - 当前页码result.setPageNum(searchParam.getPageNum());5. 分页信息 - 总记录数long total searchResponse.getHits().getTotalHits().value;result.setTotal(total);5. 分页信息 - 总页数Integer totalPages (int)total%EsConstant.PRODUCT_PAGESIZE 0?(int)total/EsConstant.PRODUCT_PAGESIZE:((int)total/EsConstant.PRODUCT_PAGESIZE 1);result.setTotalPages(totalPages);5. 分页信息 - 导航栏ListInteger pageNavs new ArrayList();for(int i 1;itotalPages;i){pageNavs.add(i);}result.setPageNavs(pageNavs);// 6. 构建面包屑导航功能 - 属性if(CollectionUtil.isNotEmpty(searchParam.getAttrs())) {ListSearchResult.NavVo collect searchParam.getAttrs().stream().map(attr - {// 1. 分析每一个参数传过来的参数值SearchResult.NavVo navVo new SearchResult.NavVo();// attrs1_5寸:6寸String[] s attr.split(_);navVo.setNavValue(s[1]);R r productFeignService.attrInfo(Long.parseLong(s[0]));result.getAttrIds().add(Long.parseLong(s[0]));if (r.getCode() 0) {AttrResponseVo data r.getData(attr, new TypeReferenceAttrResponseVo() {});navVo.setNavName(data.getAttrName());} else {navVo.setNavName(s[0]);}// 2. 取消了这个面包屑以后我们要跳转到哪个地方String replace replaceQueryString(searchParam, attr, attrs);navVo.setLink(http://search.gulimall.com/list.html? replace);return navVo;}).collect(Collectors.toList());result.setNavs(collect);}// 品牌、分类的面包屑if(CollectionUtil.isNotEmpty(searchParam.getBrandId())){ListSearchResult.NavVo navs result.getNavs();SearchResult.NavVo navVo new SearchResult.NavVo();navVo.setNavName(品牌);// TODO 远程查询所有品牌R r productFeignService.brandsInfo(searchParam.getBrandId());if(r.getCode() 0){ListBrandVo brand r.getData(brand, new TypeReferenceListBrandVo() {});StringBuffer stringBuffer new StringBuffer();String replace ;for (BrandVo brandVo : brand) {stringBuffer.append(brandVo.getName(););replace replaceQueryString(searchParam,brandVo.getBrandId(),brandId);}navVo.setNavValue(stringBuffer.toString());navVo.setLink(http://search.gulimall.com/list.html? replace);}navs.add(navVo);}return result;}private String replaceQueryString(SearchParam searchParam, String value, String key) {String encode null;try {encode URLEncoder.encode(value, UTF-8);// 前端传递过来的空格被解码成替换成%20encode encode.replace(,%20); //浏览器对空格的编码和Java不一样差异化处理} catch (UnsupportedEncodingException e) {e.printStackTrace();}String replace searchParam.get_queryString().replace(key encode, );return replace;} } 1.9.2.5 远程调用接口 开启openfeign EnableFeignClients // 开启openfeign 接口 gulimall-search/src/main/java/com/wen/gulimall/search/feign/ProductFeignService.java FeignClient(gulimall-product) public interface ProductFeignService {GetMapping(/product/attr/info/{attrId})public R attrInfo(PathVariable(attrId) Long attrId);GetMapping(/product/brand/infos)public R brandsInfo(RequestParam(brandIds) ListLong brandIds); } 1.9.3 远程服务相关接口 1.9.3.1 attrInfo接口 gulimall-product/src/main/java/com/wen/gulimall/product/app/AttrController.java /*** 修改回显信息*/ RequestMapping(/info/{attrId})public R info(PathVariable(attrId) Long attrId){//AttrEntity attr attrService.getById(attrId);AttrRespVo attrRespVo attrService.getAttrInfo(attrId);return R.ok().put(attr, attrRespVo); } gulimall-product/src/main/java/com/wen/gulimall/product/service/AttrService.java AttrRespVo getAttrInfo(Long attrId); gulimall-product/src/main/java/com/wen/gulimall/product/service/impl/AttrServiceImpl.java Cacheable(value attr,key attrinfo:#root.args[0]) Override public AttrRespVo getAttrInfo(Long attrId) {AttrEntity attrEntity this.getById(attrId);AttrRespVo attrRespVo new AttrRespVo();BeanUtils.copyProperties(attrEntity, attrRespVo);if (attrEntity.getCatelogId() ! null) {// 所属分类Long[] catelogPath categoryService.findCatelogPath(attrEntity.getCatelogId());attrRespVo.setCatelogPath(catelogPath);CategoryEntity categoryEntity categoryDao.selectById(attrEntity.getCatelogId());if (categoryEntity ! null) {attrRespVo.setCatelogName(categoryEntity.getName());}}if (attrEntity.getAttrType() ProductConstant.AttrEnum.ATTR_TYPE_BASE.getCode()) {// 所属分组AttrAttrgroupRelationEntity attrAttrgroupRelation attrAttrgroupRelationDao.selectOne(new QueryWrapperAttrAttrgroupRelationEntity().eq(attr_id, attrId));// 可能属性与属性分组没有关联关系if (attrAttrgroupRelation ! null) {attrRespVo.setAttrGroupId(attrAttrgroupRelation.getAttrGroupId());AttrGroupEntity groupEntity attrGroupDao.selectById(attrAttrgroupRelation.getAttrGroupId());if (groupEntity ! null) {attrRespVo.setGroupName(groupEntity.getAttrGroupName());}}}return attrRespVo; } 1.9.3.2 brandsInfo接口 gulimall-product/src/main/java/com/wen/gulimall/product/app/BrandController.java GetMapping(/infos) public R info(RequestParam(brandIds) ListLong brandIds){ListBrandEntity brand brandService.getBrandsByIds(brandIds);return R.ok().put(brand, brand); } gulimall-product/src/main/java/com/wen/gulimall/product/service/BrandService.java ListBrandEntity getBrandsByIds(ListLong brandIds); gulimall-product/src/main/java/com/wen/gulimall/product/service/impl/BrandServiceImpl.java Override public ListBrandEntity getBrandsByIds(ListLong brandIds) {return baseMapper.selectList(new QueryWrapperBrandEntity().in(brand_id,brandIds)); }
http://www.zqtcl.cn/news/279046/

相关文章:

  • 用来备案企业网站国外免费外贸网站
  • 网页背景做的比较好的网站做一个企业网站价格
  • 免费制图网站县级门户网站建设的报告
  • 北京网站建设网怎么用手机做一个网站
  • 网站建设管理办法关于公司门户网站建设的议案
  • 网站开发入职转正申请书体验好的网站
  • 在线精品课程网站开发网站备案号怎么修改
  • 网站建设 风险百度热搜的含义
  • 怎样创作网站公司做网站 要准备哪些素材
  • 网站上的平面海报怎么做南阳企业做网站
  • 佛山公众平台网站推广多少钱wordpress如何调用分类目录
  • 网站推广应该注意什么信息发布平台推广
  • 官方网站案例做网站私活在哪接
  • 做网站滨州wordpress 不同域名
  • 找人做设计的网站广州做网站(信科网络)
  • 如何选择网站做站方向青之峰网站建设
  • 福州哪家网站制作设计高端还实惠设计logo的理念
  • 吉林市网站建设促销式软文案例
  • 三门峡市建设局网站网站开发费用是否资本化
  • 建设部网站官网 施工许可杭州萧山网站开发
  • 福建省建设资格注册管理中心网站竹子建站怎么样
  • 想做一个什么样的网站网站建设功能评价指标
  • 网站建设渠道合作友情链接是免费的吗
  • wordpress如何制作网站网站建设及推广方案ppt
  • 关于建设门户网站的通知重庆刮刮卡制作
  • 网站建设和维护工作内容凡科网免费建站步骤及视频
  • 如何用c 做网站最新疫苗接种最新消息
  • 营销型网站建设报价wordpress 注册 登录界面
  • 网站编辑器哪个好黄骅网站建设价格
  • 爱站工具包官网下载国外cdn