portal商品展示功能逻辑
看下接口:
返回值:
门户商品搜索功能的实现:
根据分类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商品展示功能逻辑相关推荐
- portal无线认证服务器,无线AC配置portal认证功能portal 认证服务器问题
看了下官方portal认证的介绍,关于portal认证服务器和portal web服务器的配置如下: 配置Portal认证 # 配置Portal认证服务器,名称为newpt,IP地址为192.168. ...
- Scrum立会报告+燃尽图(十二月六日总第三十七次):程序功能逻辑优化
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- SSM查看详情功能逻辑代码以及关联码表显示
场景 在后台管理中,有些报表要显示的字段很多,当进入报表的主页面时,往往只显示部分重要的内容,然后在每一条记录的后面添加一个查看详情按钮,通过点击详情按钮,跳转到显示所有信息的页面. 有时一张报表中存 ...
- TDD开发模式实现代码功能逻辑(自己总结,持续更新)
1.先写测试 2.要使程序尽快的通过(及早交付) 3.优化程序结构,尽量使程序尽量快的运行 4.不要怕修改,单元测试会保证接口的正常运行 5.能通过测试后再去重构(消除冗余,优化程序设计) 6.用尽量 ...
- 商城店铺入驻系统_商家入驻开设店铺功能逻辑与流程设计
店铺入驻与开设:商城系统根据运营的需要可以入驻各行各业的商家,商家入驻数量无限制.商家入驻之前平台要设计好店铺分类,特别是o2o频道店铺分类很重要.商家入驻需要三个方面的信息,公司信息和资质,店铺相关 ...
- 连锁门店收银系统源码之要货管理--进销存功能逻辑解析03
连锁多门店收银系统源码之要货管理--进销存逻辑解析03 一,连锁多门店收银系统源码的要货管理综述 1,下级连锁门店(直营店或加盟店)在需要进货时,向总部操作"要货申请" 2,连锁总 ...
- 连锁多门店收银系统之进销存的采购进货单源码功能逻辑
连锁多门店管理收银系统的进销存体系介绍01期之---采购进货单列表页功能介绍. 一,收银收银系统源码的采购进货单列表 1,采购进货单的类型 适应于"商户总部进货"和"直营 ...
- Qt软件在线升级功能-逻辑分享
因为软件需要完成在线升级功能,主要提供给内部人员使用,经常使用U盘拷贝很不方便,所以用了两天时间吧在线升级功能做了出来,开始我也是在网上找资料,看了很多大多都是C/S框架下一个服务器端,一个客户端,所 ...
- php聊天功能逻辑原理,@xxx提及用户,这种功能的实现原理是怎样的?
12 2014-12-13 22:05:54 +08:00 1 在牛客网 http://www.nowcoder.com 用户在我们网站提交的评论,我们会进行敏感词过滤,其算法是基于有限状态机DF ...
最新文章
- struts2拦截器_Struts2 学习笔记(二)
- 修改 Oracle 数据库 sequence(序列) 的 increment (步长)
- 字符编码笔记:ASCII,Unicode和UTF-8(转载)
- 快速傅里叶变换Matlab示例
- android--调用系统浏览器,Android 调用系统浏览器
- 陈睿:架构设计之数据库拆分六大原则
- 运算器为计算机提供了计算与逻辑,【单选题】运算器为计算机提供了计算与逻辑功能,因此称它为()....
- STM32F103:一.(2)STLINK的配置
- 搞AI的产品经理该怎么写PRD?谷歌的导师教你
- 软件测试用例编号命名规则,在TD的测试用例中显示测试用例编号的方法
- Collections.unmodifiableList方法的使用与场景
- Windows图片查看器不出现下一张和上一张按钮
- matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!
- smart原则_用SMART原则,定位好副业目标
- 实用Python识别图片上的数字(转载)
- html5手机端页面布局,移动端H5常见的布局方式有哪些
- 驾照科二科三训练总结
- 【阅读笔记】使用决策树预测泰坦尼克号幸存者实例 - scikit-learn机器学习
- 公司企业邮箱账号格式怎么填?
- 【学习笔记】正则语言的可检验性(性质检验)
热门文章
- eclipse 集成 github
- SQL查询库、表,列等的一些操作
- POJ2186 强联通
- 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )
- 【C 语言】内存四区原理 ( 栈内存属性增长方向 | 栈内存开口方向 | 代码示例 )
- 【EventBus】EventBus 源码解析 ( 注册订阅者 | 注册订阅方法详细过程 )
- 【MATLAB】进阶绘图 ( Bar 条形图 | bar 函数 | bar3 函数 | Bar 条形图样式 | 堆叠条形图 | 水平条形图 | barh 函数 )
- 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
- 【计算理论】自动机设计 ( 设计自动机 | 确定性自动机设计示例 | 确定性与非确定性 | 自动机中的不确定性 )