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

苍穹外卖 项目记录 day09 历史订单

文章目录

  • 查询历史订单
  • 查询订单详情
  • 取消订单
  • 再来一单


查询历史订单

  • 分页查询历史订单
  • 可以根据订单状态查询
  • 展示订单数据时,需要展示的数据包括:下单时间、订单状态、订单金额、订单明细(商品名称、图片)
#OrderController/*** 历史订单查询** @param page* @param pageSize* @param status   订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消* @return*/
@GetMapping("/historyOrders")
@ApiOperation("历史订单查询")
public Result<PageResult> page(int page, int pageSize, Integer status) {PageResult pageResult = orderService.pageQueryUser(page, pageSize, status);return Result.success(pageResult);
}
#OrderService    
/*** 用户端订单分页查询* @param page* @param pageSize* @param status* @return*/PageResult pageQueryUser(int page, int pageSize, Integer status);
#OrderServiceImpl/*** 用户端订单分页查询** @param pageNum* @param pageSize* @param status* @return*/public PageResult pageQuery4User(int pageNum, int pageSize, Integer status) {// 设置分页PageHelper.startPage(pageNum, pageSize);OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());ordersPageQueryDTO.setStatus(status);// 分页条件查询Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);List<OrderVO> list = new ArrayList();// 查询出订单明细,并封装入OrderVO进行响应if (page != null && page.getTotal() > 0) {for (Orders orders : page) {Long orderId = orders.getId();// 订单id// 查询订单明细List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orderId);OrderVO orderVO = new OrderVO();BeanUtils.copyProperties(orders, orderVO);orderVO.setOrderDetailList(orderDetails);list.add(orderVO);}}return new PageResult(page.getTotal(), list);
}
/**OrderMapper* 分页条件查询并按下单时间排序* @param ordersPageQueryDTO*/
Page<Orders> pageQuery(OrdersPageQueryDTO ordersPageQueryDTO);
#OrderMapper.xml
<select id="pageQuery" resultType="Orders">select * from 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>
/**  OrderDetailMapper* 根据订单id查询订单明细* @param orderId* @return*/
@Select("select * from order_detail where order_id = #{orderId}")
List<OrderDetail> getByOrderId(Long orderId);

查询订单详情

根据订单id查询订单详情 user/order/orderDetail/:id GET

/*** 查询订单详情* @param id* @return*/
@GetMapping("/orderDetail/{id}")
@ApiOperation("查询订单详情")
public Result<OrderVO> details(@PathVariable("id") Long id){OrderVO orderVO = orderService.details(id);return Result.success(orderVO);
}/***  订单详情* @param id* @return*/
OrderVO details(Long id);/**** 查询订单详情* @param id* @return*/
@Override
public OrderVO details(Long id) {//根据id查询订单Orders orders = orderMapper.getById(id);//查询该订单对应得菜品/套餐明显List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(orders.getId());// 将该订单及其详情封装到OrderVO并返回OrderVO  orderVO = new OrderVO();BeanUtils.copyProperties(orders,orderVO);orderVO.setOrderDetailList(orderDetailList);return orderVO;
}/*** 根据id查询订单* @param id* @return*/
@Select("select * from orders where id = #{id}")
Orders getById(Long id);

取消订单

业务规则:

  • 待支付和待接单状态下,用户可直接取消订单
  • 商家已接单状态下,用户取消订单需电话沟通商家
  • 派送中状态下,用户取消订单需电话沟通商家
  • 如果在待接单状态下取消订单,需要给用户退款
  • 取消订单后需要将订单状态修改为“已取消”

PUT /user/order/cancel/{id}

