00:00
现在呢,我们已经优化了这个生成订单的方法,将生成订单的方法呢做了一个分支处理,那么用户每次点击支付按钮的时候,我们可以从数据库当中查询已经存在的订单,这样的话呢,就不用反复的创建订单了,但是呢,我们订单查询出来之后呢,还要反复的去调用统一下单的API,那么如果用户频繁的操作的话呢,那我们统一下单的API呢,也会被频繁的调用,那在我们的微信的开发文档当中有这样的一句话叫做coderl的有效期呢为两个小时,所以呢,其实我们可以临时的把code URL呢存储起来,那么如果在两小时之内,我们呢,再去通过code URL生成二维码的话呢,那用户依然是能够扫码的,所以呢,我们可以在存储订单的同时呢,将我们的二维码的地址呢,也存储起来。那所以呢,我们先做一个接口方法,那么在这个接口方法当中呢,我们先将二维码的地址呢存储起来。
01:03
我们写一个code URL的一个方法,那这个方法呢,我们接收一个number订单号,接收一个二维码的地址,我们生成这个实现方法。好,我们在这个save code的URL当中,将这个方法呢,具体的给它实现出来,那么其实我们要用的方法呢,是base map.update这个方法,那么update这个方法呢,我们可以根据一个查询条件query啊,然后呢去更新一个数据记录好,那首先呢,我们要准备一个查询条件。Update语句后面呢,因为也可以写where,所以呢,我们要准备的就是update语句后面的where语句,那我们呢,也可以通过query rapper给它创建出来,那我们要执行的是对order info的一个修改,所以泛型呢就是order INF for。好,那我们对query rapper呢进行条件的组装,EQ order number。
02:23
把order number呢传递进来,好,接下来呢,我们在组装,我们要修改哪个条件,那我们要修改的条件呢,我们存储到order in for这个对象当中,所以new order in order ino.s code URL,我们把code URL呢传递进来,这样的话呢,这个就是我们的查询条件,这个呢就是我们要修改的字段,那么根据update方法,我们呢,就利用这个查询条件修改了这个order当中的字段。
03:02
存储订单二维码。那接下来呢,我们在我们的微信配service当中对这个save code的URL进行调用,那我们每一次调用完统一下单接口之后。得到了我们的code的URL之后呢,我们在返回值之前,我们就可以去存储这个二维码了,所以呢,这面呢,就是我们保存二维码,保存二维码的一个过程,那下面这块呢,是返回二维码的一个过程。那在这面呢,我们可以去通过order ino get order number的方式呢,先得到一个order number,也就是订单号,然后接下来呢,根据刚才我们写的order info service的save code的URL方法,把订单号传进去,再把我们的扣的URL传进去,这样的话呢,我们就把二维码呢,就保存到了我们的订单数据当中,然后接下来下一次。
04:19
再来访问的时候,一旦我们生成了这样的一个订单数据,我们呢,就可以对这个订单数据呢进行判断。好,我们在这个位置呢,进行判断,如果order in for不等于,那添加一个健状性的判断哈,然后并且YouTube.is am cold URL,那could UR,那我们就从这个order in for里面获取。
05:01
Get code ul,那么很显然第一次生成订单的时候呢,这里面是不会有这个code ul的哈,所以呢,如果是第一次生成订单,在没有这个code的URL的情况下,那么呢,我们的应用程序。就会执行统一下单API去获取code u l并且保存。那么在第二次下单开始,如果我们的德info里面有了code u呢?那么我们就会走这个F分支,那么我们呢,就创建我们最终的结果就可以了。把这个map呢,给它创建出来。好,我们封装map对象,然后呢,将code URL和订单里面的封装到一起,返回给前端,好,那么为了调试方便呢,我们在这个地方打印一个log.info,叫做。
06:01
二维码。订单已存在。好,最后呢,我们应用程序的后面这个位置,我们要把这个code URL的声明呢,给它删掉,因为这个code URL呢,刚才我们前面。进行了声明。那最后呢,我们来重新启动一下这个服务。好,我们来访问一下我们的应用程序。那在访问之前呢,我们先清空一下我们的控制台。嗯,我们呢,换一个商品啊,这样的话呢,在数据库当中就会创建一条新的订单记录。
07:04
好,我们的二维码已经展示出来了,那么我们先来看数据库吧。看看数据库当中有没有新的订单记录,还有一个ID是四的订单记录,并且呢,我们的二维码呢,已经保存起来了。那我们来看一下日志吧,这日志呢,目前为止这款是获取我们的商品列表的这么一个SQL语句,然后接下来呢,我们就点击了支付按钮,那这边呢就发起支付请求,生成订单,然后呢,我们试图从数据库当中查询出一个。商品ID为四并且未支付的订单,但是并没有查到,没有查到的话呢,应用程序呢,就继续执行创建订单的一个过程,那么在创建订单的过程当中呢,他首先先根据ID为四的商品ID去查询了一个商品记录,然后呢,根据这个商品记录去向我们的订单表当中插入了一条订单记录。
08:05
那这个呢,是我们前期创建订单的一个过程,创建完订单之后呢,这面开始调用统一下单API,然后返回我们的code URL,接下来呢,将code URL。存储到我们刚刚生成的那个订单表当中,这样的话呢,我们的数据库当中就更新了一条记录,那也是我们现在看到的我们数据库当中新下的这个订单呢,它是有URL这个信息的,那接下来呢,我们来清空一下我们的控制,那我们呢,重新的去点击一下确认支付按钮,好我们再来看一下我们的后台的日志。那么在日志当中呢,首先他先发起了支付请求,然后呢,生成订单。那么在生成订单的这个过程当中呢,他首先先查询了数据库当中有没有这条订单记录,那么发现呢,数据库当中是有这条订单记录的,所以呢,它就没有继续的去发起远程的A的调用,并且呢,我们的这条订单记录里面,它是有二维码存在的,所以呢,直接这个二维码和订单号就被返回给了前端。
我来说两句