00:00
我们的项目啊,所需要的一些功能基本上已经完成了,但是还有一些漏掉的一些小功能,或者说是还有一些功能,它会有一些小bug,在这一节课我们来进行一下修复啊,首先把我们的权限的数据的填充给补充完整。之前讲课由于时间的关系,我们这个权限的数据填充只填充了用户相关的部分,对吧?好,这里我在下面的时间就把所有的权限都给录上了,我们把它给粘贴过来。来把这个给替换掉。哎,这样就是我们所有的权限都给录入到这个系统中了。这是一个优化的一个地方。接着我们来看一个后台管理的。啊,这个功能啊。就是说看一个。找到APP。看评论的这个传form这里我们是不是处理了他的这个啊,评论的一个图片对不对,哎,因为我们在评论的时候是可以上传多个的一个评论的一个图,对吧?啊那么呢,会有一个问题,也就是说有的用户他不上传这个图,不上传这个图呢,这个属性就是闹。
01:13
但是我来看一下我们后台的。找到后台这里啊。评论的这个列表。但是我们呢,去用到了这个transform对吧,这样的话,如果我们去呃便利啊,或者说是显示一个transform的一个详情,结果这个呢。就是评论的这个transform,它这个数据它没有这个啊,数据就是没有这个图片就是图片是no,这里便利就会出错。知道吧,啊,这个大家可以尝试一下,因为我在测试的时候确实碰到了这个问题,所以我们这里要加一个判断啊,也就是说if is。只有当它是数组的时候,我们才去啊处理这个图片。否则的话就不做处理清楚吗?啊,这样的话他就不会报错了,因为我们这个图啊,他不是必填的一个字段,就是说用户在评论的时候,他有可能去。
02:05
添加这个图有可能不添加。哎,所以就会导致这么一个问题,跟商品的不一样,商品我们这个是在上传商品的时候,这个是必填的。叫什么啊,这个不是啊,所以这里也做一个优化,防止它就是没有这个小图的一个内容的时候,评论我们再看它的详情或者列表时报错。接下来看一个后台管理轮播图的功能,找到root文件。我的命啊,找到我们的轮播图管理这一块。可以发现啊,这里只有排序和轮模图的一个总参改查,嗯,但是我们轮播图在设计的时候呢,它还有一个状态的一个字段,就是禁用和启用,对吧,而且我们默认是禁用状态,只有你去手动去开启才能去启用,是不是啊,这样就导致我们的模图哎没法去启用,也就没有这个禁用和启用的一个功能。啊,先来看一下数据库啊。
03:00
找到这个数据迁移找到。轮播图这里可以看到我们是有一个状态的,是不是有个禁用和启用啊,那么我们把这个功能给补上啊。就放到它下面就可以。啊,我们写到方法里面。轮播图。禁用和启用啊,把这个这个注释也有问题啊,这是轮播图的资源路由。来,接着去轮播图控制器去完成这个方法。CTRL加左键啊,可以快捷的点到。这个类里面。嗯,那我们直接复制一下它就可以了。
04:00
能播图禁用和启用,把名字换一换。这个我们不需要request啊,直接需要一个依赖输入一个轮播图的一个模型,然后它的。等于。它本身的。取法啊,就是说你等等于零嘛,或者你等等于一嘛,如果你等于一就是启动状态,那我就把你变成零,否则就变成一,好吧,最后C返回就可以了啊,这个功能就完成了。这个我们可以找一个数据去试一下,找一个轮播图来。看一下ID的一个状态啊,这里是一,我们来测试一下啊。复制一下这个地址。使用派系方式啊。
05:01
api.testin。里面的啊,这个地址。把这个换成的ID,我们来改这个一的啊,这个talking我已经放过了。204修改成功,接着我们回来刷新一下数据库,看一看它的状态是没问题的,是不是可以这样修改,我看能不能把它启用,再次请求这个方法。再回来刷新一下数据库。好,可以看到这里已经启用了啊啊,这个功能没有问题,我们也测试完成,接下来把这个所有的都关掉,后台暂时没有发现其他问题,接下来我们去优化,呃,前台相关的一个功能,嗯,首先来看一个什么呢?看一个EV里面,我们之前在讲这个快递的时候,是不是自定义的两个配置放到了EV里面。对不对。啊,但是恰巧我们用到了这个PK对不对,我们来看一下康,就是我们快递的这里啊express。点PP。
06:00
这里是不是我们在定义这个商户ID,然后定义这个应用的K的时候,因为用了这个。清楚吗?而这个当时我写的时候没有注意啊,它恰巧是和我们love本身的这个APK是一样的。所以就导致后来我生成这个PK的时候,呃,他把这个也给填上了,哎,所以这样是不行的,那我们怎么办呢?把这个换一换啊,我们统一加上一个一个express的一个前缀啊。统一加上这么一个前缀。好,当然EV里面我们也加上这么一个前缀,然后把这个就给删了啊。这个是我生成LA的这个APK的时候,他把这两个字段都给填充上了啊,所以我就发现了这么一个问题。来,接着是他。那后面这个就不要了。这样用作我们快递的这个配置好吧,啊,不然的话,这个appk和我们拉本身自带的冲突了啊,这也是啊,做一个优化好。
07:02
嗯,接下来呢,啊,我们。把这个有一个功能,之前没有写,现在可以来完成一下,就是忘记密码。对不对。就是在用户不登录的情况下,哎,他就是说比如忘记密码了,他可以通过这个邮箱或者手机的一个验证找回这个密码,好吧,那。呃,手机和邮箱他俩的这个写法都类似啊,和我们在个人中心去绑定邮箱和手机号都类似,所以我们这里只写一个写个邮箱的啊。咱先找到路由啊。我们放到also里面,我来回想一下,首先我们找回密码肯定是不用登录的,对不对,对吧?好找回密码呢分两步,第一个是你输入你的这个账号,也就是说你的邮箱啊,或者这个手机号啊,因为我们手机号也是唯一的嘛啊,我会给你发送一个验证码。清楚吧,给你发送一个。这个。呃,四个四位数啊,或者六位数的一个验证码到你的邮箱或者手机号,嗯,然后你就可以,呃,接下来提交你的这个邮箱,还有这个验证码,还有你的这个新密码。
08:08
然后我如果检查你的邮箱和验证码,或者说你的手机号验证码是匹配的,我就允许你修改啊,允许你找回密码,只这么两步,所以我们需要写两个路由。啊,这里呢,我们拿邮箱,通过邮箱找回来举例啊,所以写。这个两邮箱的啊,这个手机号的呢,大家可以去自己写一下,但是有一点你们要注意,因为我们这个路由是暴露在这个登录的这个路由的外面的,听懂吧,就是不用登录,任何人都可以请求,所以一定要保护好你的这个。短信发送的这个接口啊,或者说是你这个邮箱发送的一个接口,不要遭到别人一个恶意的攻击啊。这里我来写一下邮箱的直接。呃,复制一个。这个吧,先把注释写写啊,通过邮箱。
09:00
邮箱获取验证码啊,那我就不用复制这个,复制哪一个呢?因为我们下面有一个去绑定邮箱的时候获取验证码,我直接复制这个改一改就可以了,是不是啊。但是你不要直接去用这一个同一个,因为他们的验证逻辑不一样,你这个首先你这个需要登录对不对,你更换邮箱,你得保证你的数据库的邮箱不重复,是这样吧,好,那你通过邮箱找回密码,你得保证什么,你得保证你要找回的这个邮箱必须得在数据库中存在,它俩是相反的一个悖论,所以不要用同一个方法。记住吗?啊。啊,那我们这里用。嗯,这个reset吧啊。Reset。Password,然后是email code啊,通过这个获取code,把这个改一下。他错的,呃,我们也不用这个扩容器,我们单独去创建一个扩容器是吧。
10:02
来。重新创建一个控制器,P p artisan make control。呃,放到also下面。他。Word啊,Controller。那这里我们啊就用。Password reset control了。里面的。扣的这么一个方法来去。发送邮件的一个验证码清楚吗?来接下来呢,呃,因为它跟这个方法类似啊,跟这个发送。邮件的这个验证码类似,所以我直接去这里面去。复制一下这个功能就可以了。哎,就是直接复制一下这个功能。获取邮件的验证码,然后取这里面。
11:02
啊,整体一下。这两个类啊也要。继承一下啊。好,呃,那这个改成base control,继承基本的那个控制器。接下来。获取原来验证码,我们要再加一层验证,加一层什么验证,呃,你这个邮件啊,必须得在。啊,优色表里面的存在。啊,Excel,然后必须得在这个user表里面存在,你因为你找回密码肯定是你的账号已经注册过了,已经存在过系统了,才让你找回密码是不是。啊,这个已经存在啊,好,加上这么一个验证,接着去发送这个验证码就可以了啊。来接着看一看啊。嗯,接着看我们的第二个方法。这个发送验证码呢,已经写好了,然后提交。
12:05
邮箱和验证码啊,修改密码好。还使用这个。然后方法我们换一换啊。Password。来里面还有啊,通过邮箱来修改密码,因为我们还有通过这个短信的呢,是不是。写一个这么一个方法啊。嗯,这个方法呢,其实也可以直接去这里面复制更新邮箱这个啊。我们把注释给。挪过来。把方法名字换一换。
13:03
那这里啊。哎,这里它有一个什么验证呢,是用了这个中间键去验证了,这个扣的是对不对,兄弟们,这里我们也需要验证。就是在验证邮箱和。这个。你输入的验证码是否匹配行吗?所以这个我们也需要啊,啊这个短信的暂时没写短信的先不要,先只保留这个邮箱的,然后我们要验证的方法是这个方法。这样的话,在提交修改的时候会进行一个验证,但是呃,在他提交的这个验证的基础上,哎,我们在加强验证,为什么呢?我们来看一看这个验证啊,这个中间键的一个验证,找到中间键。APP下面。HTTP。有一个check email,它只验证了什么,只验证了这个你扣的必填,并且是这个邮箱是必填邮箱的格式,对不对?哎,所以我们要再加一个什么验证。只加一个这么一个验证对吧,你既然你修改密码,你邮箱。
14:02
你必须得在我数据库里存在,用户表里存在啊,你都不存在,我怎么给你修改。是不是啊,因为我们没有登录,所以这个用户也要改变了,用户就不是从登录到这里面去获取了,要去查询这个用户。清楚吧,User model。好。First where,谁呢,Where?等于request。里面的email。什么这么去去来啊。查到用户之后,更新用户的密码。也就是说我们需要一个密码的字段,密码的字段呢,也得必填是不是?对吧。密码,我们得。加密啊,就是使用这个BCRPD加密,加密之后再存才可以啊。
15:05
这样就完成了它的一个更新,嗯,如果你还想要一个确认密码的一个字段,就是类似于我们呃,注册。哎,类似于注射,所以我们还要加一个什么。加一个这个啊。Confirmed,这样的话,他必须得填一个确认密码的一个字段。才可以。好,这样我们修改密码也写完了。啊,那接下来呢,我们测试一下啊,测试一下首先。哎,我得去改一下这个用户表,得找到一个,就是把邮箱修改一下,改成这个能接收邮件的一个邮箱。那我先去登录一下这个邮箱。哎,我们把它改成。能接受邮件的啊。
16:08
啊。来提交一下啊。输入密码。啊,这里输密码。我们来在这个收电箱里等着啊。接下来测试啊,找密码先看一下,找到这个登录这里啊。对啊,现在的密码我们看一下是123123对不对。你看我们来复制一下这个邮箱。然后使用这个123登录。是可以登录的,是不是好,我们假如现在我们忘了密码,我们再新开一个这个地方。首先使用post看,注意啊,我没有选择这个认证啊,首先使用。啊。看一看我们获取邮箱验证码的一个地址是什么?
17:03
Re,啊,这个比较长,这个地址忘了改了。提交邮箱。和验证码修改密码啊,这个地址我们换一下,不能和上面一样啊。是不是和上面一样,就。有问题了。嗯,这个改了吧。不要这个啊。改成post吧。这个改成。拍吧。也改成吧,都改成post好好。那接下来我们来请求这个获取验证码。地址啊,api.test然后是API,然后是also前缀加上我们这个。好,现在来提交。应该是会告诉我们邮箱不能为空。我们传一个邮箱。嗯,然后随便输一个邮箱啊,随便输一个邮箱对吧。
18:03
它会告诉我们这个邮箱在数据库里面不存在,是不是好,那我们去找回。哎,就是这个邮箱的一个密码。来输入。啊,已经。发送。来刷新一下。没有发送成功啊,可能队列有问题。看一下我们的这个队列的这个表啊,确实有一条是。没有发送,那可能是我们服务器的队列没有启动,看一看守护进程。啊。啊,可以看到我们的这个shop API是啊,是没有在运行啊,我们把它给启动一下啊。速度。Start啊,把所有的都给启动。
19:01
好,这两个启动了,这个时候队列启动之后呢,因为我们这个发送邮件用到了队列,这时候邮件才能发送成功,好吧,我们再来发送一次。啊,应该不用,因为一对立一启动的话,它这里就会执行。就是他会把现有的这个队列给执行,所以这时候我们再去刷新邮件已经收到了啊,看我的验证码7749。接下来我们测试修改密码那个功能啊,就找回密码那个功能也是使用post。啊啊也是啊,刚才我们这个参数传错了,应该放到包子里面啊,不过这个这个结果都是一样的。来。复制一下啊。嗯,这个不要扣的就是。我们修改密码的一个功能,验证码不能为空,邮箱不能为空加一个扣的。然后加个邮箱。啊,邮箱用我们的这个邮箱吧。啊,扣的是不对的啊,扣的我随便写的,现在来发送啊。
20:02
首先,验证码和邮箱错误是不是好?那我就验证码,余香必须来,对啊,这里我又放错了,应该放到body。请大家这个写的时候注意一下,放到包里面,这个我们先测试通过再说。因为对于拉入来讲,我们使用input,它既可以获取query,既也可以获取这个呃,Post body的传递参数嘛。我们把这个验证码输入正确啊。7749。来看看能不能修改密码。接着他应该报我们的密码不能空,是不是啊,密码呢,这个验证规则。我看看我们的验证规则啊,不能为空,然后是需要有确认密码啊,尽可能的呢,我们去和。这个注册的规则保持一致,我们把这两个也给粘上。再加个竖线。啊,把这两个加上啊,所以要给一个密码字段。啊,并且要至少六位123456。
21:02
好,和以前的不一样吧,以前的是。看一下以前的是123123吗?哎,我现在修改。这时候他要确认密码,确认密码我们要加一个password。Confirmation。诶,两次密码要一致,看一下这次能不能把它给修改上。少个二啊,这里少个r come for没写。好。修改成功啊,修改成功,怎么验证修改成功呢?我们还使用原来的123,你看之前还能获取到这个talking呢,是不是现在再来获取来。是不是获获取不到了,认证失败,那我们用我们找回的这个新密码来进行测试。是不是这样就完成了密码的一个找回啊,一定要做好限制啊,验证这里必须用户在存在,包括发送的时候验证的存在这里我们好验证,我们唯一要注意的一点是,因为我们这个发送就是通过邮箱发送验证码,这个API是暴露在这个登录的路由的一个外面的,呃,就是别人拿到这个API的话,拿着接口是可以恶意去攻击这个API的。
22:13
啊,邮箱的还好,顶多你是这个。啊,其他人正常用户发送的慢一些,但是如果是一个收费的这个短信的一个API,你就要在在这里啊,发送到这个地方。去做好这个验证。清楚么?比如说啊,同一个手机号,然后在一分钟之内只能发送一次啊,这是验证,然后或者啊,再加上这个IP的一些检测啊,总之。一定要做好验证,不要让别人随便的去攻击你的接口啊,一般你限制一个号一分钟只能发一次啊,这样的话就能杜绝很多的一个恶意的请求啊。当然如果别人非要买那种大量的一个虚拟的一个手机号去。呃,攻击你的这个API的话,那也是没有什么太大办法啊。好,接下来呢,呃,我们把这个绑定手机号,这里面的两个验证规则也给改一改啊首先。
23:04
啊,获取验证码,也就是说我们这个是绑定的一个过程,对不对,绑定的话,那你要绑定的这个邮箱,我们数据库里面就不能存在,刚好和我们找回密码它是一个相反的,所以这里我们要加上一个啊唯一也就是说数据库里不能存在你要绑定的这个邮箱。哎,加上我们的表user冒号表,你可以给字段,不给字段的话呢,它就会默认使用这个字段。清楚吧,好,呃,这样给加上那。同样你更新邮箱的时候,这个验证我们也得加上。清楚吧。啊,因为我们中间件里面已经对这个这两个进行了验证,所以这里只需要验证它啊,就是说必须改和邮箱里我们数据库里不一样就可以了啊,因为中间键里面已经验证了这一部分了,兄弟们也可以看看这个中间件之前给大家看过。是不是中间已经验证过这一部分了,所以那个我们就这两个可以不用验证了。
24:01
好,那接着去修改什么呢?修改一下手机号的啊,手机号的同样的执行绑定执行更新手机号也需要去验证一下用户。也就是我们数据库里面已经存在的一个手机号,你不不能让他再去绑定了啊。只能绑一个未存在的,同样这里面上面发送验证码的时候也要加上这个验证,诶这样我们的验证就比较完整了啊,除了没有加那个时间的一个限制,比如说啊,一分钟之内同一个手上只能发一次啊,这个给大家加一下基于这个缓存就可以了,基于缓存缓存它不是有有效期吗。啊,然后关于找回密码,这里我只写了通过呃邮件找回对吧,大家举一反三,然后可以把通过手机号找回给写一下啊。啊,这是一个要优化的一个地方啊,接下来我们。嗯,再来看一下。就是。一个问题啊。就比如我们这个项目。api.test我们这么访问还能出现拉的一个首页呢,是不是啊,这个是加密的,这个K有问题,我们重新生成K就好了。
25:10
啊,谁身上这可有就没问题啊,来刷新一下。是不是还能看见拉的手链呢?啊,我们作为一个API项目,其实要这个页是没有用的,我们把它这个路由给注释掉啊。它是这个外部点PP这里面返回的,直接注去掉就可以了啊。啊,当然你也可以去啊,不一定非要出示,比如说你换成你的这个一些这个项目的一个介绍什么的都可以啊,这里我们直接把它注释掉啊,让他找不着就完事了。啊,这是一个优化的地方啊。接着。我们先把那些都关掉。我们来看一下前端的一个路由。API这里呢?哪个地方呢?就是付款这里,哎,我们支付对吧,你看我们支付。发起这个支付信息,这个接口呢,给我们返回了一个二维码,支付二维码是不是,然后我们想象一下,我们正在前台购买商品支付呢,我们扫码,然后支付完成了,但是呃,支付完成的时候呢,你像支付宝微信啊,他会去通知我们的服务器,哎,我们可以把订单状态给修改,对吧,这是我们服务器层面的,你看服务器是可以把订单的状态给修改掉。
26:21
是不是这是服务器层面,但是我们前端啊,前端的页面还停留在那里啊,他不知道已经支付完成了。是不是,所以我们要提供一个接口能让前端,哎知道。啊,你这个订单支付完成了,从而进行下步的一个操作啊,在早期呢,一般呃使用一些轮询,就是我啊定时,比如一秒请求一次,我们一个接口,我们这接口返回订单一个状态是不是,但这样是比较耗费性能的,那比较推荐的做法是什么呢?就是使用这个love的广播系统啊。我们来找一下拉的手册。广播系统呢?就是。
27:00
呃,我们经常说到的一个长链接啊。来,先看看看手册这里啊。中路呢?好。就是这个在。中文话题里面啊,这个广播系统。它呢啊,就是一个长链接,也就是服务器和客户端,我们可以进行这个实时的一个消息的一个通讯,哎这样的话,比如当我们支付进入这个支付的一个流程的这个开始的状态起,就让他进入到我们这个广播的一个系统,就建立一个常链链接,然后当他呃支付完成之后,我们服务器就可以直接去通知他支付完成,他可以进行下一步的合作。知道吧,啊,当然这个用起来是。还是比较复杂的啊,所以这里我们就退而求次。用一种比较简单的方法啊,就是使用轮询,当然在实际的商业项目中,我们会使用。啊,配置一下这个广播系统,然后用一下这个长链接去写好。
28:02
轮询。查询订单状态来放到这个支付下面啊。Order,然后是他的这个。我们给他写一个。啊,配space支付一个状态的一个方法。还放在这里面。在这个里面。我们写一个这个方法啊。依赖注入一个order。这个里面其实我们什么都不用做,我们直接就return这个order的这个最新的一个状态就可以了啊。
29:01
由前端它去判断啊,比如说他状态是变成了这个二就是就完成了,他就可以进行下步这个操作啊。轮询查询订单状态啊,看是否支付完成。支付完成。啊,给大家写一下,注意啊,一般这个。就是我们在商业项目中很少这么去写。项目中啊,使用广播系统。实现会更好。也就是通过这个。长链接的方式啊。常年线啊通知。
30:00
客户端。支付完成。啊,一般我们在这个这个。真实的项目中啊,会使用这个长链接去进行通知啊,当然有的项目啊,有一些比较小的一些项目也会使用这种轮询的一个方式,清楚吗?好,那我们来测试一下这个API。再新建一个啊。这个什么方式get的方式啊。Get方式。api.test。API啊,直接是没有前缀的,然后加上它。订单我们就查第四条的吧,好吧。没有加头部的一个消息的一个认证。啊,返回到这个状单,订单状态是不是好,如果他订单,比如说一开始刚下单完成是一,然后他就可以,呃,设置这个,比如说两秒请求一次,我们这个接口,他这个当检测到它这个状态变成二的时候,说明支付完成了,因为这个二呢,是谁给他修改的呢?是我们支付完成的时候才修改的清楚了吧,哎,所以可以认为是支付完成了。
31:15
啊,我们通过这个简单的一个方式来进行实现,不进行不再去使用这个广播系统啊,这个是运起来是比较复杂的,还配置很多驱动,以及很多的一个,还有很多的一个组件。接着再来看一个问题。什么问题呢?看我们的迁移文件啊,我们在讲商品的时候。去添加了。啊,商品的这个一个销量是不是,但是我们并没有去维持这个这个。也就是说没有地方去增加它这个销量,那商品的销量应该在什么时候增加呢?应该在用户交易完成的时候去增加商品这个销量,也就是说用户确认收货的时候。
32:00
是不是增加它这个销量。所以啊。我们来找到用户确认收货的一个功能,先找路由啊,我们找东西先找路由。确认书啊,这里。这个方法啊,这个控制器。找到这个方法。确认收货对吧,那确认收货完成之后要干什么,增加这个商品的销量。增加订单下。订单下所有商品的。销量啊。清楚吧,啊好。前面的这些逻辑不用变,我们主要就是在这里,呃,首先我们把这个。这个失误给打开,因为我们涉及到订单状态一个更新,还有这个商品表的一个更新啊,先放到一个拆开里面。
33:06
好,当出现异常的时候。DB back回滚。并且。抛出这个异常。啊,那在这里去开启这个。失误啊,当你没有任何异常的时候,也就是说全部执行正常,我再去手动去提交。好,接着去增加商品下的一个销量叫什么啊。那这个呢。这么说吧,因为每个商品它的这个数量不一样,就是说我们购买的这个商品的这个数量不一样。清楚没有,所以我们这个只能是循环去处理好一些。来循环商品下面的。谁呢?
34:01
我们循环它的这个细节。啊,当然你这么着会去循环的查询。这样也比较麻烦。哎。所以说啊,在这里。我们先一次性获取到。知道吧,一次性获取到这个订单的详情。这个详情啊,你别去循环的时候获取,循环的时候获取就会产生N加一的问题,就是你循环一次,它去查一次数据库,哎,所以我们一次性在这里获取到等于order。里面的。这个属性啊,我们通过这个动态属性的方式去获取,是不是接着去循环它就可以了啊,这样一定在写项目的时候。大家尤其是写这个数据查询的时候,或者模型观点的时候,一定要避免去循环去查询啊,避免产生造成这个N加一个问题。啊,哪怕我们提前去查一次,因为我们如果是查一次的话,它是只有一条色口,就一次性把它所有的这个订单的这个详情都拿来了,是不是,那我们这里再循环循环的这个数组集合而已啊。
35:05
啊。啊。它拿它啊,拿它的时候,我们还需要什么呢?需要这个。商品。清楚吧,因为我们要更新这个商品的一个数据。啊更新呢,呃,那我们就呃,只要拿他的这个商品ID就可以了,不用去再把商品查出来这么麻烦来。循环它,然后就说更新。商品啊,更新商品。Where ID等于谁,是不是我们这里面的?固执杠ID。是不是?然后干什么呢?你不用再查出来去更新,也不用update,我们更新的话就是说让某个字段去增加的话。
36:07
使用increment是最省事的啊,你要是使用update,你还要取出来原来的一个值。清楚不清楚?啊,一定要加好这个ID啊,Where ID等于它。然后。Rement。Sales这个字段啊,后面是它的增量,增量是谁?增量就是我们订单详情里面的这个number是不是这样的。对吧,你购买了几个,比如购买三个,你这个销量我增加三嘛,这很正常这个逻辑。哎,这样就完成了。更新商品的销量。啊,来试一下。呃,我们先看看。查哪个订单。
37:00
我们来测试一下,用哪个订单测试看一看。就用四这个订单来测试,我们先把它改成,然后用五这个订单来测试吧,把它改成三,因为不是三的话呢,我们这里。就是说不能确认出货,你看。是不是B等于三啊呃,改成三之后。嗯。找一下水果。看一下我们这个订单的。ID是五,然后去看一下订单的详情。订单ID是五的,是关联的是22的一个商品,对吧,那我们去看这个22的商品。看他的这个数量嘛,主要是。往上找一找啊。找到事,我们注意它的这个。销量现在是零啊好。注意一下这个圈一条零,接下来我们去测试一下这个确认收货的一个。工,等看我确认收货之后。它数量销量会不会增加,好吧,来找确认收货是他啊这个地址,那我接着去再去开启一个路由啊,使用看看是什么协议啊。
38:07
派启方式啊,然后请求api.test。API加上这个把订单改成五。我们来确认五这个订单的一个确认收货好不用参参数。直接就完事儿走。没有加认证啊。哎,204。啊,一个一个来看啊。那首先看这个订单,看他状态,这个状态肯定是会改的,这是没问题的。然后看我主要是看我们的商品这个销量有没有增加。是不是增加了。啊。是不是增加了,为什么增加了500呢?我们看了我们这里购购物哦,这里买的就是500是不是好,那说明我们这个就没有问题了,哎这样确认收货才是比较完整的一个功能。看到了吧。
39:01
一定要合理的去使用,尤其是涉及到比如说这个,呃,浏览量啊什么的一个增加,比如销量增加,一定要去善用这个。啊,你没必要把它比如说查询出来,你再取出来它现有的一个字段,然后加等于它它的一个增量就太麻烦了,直接用银可的是比较省事的,包括对应的还有一个递减的一个方法。然后这样我们就优化完了啊,关于确认收货这一块。商品的销量也就有了。再来看一个问题。还是这个空气。往上找有一个提交订单的地方。啊,这里提交订单之前,我们这里测试这个远程一对多啊,这个直接在这return了,忘了删除了啊,测试代码忘了删除了,所以下面的订单提交不了啊,这也是个问题,我们把这个删掉。行了吧,啊。那这个提交订单呢,还有一个问题,就是说我们会验证这个地址ID在地址表中存没存在是不是。但是。我们这个地址呢,是啊,这个表示在这个ES这里是没有这个ES,所以它会报错啊,我们把这个ES加上这个一定要是完整的一个表明。
40:07
听着吧,这个表面一定要对应上,这里也会报错啊。啊,这个问题。嗯,接着呢,是。这里啊。就是查看物流,这里也有一个问题。哎,物流查询这里就是我们封装的这个。我们处理的这个错误消息对吧,并且判断了它,然后我们看看我们封装的这个物流查询的一个类啊。找到这里。啊,这里。那会有一个什么问题呢?就是它的这个返回的这个错误,它分两部分,一部分如果是服务器直接报错。他消息会啊,就是说success这里会false,如果是服务器没有报错,但是你的这个请求的参数错误,它会有另外一种返回。这个大家在使用的时候可以自己测试一下啊,这里我就啊不费时间去测试了,我直接把测试好的代码我给你放到这里啊。
41:12
跟原来的代码啊,就是多加了一个,这样我们先提前转一层,因为就是说当我们请求成功,就是他服务器没有报错它,但是它的数据是没有的,也就是说接口出现问题,我们的比如说参数不对,我们的这个快递单号填错了,或者说这个呃,快递公司填错了,他会正常的给我们结果,但是结果里面呢,会这个不给我们数据啊,但是会给我们错误的一个原因。知道吧,所以它分两种,两种报错啊,所以我们要分两步判断这个是服务器。嗯,就是他们这个API服务器啊。服务器报错啊,服务器报错直接就没有下面的这个。啊,这这这些了啊,直接就是就是false。
42:01
啊,然后它会把错误的原因放到这里面,我们把这个错误原因给返回,这个返回的是字符串清楚吧啊。接着啊,这个呢,是。啊,请求成功,也就是服务器没有报错,请求成功。嗯,但是未请求到数据。嗯,也就是可能。就是说有,你就说请求的参数有问题啊。啊,就会给我们,呃,在这个结果里面响应的这个里面的,这个结果里面给我们是false是什么,然后会把具体的啊,为什么没有原因,比如说我们缺失快递的这个单号,或者缺失这个物流公司的编码,它就会把原因放到这里面,所以我们从这里面取出来也是个字符串,哎,如果没有,就是说是处说明我们查到了物流的一个轨迹,就把这个数组返回。好,因为最终我们如果成功的话,返回的是个数组,也就是说只要失败我们就返回错误原因,哎,只要有问题就返回错误原因,所以呃,这里我们也要改这个判断也要改对吧,那就嗯,不判断。
43:14
它的这个结果直接判断它类型,它如果是数组的话,说明就是正确的,对不对,我们判断is。啊,如果你不是数组,你不是数组,那么什么就是字符串呗,你看字符串就是我们的错误原因是不是,所以啊,我们这里就抛错,那既然错误原因它直接是字符串的话,我就可以直接把这个错误给抛出去。清楚吧。来接下来,嗯。当你拿到这个物流的参数之后,哎,我这个就给你正常返回这个数组啊就可以了。这优化之后,我们的物流查询就没有问题了啊,主要是改了他两个错误返回的一个情况啊,一个是它们内部服务器的一个错误,再一个就是我们传的这个参数有问题,比如说物流编码的不对啊。这两个错误要。
44:03
嗯,给它分开去处理,因为它一次的错误是判断的顶层的这个success,然后第二次的这个问题是判断啊,这个它是多维的一个数组嘛,判断里面的数组的一个success。这块就优化完了啊。把这个关掉。然后最后把这个有一个。控制线,你看city,当时我们写这个城市的时候啊,City这个控制线啊,城市的一个省市县的一个级联是吧。啊,我们把它。放到这个里面吧,放到A篇里面。好吧。啊,放到这个API里面。嗯,接着把他的命名空间换一换,因为之前放到最外面了吗。
45:00
啊呃,接下来呢,API地方,API里面有一个地方使用到它了。省市县的一个数据。CI。这里面没有啊,这里面找不着它,它应该是在这个API这个名字空间下啊。City。哎,我把这个挪一下啊。短片里面。到这里啊,基本上就优化的差不多了啊,最后嗯,就会进行一个。部署到这个云服务器上啊,正式的把这个项目给放到线上。啊,不要忘了把这个EV里面的所有的这个配置啊,复制一份去放到点EV里面知道吧,然后把这里面该删的这个我们配置好的东西都删掉。因为我们可以看一下这个get的这个忽略的文件,对吧,它是忽略EV的,EV我们是不进这个版本库的,所以说。
46:05
呃,我们会把EV里面相应的有的配置项都给放到这个点EV exam里面啊,它是会进这个版本库叫什么啊,但是你放到这里面,你注意啊,一定要把该删的K都删掉啊,不要造成啊一些你的这个应用的一些密钥去随着。这个因为这个进了这个版本库。那就会造成一些不好的影响,可能就有安全性,就可能遭到一个威胁,所以你在把这个,因为里面的这个配置复制到这个,因为点exam里面的时候,一定要把所有的配置都删掉啊。这点一定要清楚。
我来说两句