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

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

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

gitee https://gitee.com/Qiuner 🌹

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

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

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

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

微信支付问题解决

需求

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

image-20240305205436090

实现思路

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

image-20240305205947781

image-20240305210444811

  • 这里就是找到的开发规范

  • 可以看到,返回数据要求 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范围问题解决


需求

查询订单后显示不了数据

image-20240307100940643

  • 报错
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());
  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
黑马程序员苍穹项目中的Nginx配置文件可以根据具体需求进行配置。根据引用\[1\]中的描述,可以通过双击nginx.exe启动Nginx,并在http://localhost/访问前端页面。这意味着Nginx的配置文件应该包含有关前端页面的相关配置。另,根据引用\[2\]中的描述,Nginx还可以用作反向代理和负载均衡,因此配置文件还应包含有关反向代理和负载均衡的相关配置。最后,根据引用\[3\]中的描述,苍穹项目还需要与第三方配送公司进行对接和管理,因此配置文件还应包含有关与第三方配送公司对接的相关配置。综上所述,黑马程序员苍穹项目的Nginx配置文件应包含前端页面的相关配置、反向代理和负载均衡的相关配置以及与第三方配送公司对接的相关配置。 #### 引用[.reference_title] - *1* [黑马程序员_Java项目实战《苍穹》_Day01_开发环境搭建](https://blog.csdn.net/BallerWang9/article/details/131824385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [最适合新手的SpringBoot+SSM项目苍穹》实战—(一)项目概述](https://blog.csdn.net/qq_20185737/article/details/131575898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值