当前位置:   article > 正文

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

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);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

功能测试

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

微信支付功能

介绍

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

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

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

准备工作

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

代码导入

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

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

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

功能测试


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/782062
推荐阅读
相关标签
  

闽ICP备14008679号