百度搜索网站显示图片,兰州网络推广关键词优化,客户网站建设完成后需要什么,wordpress 插件出错文章目录 概要整体架构流程技术细节小结 概要
在电商、金融、物流等行业中#xff0c;用户历史订单查询是一项常见的业务需求。这项功能允许用户查看他们过去的交易记录#xff0c;包括但不限于购买的商品、服务详情、交易金额、支付状态、配送信息等。对于企业而言#xf… 文章目录 概要整体架构流程技术细节小结 概要
在电商、金融、物流等行业中用户历史订单查询是一项常见的业务需求。这项功能允许用户查看他们过去的交易记录包括但不限于购买的商品、服务详情、交易金额、支付状态、配送信息等。对于企业而言这不仅提升了用户体验还能够帮助分析用户行为优化产品和服务以及处理售后问题。 整体构流程
数据库设计合理设计订单表结构使用索引提高查询效率。 分页查询通过分页技术减少单次查询的数据量提升性能 技术细节
1.Controller层代码:
给前端返回PageResult和成功的信息,调用Service层业务代码
GetMapping(/historyOrders)ApiOperation(查询历史订单)public ResultPageResult historyOrders(OrdersPageQueryDTO orderPaymentDTO){log.info(查询历史订单,参数:{}, orderPaymentDTO);PageResult pageResult orderService.historyOrders(orderPaymentDTO);return Result.success(pageResult);}
2.Service层代码:
首先我们利用PageHelper设置分页数据然后我们需要获取到该订单查询的用户是谁?即获取到用户id后填充到dto中然后利用用户id或订单状态等查询订单数据遍历该数据(该用户的全部订单)分别利用订单id查询每个订单数据的明细,并返回明细集合(因为一个订单会有多个菜品)将订单明细copy到要返回的VO对象中然后将每一个VO对象都加入到全部订单的VO集合中返回集合和页面总数 public PageResult historyOrders(OrdersPageQueryDTO ordersPageQueryDTO) {//设置分页数据PageHelper.startPage(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());//填充该历史订单查询的用户ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());//查询该订单基本数据(订单id)PageOrders page orderMapper.pageQuery(ordersPageQueryDTO);//如果查到数据,则利用订单id查该订单的明细数据ArrayListOrderVO orderVOs new ArrayList();if(page ! null page.size() 0){for (Orders orders : page) {//利用订单id查该订单的明细数据,因为一个订单可能会有多个菜品所以返回的是listListOrderDetail 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 idpageQuery resultTypecom.sky.entity.Ordersselect * from sky-take-out.orderswhereif testnumber ! null and number!and number like concat(%,#{number},%)/ifif testphone ! null and phone!and phone like concat(%,#{phone},%)/ifif testuserId ! nulland user_id #{userId}/ifif teststatus ! nulland status #{status}/ifif testbeginTime ! nulland order_time gt; #{beginTime}/ifif testendTime ! nulland order_time lt; #{endTime}/if/whereorder by order_time desc/select
Select(select * from sky-take-out.order_detail where order_id #{orderId})ListOrderDetail selectByOrderId(Long orderId);
效果演示: