看下接口:

返回值:

门户商品搜索功能的实现:

根据分类id进行搜索,根据关键词进行搜索,并按照一定的顺序排序

业务逻辑:

1、查询分类是否存在。

2、如果分类存在,则递归分类,展示父类商品,子类商品,孙子类商品,递归获取商品的分类id,获取到该id下面的子类商品

3、根据关键字和分类id查询商品

 //前端显示商品列表,并按照一定的顺序排序@Overridepublic 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);}

  

递归的代码:

//这里递归获取子节点,即当前节点下的所以子节点以及子节点的节点都要列出@Overridepublic 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商品展示功能逻辑相关推荐

  1. portal无线认证服务器,无线AC配置portal认证功能portal 认证服务器问题

    看了下官方portal认证的介绍,关于portal认证服务器和portal web服务器的配置如下: 配置Portal认证 # 配置Portal认证服务器,名称为newpt,IP地址为192.168. ...

  2. Scrum立会报告+燃尽图(十二月六日总第三十七次):程序功能逻辑优化

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  3. SSM查看详情功能逻辑代码以及关联码表显示

    场景 在后台管理中,有些报表要显示的字段很多,当进入报表的主页面时,往往只显示部分重要的内容,然后在每一条记录的后面添加一个查看详情按钮,通过点击详情按钮,跳转到显示所有信息的页面. 有时一张报表中存 ...

  4. TDD开发模式实现代码功能逻辑(自己总结,持续更新)

    1.先写测试 2.要使程序尽快的通过(及早交付) 3.优化程序结构,尽量使程序尽量快的运行 4.不要怕修改,单元测试会保证接口的正常运行 5.能通过测试后再去重构(消除冗余,优化程序设计) 6.用尽量 ...

  5. 商城店铺入驻系统_商家入驻开设店铺功能逻辑与流程设计

    店铺入驻与开设:商城系统根据运营的需要可以入驻各行各业的商家,商家入驻数量无限制.商家入驻之前平台要设计好店铺分类,特别是o2o频道店铺分类很重要.商家入驻需要三个方面的信息,公司信息和资质,店铺相关 ...

  6. 连锁门店收银系统源码之要货管理--进销存功能逻辑解析03

    连锁多门店收银系统源码之要货管理--进销存逻辑解析03 一,连锁多门店收银系统源码的要货管理综述 1,下级连锁门店(直营店或加盟店)在需要进货时,向总部操作"要货申请" 2,连锁总 ...

  7. 连锁多门店收银系统之进销存的采购进货单源码功能逻辑

    连锁多门店管理收银系统的进销存体系介绍01期之---采购进货单列表页功能介绍. 一,收银收银系统源码的采购进货单列表 1,采购进货单的类型 适应于"商户总部进货"和"直营 ...

  8. Qt软件在线升级功能-逻辑分享

    因为软件需要完成在线升级功能,主要提供给内部人员使用,经常使用U盘拷贝很不方便,所以用了两天时间吧在线升级功能做了出来,开始我也是在网上找资料,看了很多大多都是C/S框架下一个服务器端,一个客户端,所 ...

  9. php聊天功能逻辑原理,@xxx提及用户,这种功能的实现原理是怎样的?

    12 2014-12-13 22:05:54 +08:00   1 在牛客网 http://www.nowcoder.com 用户在我们网站提交的评论,我们会进行敏感词过滤,其算法是基于有限状态机DF ...

最新文章

  1. struts2拦截器_Struts2 学习笔记(二)
  2. 修改 Oracle 数据库 sequence(序列) 的 increment (步长)
  3. 字符编码笔记:ASCII,Unicode和UTF-8(转载)
  4. 快速傅里叶变换Matlab示例
  5. android--调用系统浏览器,Android 调用系统浏览器
  6. 陈睿:架构设计之数据库拆分六大原则
  7. 运算器为计算机提供了计算与逻辑,【单选题】运算器为计算机提供了计算与逻辑功能,因此称它为()....
  8. STM32F103:一.(2)STLINK的配置
  9. 搞AI的产品经理该怎么写PRD?谷歌的导师教你
  10. 软件测试用例编号命名规则,在TD的测试用例中显示测试用例编号的方法
  11. Collections.unmodifiableList方法的使用与场景
  12. Windows图片查看器不出现下一张和上一张按钮
  13. matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!
  14. smart原则_用SMART原则,定位好副业目标
  15. 实用Python识别图片上的数字(转载)
  16. html5手机端页面布局,移动端H5常见的布局方式有哪些
  17. 驾照科二科三训练总结
  18. 【阅读笔记】使用决策树预测泰坦尼克号幸存者实例 - scikit-learn机器学习
  19. 公司企业邮箱账号格式怎么填?
  20. 【学习笔记】正则语言的可检验性(性质检验)

热门文章

  1. eclipse 集成 github
  2. SQL查询库、表,列等的一些操作
  3. POJ2186 强联通
  4. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )
  5. 【C 语言】内存四区原理 ( 栈内存属性增长方向 | 栈内存开口方向 | 代码示例 )
  6. 【EventBus】EventBus 源码解析 ( 注册订阅者 | 注册订阅方法详细过程 )
  7. 【MATLAB】进阶绘图 ( Bar 条形图 | bar 函数 | bar3 函数 | Bar 条形图样式 | 堆叠条形图 | 水平条形图 | barh 函数 )
  8. 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
  9. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
  10. 【计算理论】自动机设计 ( 设计自动机 | 确定性自动机设计示例 | 确定性与非确定性 | 自动机中的不确定性 )