portal商品展示功能逻辑
看下接口:
返回值:
门户商品搜索功能的实现:
根据分类id进行搜索,根据关键词进行搜索,并按照一定的顺序排序
业务逻辑:
1、查询分类是否存在。
2、如果分类存在,则递归分类,展示父类商品,子类商品,孙子类商品,递归获取商品的分类id,获取到该id下面的子类商品
3、根据关键字和分类id查询商品
//前端显示商品列表,并按照一定的顺序排序
@Override
public ServerResponse<PageInfo> getPortalProductList(Integer categoryId, String keyword, String orderBy, Integer pageNum, Integer pageSize) {
if (StringUtils.isBlank(keyword) && categoryId == null) {
return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(), ResponseCode.ILLEGAL_ARGUMENT.getDesc());
}
List<Integer> categoryIdList = Lists.newArrayList();
//这里需要根据商品id来判断这个类别是否存在,如果分类不存在,则返回给前台一个空即可
if (categoryId != null) {
mmall_category category = categoryMapper.selectByPrimaryKey(categoryId);
if (category == null && StringUtils.isBlank(keyword)) {
//如果分类为空,则返回该类别为空的结果集,不报错
PageHelper.startPage(pageNum, pageSize);
List<ProductListVo> list = Lists.newArrayList();
PageInfo info = new PageInfo(list);
return ServerResponse.createBySuccess(info);
}
//商品展示的时候,当我们在搜索某一类商品的时候,它会有很多子类,比如手机类别,有华为型号的,华为型号下面又有很多子类,所以递归函数来调用 categoryIdList = categoryService.getDeepCategory(category.getId()).getData();
}
//接下来判断关键字是否为空
if (keyword != null) {
keyword = new StringBuilder().append("%").append(keyword).append("%").toString();
}
//排序处理
PageHelper.startPage(pageNum, pageSize);
/* if (StringUtils.isNotBlank(orderBy)){
//分页的排序
if (Const.ProductListOrderBy.PRICE_ASC_DESC.contains(orderBy)){
//进行分割
String[] orderArray=orderBy.split("_");
//排序
PageHelper.orderBy(orderArray[0]+" "+orderArray[1]);
}
}*/
List<mmall_product> productList = productMapper.selectProtalProduct(StringUtils.isBlank(keyword) ? null : keyword, categoryIdList.size() == 0 ? null : categoryIdList);
List<ProductListVo> productListVoList = Lists.newArrayList();
if (!CollectionUtils.isEmpty(productList)) {
for (mmall_product product : productList) {
ProductListVo productListVo = this.productConvertVo(product);
productListVoList.add(productListVo);
}
}
PageInfo info = new PageInfo(productListVoList);
return ServerResponse.createBySuccess(info);
}
递归的代码:
//这里递归获取子节点,即当前节点下的所以子节点以及子节点的节点都要列出
@Override
public ServerResponse<List<Integer>> getDeepCategory(Integer categoryId) {
Set<mmall_category> categorySet= Sets.newHashSet();//这是guava缓存的技巧
//在这里进行初始化Set集合
findChildrenCategory(categorySet,categoryId);
List<Integer> list= Lists.newArrayList();
if (categoryId!=null){
for (mmall_category categoryItem:categorySet) {
list.add(categoryItem.getId());
}
}
return ServerResponse.createBySuccess(list);
}
//递归代码的实现
public Set<mmall_category> findChildrenCategory(Set<mmall_category> categorySet,Integer categoryId){
mmall_category category=mmall_categoryMapper.selectByPrimaryKey(categoryId);
if (category!=null){
categorySet.add(category);
}
//categorySet其实是用来存储这些列表数据的
//查找子节点递归函数必须有一个终止条件
List<mmall_category> categoryList=mmall_categoryMapper.selectCategoryByParentId(categoryId);
for (mmall_category categoryItem: categoryList) {
findChildrenCategory(categorySet,categoryItem.getId());
}
return categorySet;
}
portal商品展示功能逻辑的更多相关文章
- OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现
这周的主要任务:userInfo页面Modify逻辑bug修复,search功能逻辑实现. (一)Modify逻辑bug修复: 这里存在的bug就是在我们不重置password的时候依照前面的逻辑是不 ...
- 使用类似GeoJson的数据生成物体(建筑等)的功能逻辑
GeoJson作为一种模型传输格式, 用的最多的就是地图里面的各种简单模型了, 比如下图中很贴切的俄罗斯方块楼: 它的格式大概就是下面这样: { "type": "Fea ...
- day79:luffy:注册之对手机号的验证&实现基本的注册功能逻辑&点击获取验证码&redis
目录 1.前端和后端对于手机号的验证 2.实现基本的注册功能-不包括验证码 3.点击获取验证码 4.解决登录不上Xadmin的bug 5.redis register.vue页面 <templa ...
- Hadoop学习笔记之六:HDFS功能逻辑(2)
Lease(租约) HDFS(及大多数分布式文件系统)不支持文件并发写,Lease是HDFS用于保证唯一写的手段. Lease可以看做是一把带时间限制的写锁,仅持有写锁的客户端可以写文件. 租约的有效 ...
- Scrum立会报告+燃尽图(十二月六日总第三十七次):程序功能逻辑优化
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- Hadoop学习笔记之五:HDFS功能逻辑(1)
Block Report DataNode会周期性(默认1小时)将自身节点全部block信息发送给NameNode,以让NameNode正确确维护block信息. 在Block Report的数据源D ...
- Python日志功能与处理逻辑
前言 在应用程序执行过程中,我们希望通过规范格式输出程序执行的详细信息,这时我们需要用到日志功能.在Python语言中,有个內建模块logging能够很好的实现日志功能.整体来说,logging配置可 ...
- Portal相关技术及架构
Portal以用户为中心,提供统一的用户登录,实现信息的集中访问,集成了办公商务一体的工作流环境.利用Portal技术,可以方便地将员工所需要的,来源于各种渠道的信息资料集成在一个统一的桌面视窗之内. ...
- AEAI Portal V3.5.2门户集成平台发版说明
AEAI Portal门户集成平台为数通畅联的核心产品,本着分享传递的理念,数通畅联将Portal_server.Portal_portlet两个项目开源,目的在于满足客户与伙伴的OEM需求,以及为广 ...
随机推荐
- NO.1:自学tensorflow之路------神经网络背景知识
引言 从本周,我将开始tensorflow的学习.手头只有一本<tensorflow:实战Google深度学习框架>,这本书对于tensorflow的入门有一定帮助.tensorflow中 ...
- Node2vec 代码分析
Node2vec 代码从Github上clone到本地,主要是main.py和node2vec.py两个文件. 下面把我的读代码注释放到上面来, import numpy as np import n ...
- ab命令做压测测试
1. 背景:互联网发达的今天,大大小小的网站如雨后春笋,不断出现,但是想要做出一个网站很简单,但是想要做好一个网站,非常非常难,首先:网站做好之后的功能怎么样这都是次要的,主要的是你的网站能承受怎么样 ...
- spark总结——转载
转载自: spark总结 第一个Spark程序 /** * 功能:用spark实现的单词计数程序 * 环境:spark 1.6.1, scala 2.10.4 */ // 导入相关类库impor ...
- python中取整的几种方法
#encoding:utf-8import math #向上取整print "math.ceil---"print "math.ceil(2.3) => " ...
- SQL连接的方法
1.创建连接字符串 string con = "Data Source=127.0.0.1;Initial Catalog=dingdan;Integrated Security=True& ...
- 20172311-ASL测试 2018-1938872补充博客
20172311-ASL测试 2018-1938872补充博客 课程:<程序设计与数据结构> 班级: 1723 姓名: 赵晓海 学号: 20172311 实验教师:王志强老师 测试日期:2 ...
- 20162328蔡文琛 week06
20162328 2017-2018-1 <程序设计与数据结构>第6周学习总结 教材学习内容总结 队列元素按FIFO的方式处理----最先进入的元素最先离开. 队列是保存重复编码k值得一种 ...
- Right-BICEP测试四则运算2
根据Right-BICEP单元测试的方法,我对我写的四则运算2的程序进行了测试: 1.测试能否控制使用乘除 有乘除 无乘除 2.测试是否能加括号 不加括号 加括号 3.能否控制结果没有负数 无负数 4 ...
- ACM ICPC 2016–2017, NEERC, Northern Subregional Contest Problem J. Java2016
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229510 时间限制:2s 空间限制:256MB 题目大意: 给定一个数字c 用 " ...