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

订单搜索分页查询业务

文章目录

    • 概要
    • 整体架构流程
    • 技术细节
    • 小结

概要

订单搜索分页查询是电商、物流、零售等众多行业中的常见需求,主要用于管理和分析大量订单数据.

需求分析以及接口设计

技术细节

1.Controller层:

根据接口设计来写

@ApiOperation("订单搜索")@GetMapping("/conditionSearch")public Result<PageResult> orderSearch(OrdersPageQueryDTO ordersPageQueryDTO){log.info("订单搜索:{}", ordersPageQueryDTO);PageResult pageResult = orderService.conditionSearch(ordersPageQueryDTO);return Result.success(pageResult);}

2.Service层:

  • 设置分页数据
  • 查询所有订单页面对象
  • 由于部分订单状态需要额外返回订单信息,需要将Orders转为OrderVO
  • 遍历所有订单
  • 将Orders的属性都copy到OrderVO中
  • 设置OrderVO其他字段
  • 依次添加到VOList集合中
  • 返回VOList集合
public PageResult conditionSearch(OrdersPageQueryDTO ordersPageQueryDTO) {//设置分页数据PageHelper.startPage(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());//查询到所有订单页面对象Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);//部分订单状态需要额外返回订单信息,将Orders转化为OrderVOArrayList<OrderVO> orderVOList = new ArrayList<>();//获取到所有订单List<Orders> ordersList = page.getResult();if (!CollectionUtils.isEmpty(ordersList)) {for (Orders orders : ordersList) {OrderVO orderVO = new OrderVO();BeanUtils.copyProperties(orders,orderVO);//拼接订单菜品的字符串//1.查询订单明细List<OrderDetail> orderDetailList = orderDetailMapper.selectByOrderId(orders.getId());//2.将每一条订单菜品信息拼接为字符串(格式:宫保鸡丁*3)List<String> orderDishStrList = orderDetailList.stream().map(x -> {String orderDishStr = x.getName() + "*" + x.getNumber() + ";";return orderDishStr;}).collect(Collectors.toList());String orderDishStr1 = String.join("", orderDishStrList);orderVO.setOrderDishes(orderDishStr1);//3.依次将VO添加到集合orderVOList.add(orderVO);}}return new PageResult(page.getTotal(), ordersList);}

3.Mapper层:

@Select("select * from `sky-take-out`.order_detail where order_id = #{orderId}")List<OrderDetail> selectByOrderId(Long orderId);
<select id="pageQuery" resultType="com.sky.entity.Orders">select * from `sky-take-out`.orders<where><if test="number != null and number!=''">and number like concat('%',#{number},'%')</if><if test="phone != null and phone!=''">and phone like concat('%',#{phone},'%')</if><if test="userId != null">and user_id = #{userId}</if><if test="status != null">and status = #{status}</if><if test="beginTime != null">and order_time &gt;= #{beginTime}</if><if test="endTime != null">and order_time &lt;= #{endTime}</if></where>order by order_time desc</select>

 

效果展示

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 创建了Vue项目,需要导入什么插件以及怎么导入
  • [HITCON 2017]SSRFme 1
  • LInux:循环语句
  • Servlet (1)
  • 【2024】InfluxDB v2 介绍和安装使用(1)
  • Thread-Caching Malloc 简介
  • 第十九天内容
  • 君正T41开发板环境搭建_串口登陆_配置IP_telnet登陆_mount挂载_安装交叉编译工具链
  • Redis篇之持久化数据恢复
  • Native Programs(本机程序)
  • Python爬虫-中国汽车市场月销量数据
  • 服务器并发模型
  • 互联网家政小程序,为大众带来高效、便捷的服务
  • 多个线程同时调用接口
  • 【Canvas与艺术】六角大楼
  • [译]CSS 居中(Center)方法大合集
  • Angularjs之国际化
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ECMAScript入门(七)--Module语法
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java 最常见的 200+ 面试题:面试必备
  • Java多线程(4):使用线程池执行定时任务
  • JS学习笔记——闭包
  • Python3爬取英雄联盟英雄皮肤大图
  • Terraform入门 - 3. 变更基础设施
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • ubuntu 下nginx安装 并支持https协议
  • vue:响应原理
  • 来,膜拜下android roadmap,强大的执行力
  • 排序算法学习笔记
  • 使用 QuickBI 搭建酷炫可视化分析
  • 项目实战-Api的解决方案
  • 再次简单明了总结flex布局,一看就懂...
  • 你对linux中grep命令知道多少?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #includecmath
  • #QT(QCharts绘制曲线)
  • #QT(智能家居界面-界面切换)
  • #职场发展#其他
  • (9)STL算法之逆转旋转
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 无限分类
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .net6使用Sejil可视化日志
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强
  • .NET与 java通用的3DES加密解密方法