00:01
这节课呢,我们来优化一下生成订单的这个流程,我们进入到业务方法当中,那么我们并不是每一次点击去支付的时候呢,都要去生成这个订单数据,那我们呢,现在前面去查找。已存在但未支付的订单。好,那么我们去写一个辅助方法,叫做get no pay。Orderby。Product ID。No payo就是未支付订单。那我们在这个过程当中呢,返回一个订单,好,如果这个能够成功的获取到一个订单的话,那么我们这边呢,就会判断一下,如果order in for不等于呢,那么我们这个方法呢,就直接返回这个order就可以了,也就是说当用户创建了这个订单的时候,通过点击确认支付按钮,那么如果这个用户还没有对这笔订单进行支付,那么我们完全可以呢,把之前用户创建的这个订单呢再获取出来,然后呢,将二维码展示给用户,所以呢,接下来呢,我们先创建这样的一个辅助方法。
01:32
好,我们直接在当前的这个业务方法当中创建成private的就可以了,因为这个方法呢,只有前面的这个类啊,他自己用,所以呢,我们就不需要再在接口当中给他定义抽象方法了,我们直接定义一个私有的方法就可以了。那么这个方法的具体实现呢?实际上就是在数据库当中执行一个查询query rapper呢是买beat plus当中的一个查询对象,它可以帮助我们通过面向对象的形式呢组装查询语句。
02:10
我们创建一个query rapper对象query rapper.eq这个呢是组装一个where条件的啊一个。用等于号连接的方法就是ID是否和。第二个参数product ID相等,那我们这个呢,就是根据ID查询出一笔订单,然后接下来还有一个查询条件。再组装一下order status,那么在我们的数据库当中,我们来看一下我们的数据库。有一个。Product ID还有一个呢。Order status。
03:00
然后我们通过这两个条件。也就是说当商品的ID并且。我们的这个订单状态是未支付的情况下呢,那么我们呢,就直接把这笔订单拿出来,让用户针对这笔订单进行支付就可以了,我们就没有必要呢去创建新订单了。那么在这面呢,我们订单的这个状态啊,如果为。未支付的话,那么呢,我们在系统当中呢,是有一个枚举和它对应的叫order。Status第二,No pay,这个是未支付的枚举,那当然因为我们的系统当中呢,并没有引入用户管理哈,没有去做权限认证啊,所以呢,如果有的话,其实呢,我们还是需要加一个查询条件的user ID啊,要根据当前用户用户ID去查找当前用户的账号下是否对这个商品已经进行了购买,对吧?啊,所以这个在实际的项目当中呢,应该把它添加上啊,但是因为我们这边没有对用户做处理,所以呢,我们先给他屏蔽掉。
04:19
然后接下来呢,我们就查询。Select在my class当中有一个叫做select one的方法,我把它进去,那这个方法呢,执行完成之后呢,它通过这个查询条件,也就是说在very语句当中呢,加了两个查询条件,这两个查询条件表达式的运算符呢,都是等于号啊和大概的ID等于它,并且order status等于no pay。这样的一个查询条件查出来的结果呢,如果每一次我们对这个条件查询出来的结果呢,这面都直接返回了order info并不会创建新订单的话。
05:03
那么我们可以判断,在数据库表当中,同时只能存在满足这个条件的一条记录,不可能有两条记录,所以说这个地方呢,我们可以用select做判断。当然,如果这个地方用select做判断,那么数据库当中一你有多条记录的话,像咱们现在这样就是ID等于然后未返。报错信息了,所以呢,我们在这种情况下呢,要确保数据库当中是没有一些垃圾数据的,那我们先把整个的数据库中的数据删掉啊,那这样的话呢,我们的select方法呢,就会返回正确的结果了,所以如果是第一次执行的话,那么我们在数据库当中没有查询到数据记录,那他就会在数据库当中生成这个订单对象,但是如果是第二次执行的话,因为数据库当中已经有数据记录了,所以呢,他就不再生成订单对象了,那么接下来第三次第四次再去执行的话呢,它永远都不会生成新的订单对象,所以数据库当中呢,永远只有一条记录,那因此呢,我们这个代码呢,它就是成立的了啊,所以你要确保在测试之前,先把数据库当中我们之前测试的那些冗余数据啊给它删除掉。
06:19
然后我们。组装完这个查询条件之后,把查询条件传递给select one这个方法之后我们就得到了一个order info,那现在呢,我们这个高in好这个方法。是根据商品ID查询未支付订单啊,这块呢,主要的目的是防止。重复创建订单对象。
07:04
写好了之后呢,我们在前面这个位置。啊,就成功的调用它了,可以。接下来呢,下面这个生成订单的这个out呢,我们就不需要再去给他明了。直接使用前面的order info对象就可以了。好,接下来呢,我们就重新启动一下我们的应用程序,对我们的应用程序呢,做一个简单的测试。那我们。刷新一下,那我们确认一下,刚才呢,我们已经把数据库当中的数据呢,都删掉了啊。我们再来点击确认支付,这个时候呢,又生成了这个二维码,然后呢,我们刷新好,此时此刻呢,我们的系统当中呢,就成了一个新的订单记录,那么它的ID是一。
08:00
他的订单状态呢是未支付,接下来呢,我们再来点击一下确认支付。好多点几下。那我们再来到数据库这面,你会发现呢,并没有新的数据库记录生成。
我来说两句