/*** 用户取消订单* @param id* @return* @throws Exception*/
@PutMapping("/cancel/{id}")
@ApiOperation("取消订单")
public Result cancel(@PathVariable("id") Long id) throws Exception{//根据传入的订单id 取消订单orderService.userCancelById(id);return Result.success();
}/***  用户取消订单* @param id* @throws Exception*/
void userCancelById(Long id) throws Exception;/*** 取消订单* @param id* @throws Exception*/
@Override
public void userCancelById(Long id) throws Exception {//根据id查询订单Orders ordersDB = orderMapper.getById(id);if(ordersDB == null){//订单不存在throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);}//订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消if(ordersDB.getStatus() > 2){throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}Orders orders = new Orders();orders.setId(ordersDB.getId());//订单处于待接单状态下取消 需要进行退款if(ordersDB.getStatus().equals(Orders.TO_BE_CONFIRMED)){//调用微信支付退款接口weChatPayUtil.refund(ordersDB.getNumber(),//商户订单号ordersDB.getNumber(),//商户退款单号new BigDecimal(0.01),//退款金额 单位 元new BigDecimal(0.01)// 原订单金额);//支付状态修改为 已退款orders.setPayStatus(Orders.REFUND);}//更新订单状态 取消原因 取消时间orders.setStatus(Orders.CANCELLED);orders.setCancelReason("用户取消");orders.setCancelTime(LocalDateTime.now());orderMapper.update(orders);
}

再来一单

POST /user/order/repetition/{id}

将原订单商品重新加入购物车中

/*** 再来一单* @param id* @return*/
@PostMapping("/repetition/{id}")
@ApiOperation("再来一单")
public Result repetition(@PathVariable Long id){orderService.repetition(id);return Result.success();
}/*** 再来一单* @param id*/
void repetition(Long id);/*** 再来一单* @param id*/
@Transactional
@Override
public void repetition(Long id) {//查询当前用户idLong userId = BaseContext.getCurrentId();//根据订单id查询当前订单详情List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(id);//将订单详情对象转换为购物车对象List<ShoppingCart> shoppingCartList = orderDetailList.stream().map(x-> {ShoppingCart shoppingCart = new ShoppingCart();//将原订单详情里面的菜品信息重新复制到购物车对象BeanUtils.copyProperties(x, shoppingCart, "id");shoppingCart.setUserId(userId);shoppingCart.setCreateTime(LocalDateTime.now());return shoppingCart;}).collect(Collectors.toList());//将购物车对像批量添加到数据库shoppingCartMapper.insertBatch(shoppingCartList);
}
http://www.lryc.cn/news/527431.html

相关文章:

  • 记录 | 基于Docker Desktop的MaxKB安装
  • WordPress web-directory-free插件存在本地文件包含导致任意文件读取漏洞(CVE-2024-3673)
  • LLM:BERT or BART 之BERT
  • EtherCAT主站IGH-- 18 -- IGH之fsm_mbox_gateway.h/c文件解析
  • 深入探讨防抖函数中的 this 上下文
  • 【AI论文】魔鬼在细节:关于在训练专用混合专家模型时实现负载均衡损失
  • Gurobi基础语法之addVar 和 addVars
  • C语言学习阶段性总结(五)---函数
  • K8S 快速实战
  • java后端之事务管理
  • 【Redis】缓存+分布式锁
  • 二分查找题目:寻找两个正序数组的中位数
  • 网络安全 | F5-Attack Signatures详解
  • Redis --- 分布式锁的使用
  • LeetCode100之全排列(46)--Java
  • goframe 博客分类文章模型文档 主要解决关联
  • 【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
  • 安卓日常问题杂谈(一)
  • Kitchen Racks 2
  • 嵌入式学习笔记-杂七杂八
  • 14-7C++STL的stack容器
  • Vue 3 中的响应式系统:ref 与 reactive 的对比与应用
  • 物业巡更系统助推社区管理智能化与服务模式创新的研究与应用
  • windows蓝牙驱动开发-生成和发送蓝牙请求块 (BRB)
  • Linux网络之序列化和反序列化
  • linux设置mysql远程连接
  • react-native网络调试工具Reactotron保姆级教程
  • erase() 【删数函数】的使用
  • 性能测试丨内存火焰图 Flame Graphs
  • AIGC的企业级解决方案架构及成本效益分析