1.关于业务流程被影响的功能有 用户的订单支付功能和取消订单功能,员工的取消订单和拒单功能 一共四个
2.订单支付功能代码
2.1controller
@PutMapping("/payment") @ApiOperation("订单支付") public Result<OrderPaymentVO> payment(@RequestBody OrdersPaymentDTO ordersPaymentDTO) throws Exception { log.info("订单支付:{}", ordersPaymentDTO); //下面这句注释的代码才是真正的业务逻辑,由于本项目缺少一些文件,所以直接采用修改订单状态来模拟支付成功 /* OrderPaymentVO orderPaymentVO = orderService.payment(ordersPaymentDTO); log.info("生成预支付交易单:{}", orderPaymentVO); return Result.success(orderPaymentVO);*/ orderService.paySuccess(ordersPaymentDTO.getOrderNumber()); return Result.success(); }
2.2 serviceImpl
/** * 支付成功,修改订单状态 * * @param outTradeNo */ @Transactional public void paySuccess(String outTradeNo) { // 根据订单号查询订单 Orders ordersDB = orderMapper.getByNumber(outTradeNo); // 根据订单id更新订单的状态、支付方式、支付状态、结账时间 Orders orders = Orders.builder() .id(ordersDB.getId()) .status(Orders.TO_BE_CONFIRMED) .payStatus(Orders.PAID) .checkoutTime(LocalDateTime.now()) .build(); orderMapper.update(orders); }
3. 用户取消订单功能
2.1controller
@PutMapping("/cancel") @ApiOperation("取消订单") public Result cancelById(@RequestBody OrdersCancelDTO ordersCancelDTO) throws Exception { log.info("取消订单,ordersCancelDTO:{}",ordersCancelDTO); orderService.cancelById(ordersCancelDTO); return Result.success(); }
2.2serviceImpl
@Override public void cancelById(OrdersCancelDTO ordersCancelDTO) { //获取订单id Long orderId = ordersCancelDTO.getId(); Orders orderDB = orderMapper.getById(orderId); Orders orders = new Orders(); if (orderDB.getPayStatus().equals(Orders.PAID)){ //DOTO 调用微信支付退款接口,这段代码在真正的开发逻辑里需要加上 /*weChatPayUtil.refund( orderDB.getNumber(), //商户订单号 orderDB.getNumber(), //商户退款单号 new BigDecimal(0.01),//退款金额,单位 元 new BigDecimal(0.01));//原订单金额*/ //支付状态修改为 退款,这条语句在真正的业务不用加上,需要等微信后台退款成功来调用接口才使用 orders.setPayStatus(Orders.REFUND); } orders.setId(orderId); orders.setStatus(Orders.CANCELLED); orders.setCancelReason(ordersCancelDTO.getCancelReason()); orders.setCancelTime(LocalDateTime.now()); orderMapper.update(orders); }
4.员工的取消订单
4.1controller
@PutMapping("/cancel") @ApiOperation("取消订单") public Result cancelById(@RequestBody OrdersCancelDTO ordersCancelDTO) throws Exception { log.info("取消订单,ordersCancelDTO:{}",ordersCancelDTO); orderService.cancelById(ordersCancelDTO); return Result.success(); }
4.2serviceImpl
@Override public void cancelById(OrdersCancelDTO ordersCancelDTO) { //获取订单id Long orderId = ordersCancelDTO.getId(); Orders orderDB = orderMapper.getById(orderId); Orders orders = new Orders(); if (orderDB.getPayStatus().equals(Orders.PAID)){ //DOTO 调用微信支付退款接口,这段代码在真正的开发逻辑里需要加上 /*weChatPayUtil.refund( orderDB.getNumber(), //商户订单号 orderDB.getNumber(), //商户退款单号 new BigDecimal(0.01),//退款金额,单位 元 new BigDecimal(0.01));//原订单金额*/ //支付状态修改为 退款,这条语句在真正的业务不用加上,需要等微信后台退款成功来调用接口才使用 orders.setPayStatus(Orders.REFUND); } orders.setId(orderId); orders.setStatus(Orders.CANCELLED); orders.setCancelReason(ordersCancelDTO.getCancelReason()); orders.setCancelTime(LocalDateTime.now()); orderMapper.update(orders); }
5.员工的拒单功能
5.1controller
@PutMapping("/rejection") @ApiOperation("拒单") public Result rejectById(@RequestBody OrdersRejectionDTO ordersRejectionDTO) throws Exception { log.info("拒单,ordersRejectionDTO:{}",ordersRejectionDTO); orderService.rejectById(ordersRejectionDTO); return Result.success(); }
5.2serviceImpl
@Override public void rejectById(OrdersRejectionDTO ordersRejectionDTO) throws Exception { //获取订单id Long orderId = ordersRejectionDTO.getId(); Orders orderDB = orderMapper.getById(orderId); //当前订单的状态不为 待接单 if (orderDB==null || !orderDB.getStatus().equals(Orders.TO_BE_CONFIRMED)) { throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR); } Orders orders = new Orders(); // 订单处于待接单状态下取消,需要进行退款 if (orderDB.getPayStatus().equals(Orders.PAID)){ //DOTO 调用微信支付退款接口,这段代码在真正的开发逻辑里需要加上 /*weChatPayUtil.refund( orderDB.getNumber(), //商户订单号 orderDB.getNumber(), //商户退款单号 new BigDecimal(0.01),//退款金额,单位 元 new BigDecimal(0.01));//原订单金额*/ //支付状态修改为 退款,这条语句在真正的业务不用加上,需要等微信后台退款成功来调用接口才使用 orders.setPayStatus(Orders.REFUND); } orders.setId(orderId); orders.setStatus(Orders.CANCELLED); orders.setRejectionReason(ordersRejectionDTO.getRejectionReason()); orders.setCancelTime(LocalDateTime.now()); orderMapper.update(orders); }
6.说明
上面四个模块改完苍穹外卖的基本流程到第九天的内容为止是可以正常走下来的,唯一有点诟病的就是支付完成后,由于没有返回正确的数据,所以会停留在支付界面,这时候你手动关掉这个页面去个人中心查看订单的状态即可,如果有帮助的话请点点关注和点赞,若有还不懂的可以私聊我看看,这是我第一次写博客,如果有错请各位海涵。