Java项目-苍穹外卖-Day08-用户下单和微信支付功能

前言

本篇博客主要是用户端的功能完善
主要是三个功能
1.导入地址簿 2.点击去结算弹出结算页面 3.微信支付功能
在这里插入图片描述

导入地址簿代码导入

这个地址簿就是一个表的CRUD,所以我们直接导入了

需求分析

一个业务功能可能对应多个接口,比如修改地址这个业务功能
其实对应 查询回显+修改 两个接口
在这里插入图片描述
看下数据库设计,具体的接口设计就不展示了
在这里插入图片描述

代码导入

把对应文件放入对应包然后进行编译即可
在这里插入图片描述

功能测试

自己测试一下喽
新增 修改 删除都测试一下
在这里插入图片描述

用户下单

需求分析

接口设计

先看这个现实原型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库设计

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码开发

在这里插入图片描述
在这里插入图片描述
主要看一下service的逻辑
controller

@RestController("userOrderController")//起个bean的别名因为等会再admin也会创建一个controller
@Slf4j
@RequestMapping("/user/order")
@Api(tags = "用户端订单相关接口")
public class OrderController {

    @Autowired
    private OrderService orderService;

    /**
     * 用户下单
     * @param ordersSubmitDTO
     * @return
     */
    @PostMapping("/submit")
    @ApiOperation("用户下单")
    public Result<OrderSubmitVO> submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO){
        log.info("用户下单,参数为:{}",ordersSubmitDTO);
        OrderSubmitVO orderSubmitVO = orderService.submitOrder(ordersSubmitDTO);
        return Result.success(orderSubmitVO);
    }

}

service重量级

@Service
public class OrderServiceImpl implements OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private OrderDetailMapper orderDetailMapper;
    @Autowired
    private AddressBookMapper addressBookMapper;
    @Autowired
    private ShoppingCartMapper shoppingCartMapper;

    /**
     * 用户下单
     * @param ordersSubmitDTO
     * @return
     */
    public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) {
        //业务异常处理(为空地址簿)
        AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId());
        if(addressBook == null){
            throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL);
        }
        //业务异常处理(购物车数据为空)
        ShoppingCart shoppingCart = new ShoppingCart();
        Long userId = BaseContext.getCurrentId();
        shoppingCart.setUserId(userId);
        List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);//至少查询对应用户的购物车
        if(list == null){
            throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL);
        }
        //1.向订单表插入一条数据
        Orders orders = new Orders();//自己去看下Orders里面定义的一些常量
        BeanUtils.copyProperties(ordersSubmitDTO,orders);
        orders.setOrderTime(LocalDateTime.now());//下单时间设置
        orders.setPayStatus(Orders.UN_PAID);
        orders.setStatus(Orders.PENDING_PAYMENT);//设置订单为待付款
        orders.setNumber(String.valueOf(System.currentTimeMillis()));
        orders.setPhone(addressBook.getPhone());
        orders.setConsignee(addressBook.getConsignee());
        orders.setUserId(userId);

        orderMapper.insert(orders);

        List<OrderDetail> orderDetailList = new ArrayList<>();
        //2.向订单明细表插入n条数据
        for (ShoppingCart cart : list) {
            OrderDetail orderDetail = new OrderDetail();//订单明细
            BeanUtils.copyProperties(cart,orderDetail);
            orderDetail.setOrderId(orders.getId());//设置当前订单明细关联的订单id
            orderDetailList.add(orderDetail);
        }
        orderDetailMapper.insertBatch(orderDetailList);//批量插入
        //3.清空用户的购物车数据
        shoppingCartMapper.deleteByUserId(userId);
        //4.封装VO返回结果
        OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder()
                .id(orders.getId())
                .orderTime(orders.getOrderTime())
                .orderNumber(orders.getNumber())
                .orderAmount(orders.getAmount())
                .build();

        return orderSubmitVO;
    }
}

orderDetailMapper.xml

<insert id="insertBatch">
        insert into order_detail (name, image, order_id, dish_id, setmeal_id, dish_flavor,number,amount)
        values 
    <foreach collection="orderDetailList" item="od" separator=",">
        (#{od.name},#{od.image},#{od.orderId},#{od.dishId},#{od.setmealId},#{od.dishFlavor},#{od.number},#{od.amount})
    </foreach>
    </insert>

orderMapper.xml

    <insert id="insert" useGeneratedKeys="true" keyProperty="id">-- 返回下主键值
        insert into orders(number, status, user_id, address_book_id, order_time,checkout_time,
                           pay_method, pay_status,amount, remark, phone, address, user_name, consignee,estimated_delivery_time,
                           delivery_status,delivery_time, pack_amount, tableware_number, tableware_status)
        values
            (#{number},#{status},#{userId},#{addressBookId},#{orderTime},#{checkoutTime},#{payMethod}
            ,#{payStatus},#{amount},#{remark},#{phone},#{address},#{userName},#{consignee},
            #{estimatedDeliveryTime},#{deliveryStatus},#{deliveryTime},#{packAmount},#{tablewareNumber},#{tablewareStatus})
-- 细心一点
    </insert>

功能测试

自己下个断点测试一下再看看数据库
在这里插入图片描述

微信支付功能

介绍

在这里插入图片描述
接入流程
在这里插入图片描述
支付时序图
在这里插入图片描述

交易标识
在这里插入图片描述

调起微信支付的请求路径
数据主要是从上面的交易标识的返回的数据
在这里插入图片描述
相关接口介绍
在这里插入图片描述
在这里插入图片描述

准备工作

在这里插入图片描述
保障数据安全主要是商户私密文件等会要进行配置
对传输数据进行加密/解密都是用那个私钥文件
在这里插入图片描述
获取一个公网的ip地址
我们之前用的都是局域网内的ip
wx支付的调用商户系统需要公网ip就获取一个临时公网ip即可
在这里插入图片描述

代码导入

这个是微信支付功能的配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
剩下的去黑马那导入一下
然后看一下各自代码的作用

功能测试


自己测试一下
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值