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

用户史订单查询业务

文章目录

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

概要

在电商、金融、物流等行业中,用户历史订单查询是一项常见的业务需求。这项功能允许用户查看他们过去的交易记录,包括但不限于购买的商品、服务详情、交易金额、支付状态、配送信息等。对于企业而言,这不仅提升了用户体验,还能够帮助分析用户行为,优化产品和服务,以及处理售后问题。

整体构流程

数据库设计:合理设计订单表结构,使用索引提高查询效率。
分页查询:通过分页技术减少单次查询的数据量,提升性能

技术细节

1.Controller层代码:

给前端返回PageResult和成功的信息,调用Service层业务代码

@GetMapping("/historyOrders")@ApiOperation("查询历史订单")public Result<PageResult> historyOrders(OrdersPageQueryDTO orderPaymentDTO){log.info("查询历史订单,参数:{}", orderPaymentDTO);PageResult pageResult = orderService.historyOrders(orderPaymentDTO);return Result.success(pageResult);}

2.Service层代码:

  1. 首先我们利用PageHelper设置分页数据
  2. 然后我们需要获取到该订单查询的用户是谁?即获取到用户id后填充到dto中
  3. 然后利用用户id或订单状态等查询订单数据
  4. 遍历该数据(该用户的全部订单)
  5. 分别利用订单id查询每个订单数据的明细,并返回明细集合(因为一个订单会有多个菜品)
  6. 将订单明细copy到要返回的VO对象中
  7. 然后将每一个VO对象都加入到全部订单的VO集合中
  8. 返回集合和页面总数
 public PageResult historyOrders(OrdersPageQueryDTO ordersPageQueryDTO) {//设置分页数据PageHelper.startPage(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());//填充该历史订单查询的用户ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());//查询该订单基本数据(订单id)Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);//如果查到数据,则利用订单id查该订单的明细数据ArrayList<OrderVO> orderVOs = new ArrayList<>();if(page != null && page.size() > 0){for (Orders orders : page) {//利用订单id查该订单的明细数据,因为一个订单可能会有多个菜品所以返回的是listList<OrderDetail> orderDetails = orderDetailMapper.selectByUserId(orders.getId());OrderVO ordersVO = new OrderVO();BeanUtils.copyProperties(orders,ordersVO);//将这个订单的菜品明细都填充到该菜品的VO中ordersVO.setOrderDetailList(orderDetails);//将该订单加入到分页VO中orderVOs.add(ordersVO);}}return new PageResult(page.getTotal(),orderVOs);}

 Mapper层:

<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>
@Select("select * from `sky-take-out`.order_detail where order_id = #{orderId}")List<OrderDetail> selectByOrderId(Long orderId);

效果演示:

http://www.lryc.cn/news/410018.html

相关文章:

  • 第8节课:CSS布局与样式——掌握盒模型与定位的艺术
  • electron 主进程和渲染进程
  • redis的高可用及性能管理和雪崩
  • php基础语法
  • js抓取短信验证码发送
  • 视频怎么加密?常见的四种视频加密方法和软件
  • 聚焦全局应用可用性的提升策略,详解GLSB是什么
  • 无水印下载视频2——基于tkinter完成头条视频的下载
  • Java学习Day17:基础篇7
  • Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步
  • 手撕数据结构02--二分搜索(附源码)
  • 单片机工程师继续从事硬件设计还是涉足 Linux 开发?
  • 《昇思25天学习打卡营第25天|第28天》
  • Flutter Dio网络请求报错FormatException: Unexpected character
  • 关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)
  • 第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营 <二>
  • C# 关于Linq延迟查询
  • Navicat For Mysql连接Mysql8.0报错:客户端不支持服务器请求的身份验证协议
  • 以西门子winCC为代表的组态界面,还是有很大提升空间的。
  • HomeServer平台选择,介绍常用功能
  • 记录一个k8s集群zookeeper部署过程
  • TapData 信创数据源 | 国产信创数据库 TiDB 数据迁移指南,加速国产化进程,推进自主创新建设
  • 开始写人工智能
  • 盘点.软件测试模型
  • 燃气安全无小事,一双专业劳保鞋让你步步安心!
  • springboot校园服装租赁系统-计算机毕业设计源码30824
  • 线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析
  • 掌握采购询价软件:高效比较供应商报价的技巧
  • AMQP-核心概念-终章
  • 在WPF中使用WebView2详解