黑马程序员 苍穹外卖项目 Day微信支付问题解决与生成订单号超出上限问题

简介: 黑马程序员 苍穹外卖项目 Day微信支付问题解决与生成订单号超出上限问题

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客

这是我的 github https://github.com/Qiuner ⭐️

gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^)

想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎

黑马程序员 苍穹外卖项目 Day 9微信支付问题解决与生成订单号超出上限问题

  • 主要解决Day9 微信支付个人无法调用企业接口与订单号生成

微信支付问题解决

需求

苍穹外卖day9在完成代码的时候需要用到已经完成支付的微信订单,但微信支付功能个人不好获取,因此修改原本代码,做到点击支付就完成支付,方便后续代码开发

实现思路

先打开微信开发者工具查看发送的请求,发现点击后发出请求为http://localhost:8080/user/order/payment,于是去用户端接口文件中寻找这个接口,看有没有相应的开发要求

  • 这里就是找到的开发规范
  • 可以看到,返回数据要求 estimatedDeliveryTime(预计送达时间),我找了一下已有的类,没有发现单独有这个属性的类,于是自己创建了一个
package com.sky.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrdersSubmitModifyDTO {
    //预计送达时间
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime estimatedDeliveryTime;
}

OrderController

  • 将导入的微信支付的原本订单注释掉,换成自己的
@PutMapping("/payment")
@ApiOperation("订单支付个人修改版")
public Result<OrdersSubmitModifyDTO> payment(@RequestBody OrdersPaymentDTO ordersPaymentDTO){
    OrdersSubmitModifyDTO   ordersSubmitModifyDTO=orderService.submitOrderModify(ordersPaymentDTO);
    return   Result.success(ordersSubmitModifyDTO);
}

OrderService

/**
 * 订单支付个人修改版
 * @param ordersPaymentDTO
 * @return
 */
OrdersSubmitModifyDTO submitOrderModify(OrdersPaymentDTO ordersPaymentDTO);

OrderServiceImpl

  • 这里调用了之前导入的微信支付的方方法
/**
 * 订单支付修改版
 * @param ordersPaymentDTO
 * @return
 */
@Override
public OrdersSubmitModifyDTO submitOrderModify(OrdersPaymentDTO ordersPaymentDTO) {
    OrdersSubmitModifyDTO  ordersSubmitModifyDTO = new OrdersSubmitModifyDTO();
    paySuccess(ordersPaymentDTO.getOrderNumber());
    /*  获取预计送达时间*/
    Orders ordersDB = orderMapper.getByNumber(ordersPaymentDTO.getOrderNumber());
    ordersSubmitModifyDTO.setEstimatedDeliveryTime(ordersDB.getEstimatedDeliveryTime());
    return ordersSubmitModifyDTO;
}
    /**
     * 支付成功,修改订单状态
     *
     * @param outTradeNo
     */
    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);
    }

OrderMapper

/**
     * 修改订单信息
     * @param orders
     */
    void update(Orders orders);
<!--订单支付成功后更新数据-->
<update id="update" parameterType="com.sky.entity.Orders">
    update orders
    <set>
        <if test="cancelReason != null and cancelReason!='' ">
            cancel_reason=#{cancelReason},
        </if>
        <if test="rejectionReason != null and rejectionReason!='' ">
            rejection_reason=#{rejectionReason},
        </if>
        <if test="cancelTime != null">
            cancel_time=#{cancelTime},
        </if>
        <if test="payStatus != null">
            pay_status=#{payStatus},
        </if>
        <if test="payMethod != null">
            pay_method=#{payMethod},
        </if>
        <if test="checkoutTime != null">
            checkout_time=#{checkoutTime},
        </if>
        <if test="status != null">
            status = #{status},
        </if>
        <if test="deliveryTime != null">
            delivery_time = #{deliveryTime}
        </if>
    </set>
    where id = #{id}
</update>

生成订单号超出int、Integer范围问题解决


需求

查询订单后显示不了数据

  • 报错
com.mysql.cj.exceptions.NumberOutOfRange: Value '1709731478636' is outside of valid range for type java.lang.Integer

解决思路

仔细看了下项目的代码有关于订单号的传参,发现如果要接收这么长的订单号需要改变多处代码,于是决定改变项目生成的订单号。

技术选型

  • 该项目是一个外卖项目,可能会有多个人在同一时刻同时下单,项目原来办法是使用系统时间的毫秒数来进行,这确实是个好办法。而我在这里使用uuid来进行,虽然不是最好的解决方式,但考虑我已有技术栈和该项目只是个练手小项目,决定使用uuid来生成订单号

实现

  • 找到OrderServiceImpl中的submitOrder,ctrl+f 搜索number 然后直接吧原本的代码替换成以下两行就好了
UUID uuid = UUID.randomUUID();
order.setNumber(uuid.toString());
d来进行,虽然不是最好的解决方式,但考虑我已有技术栈和该项目只是个练手小项目,决定使用uuid来生成订单号
### 实现
+ 找到OrderServiceImpl中的submitOrder,ctrl+f 搜索number 然后直接吧原本的代码替换成以下两行就好了
```java
UUID uuid = UUID.randomUUID();
order.setNumber(uuid.toString());
目录
相关文章
|
6天前
|
移动开发 小程序 前端开发
程序员必知:微信小程序进阶
程序员必知:微信小程序进阶
16 1
|
20天前
|
小程序 前端开发 JavaScript
微信外卖小程序
微信外卖小程序
|
2天前
仿美团饿了么程序,外卖人9.0外卖订餐源码(PC+微信)
仿美团饿了么程序,外卖人9.0商业版外卖订餐源码,PC+微信+WAP+短信宝,多城市多色版 非常不错的独立版外卖跑腿网站源码,喜欢的可以下载调试看看吧!!
4 0
|
7天前
|
移动开发 小程序 前端开发
程序员必知:微信小程序进阶
程序员必知:微信小程序进阶
|
8天前
|
程序员
程序员必知:微信报错40029微信模板推送消息报错问题
程序员必知:微信报错40029微信模板推送消息报错问题
22 0
|
16天前
|
文字识别 Python
项目实践《微信自动回复》
项目实践《微信自动回复》
|
20天前
|
小程序 Java 数据库
计算机Java项目|基于微信小程序的健康早知道系统
计算机Java项目|基于微信小程序的健康早知道系统
|
22天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的外卖点餐系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的外卖点餐系统的详细设计和实现
17 0
|
22天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的外卖小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的外卖小程序的详细设计和实现
13 0
|
28天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的外卖小程序的研究与开发的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的外卖小程序的研究与开发的详细设计和实现
22 0