wps office 官方的下载的地址

  地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。同一个用户可以有多个地址信息,但是只能有一个默认地址。

  在这里插入图片描述

  在这里插入图片描述

  对于地址簿管理,我们需要实现以下几个功能:

  新增地址地址列表查询设置默认地址编辑地址删除地址

  用户的地址信息会存储在address_book表,即地址簿表中。具体表结构如下:

  在这里插入图片描述

  这里面有一个字段is_default,实际上我们在设置默认地址时,只需要更新这个字段就可以了。

  对于这一类的单表的增删改查,我们已经写过很多了,基本的开发思路都是一样的,那么本小节的用户地址簿管理的增删改查功能,我们就不再一一实现了,基本的代码我们都已经提供了,直接导入进来,做一个测试即可。

  对于下面的地址管理的代码,我们可以直接从资料拷贝,也可以直接从下面的讲义中复制。

  1). 实体类 AddressBook

  所属包: com.itheima.reggie.entity

  2). Mapper接口 AddressBookMapper(直接从课程资料中导入即可)

  所属包: com.itheima.reggie.mapper

  3). 业务层接口 AddressBookService(直接从课程资料中导入即可)

  所属包: com.itheima.reggie.service

  4). 业务层实现类 AddressBookServiceImpl(直接从课程资料中导入即可)

  所属包: com.itheima.reggie.service.impl

  5). 控制层 AddressBookController

  所属包: com.itheima.reggie.controller

  controller主要开发的功能:

  A. 新增地址逻辑说明:

  需要记录当前是哪个用户的地址(关联当前登录用户)

  B. 设置默认地址

  每个用户可以有很多地址,但是默认地址只能有一个 ;

  先将该用户所有地址的is_default更新为0 , 然后将当前的设置的默认地址的is_default设置为1

  C. 根据ID查询地址

  D. 查询默认地址

  根据当前登录用户ID 以及 is_default进行查询,查询当前登录用户is_default为1的地址信息

  E. 查询指定用户的全部地址

  根据当前登录用户ID,查询所有的地址列表

  代码实现如下:

  代码导入进来,并且去阅读了一下地址管理各个功能的逻辑实现,接下来,我们就可以启动项目,进行一个测试。测试过程中,通过debug断点调试观察服务端程序的执行过程,在浏览器中使用调试工具查看页面和服务端的交互过程和请求响应数据。

  1). 新增

  填写表单数据,点击保存地址,查看网络请求。

  在这里插入图片描述

  测试完毕之后,检查数据库中的数据,是否正常插入。

  在这里插入图片描述

  2). 列表查询
wps的官网最新的下载的地方怎么找
  当新增地址完成后,页面会再次发送一个请求,来查询该用户的所有地址列表,在界面进行展示。

  在这里插入图片描述

  在这里插入图片描述

  3). 设置默认

  在地址列表页面中,勾选 “设为默认地址” ,此时会发送PUT请求,来设置默认地址。

  在这里插入图片描述

  测试完毕后,我们再次查看数据库表中的数据:

  在这里插入图片描述

  在这里插入图片描述

  用户登录成功后跳转到系统首页,在首页需要根据分类来展示菜品和套餐。如果菜品设置了口味信息,需要展示按钮。

  在这里插入图片描述

  在开发代码之前,需要梳理一下前端页面和服务端的交互过程:
WPS office官网下载地址怎么找
  1). 页面(front/index.html)发送ajax请求,获取分类数据(菜品分类和套餐分类)

  在这里插入图片描述

  该功能在之前的业务开发中,我们都已经实现了。通过请求响应的数据,我们也可以看到数据是可以正确获取到的。

  在这里插入图片描述

  注意:首页加载时,不仅发送请求获取分类列表,还发送了一次ajax请求用于加载购物车数据,而这两次请求必须全部成功,页面才可以正常渲染,而当前购物车列表查询功能还未实现(报404),所以列表目前并未渲染。此处可以将这次请求的地址暂时修改一下,从静态json文件获取数据,等后续开发购物车功能时再修改回来,如下:

  在这里插入图片描述

  修改之后,我们再次测试:

  在这里插入图片描述

  目前该部分的功能我们已经调通,左侧的分类菜单,和右侧的菜品信息我们都可以看到,后续我们只需要将购物车列表的数据改成调用服务端接口查询即可。

  2). 页面发送ajax请求,获取第一个分类下的菜品或者套餐

  在这里插入图片描述

  A. 根据分类ID查询套餐列表:

  在这里插入图片描述

  B. 根据分类ID查询菜品列表:

  在这里插入图片描述

  异步请求,查询分类对应的菜品列表,功能我们已经实现了,但是我们之前查询的只是菜品的基本信息,不包含菜品的口味信息。所以在前端界面中,我们看不到选择菜品分类的信息。

  在这里插入图片描述

  经过上述的分析,我们可以看到,服务端我们主要提供两个方法, 分别用来:

  A. 根据分类ID查询菜品列表(包含菜品口味列表), 具体请求信息如下:

  请求说明请求方式GET请求路径/dish/list请求参数?categoryId=1397844263642378242&status=1

  该功能在服务端已经实现,我们需要修改此方法,在原有方法的基础上增加查询菜品的口味信息。

  B. 根据分类ID查询套餐列表, 具体请求信息如下:

  请求说明请求方式GET请求路径/setmeal/list请求参数?categoryId=1397844263642378242&status=1

  该功能在服务端并未实现。WPS office的电脑版的下载的地方在哪里

  查询菜品方法修改

  由于之前我们实现的根据分类查询菜品列表,仅仅查询了菜品的基本信息,未查询菜品口味信息,而移动端用户在点餐时,是需要选择口味信息的,所以我们需要对之前的代码实现进行完善,那么如何完善呢?

  我们需要修改DishController的list方法,原来此方法的返回值类型为:。为了满足移动端对数据的要求(菜品基本信息和菜品对应的口味信息),现在需要将方法的返回值类型改为: ,因为在DishDto中封装了菜品对应的口味信息:

  在这里插入图片描述

  代码逻辑:

  A. 根据分类ID查询,查询目前正在启售的菜品列表 (已实现)

  B. 遍历菜品列表,并查询菜品的分类信息及菜品的口味列表

  C. 组装数据DishDto,并返回

  代码实现:

  根据分类ID查询套餐

  在SetmealController中创建list方法,根据条件查询套餐数据。

  把菜品展示的功能代码完善完成之后,我们重新启动服务,来测试一个菜品展示的功能。测试过程中可以使用浏览器的监控工具查看页面和服务端的数据交互细节。

  在这里插入图片描述

  点击分类,根据分类查询菜品列表/套餐列表:

  wps官网下载网址在哪里(wps官网首页)在这里插入图片描述

  在这里插入图片描述

  移动端用户可以将菜品或者套餐添加到购物车。对于菜品来说,如果设置了口味信息,则需要选择规格后才能加入购物车;对于套餐来说,可以直接点击将当前套餐加入购物车。在购物车中可以修改菜品和套餐的数量,也可以清空购物车。
wps office 官方的下载的地方怎么找
  在这里插入图片描述

  这里面我们需要实现的功能包括:

  1). 添加购物车

  2). 查询购物车

  3). 清空购物车

  用户的购物车数据,也是需要保存在数据库中的,购物车对应的数据表为shopping_cart表,具体表结构如下:

  在这里插入图片描述

  说明:

  购物车数据是关联用户的,在表结构中,我们需要记录,每一个用户的购物车数据是哪些菜品列表展示出来的既有套餐,又有菜品,如果APP端选择的是套餐,就保存套餐ID(setmeal_id),如果APP端选择的是菜品,就保存菜品ID(dish_id)对同一个菜品/套餐,如果选择多份不需要添加多条记录,增加数量number即可

  最终shopping_cart表中存储的数据示例:

  wps的电脑版下载入口怎么找在这里插入图片描述

  在开发代码之前,需要梳理一下购物车操作时前端页面和服务端的交互过程:

  1). 点击 “加入购物车” 或者 “+” 按钮,页面发送ajax请求,请求服务端,将菜品或者套餐添加到购物车

  在这里插入图片描述

  在这里插入图片描述

  2). 点击购物车图标,页面发送ajax请求,请求服务端查询购物车中的菜品和套餐

  此时,我们就需要将查询购物车的代码放开,不用再加载静态的json数据了。

  在这里插入图片描述

  在这里插入图片描述

  3). 点击清空购物车按钮,页面发送ajax请求,请求服务端来执行清空购物车操作

  在这里插入图片描述

  经过上述的分析,我们可以看到,对于购物车的功能,我们主要需要开发以下几个功能,具体的请求信息如下:

  1). 加入购物车

  请求说明请求方式POST请求路径/shoppingCart/add请求参数json格式

  2). 查询购物车列表

  请求说明请求方式GET请求路径/shoppingCart/list

  3). 清空购物车功能

  请求说明请求方式DELETE请求路径/shoppingCart/clean

  分析完毕购物车的业务需求和实现思路之后,在开发业务功能 wps的电脑版下载的网址是什么前,先将需要用到的类和接口基本结构创建好:

  1). 实体类 ShoppingCart

  所属包: com.itheima.reggie.entity

  2). Mapper接口 ShoppingCartMapper

  所属包: com.itheima.reggie.mapper

  3). 业务层接口 ShoppingCartService

  所属包: com.itheima.reggie.service

  4). 业务层实现类 ShoppingCartServiceImpl

  所属包: com.itheima.reggie.service.impl

  5). 控制层 ShoppingCartController

  所属包: com.itheima.reggie.controller

  添加购物车

  在ShoppingCartController中创建add方法,来完成添加购物车的逻辑实现,具体的逻辑如下&#xff1a wps电脑版下载的网址在哪;

  A. 获取当前登录用户,为购物车对象赋值

  B. 根据当前登录用户ID 及 本次添加的菜品ID/套餐ID,查询购物车数据是否存在

  C. 如果已经存在,就在原来数量基础上加1

  D. 如果不存在,则添加到购物车,数量默认就是1

  代码实现如下:

  踩坑:

  这个地方不能使用自动填充!!

  因为我们设置的自动填充的公共字段是四个:

  在这里插入图片描述

  也就是说我们每次插入的时候都会设置这四个字段的值,但是在我们的ShoppingCart中只有createTime这一个。那么进行到updateTime的赋值时就会报错!

  查询购物车

  在ShoppingCartController中创建list方法,根据当前登录用户ID查询购物车列表,并对查询的结果进行创建时间的倒序排序。

  代码实现如下:

  清空购物车

  在ShoppingCartController中创建clean方法,在方法中获取当前登录用户,根据登录用户ID,删除购物车数据。

  代码实现如下:

  按照前面分析的操作流程进行测试,测试功能以及数据库中的数据是否是否正常。

  1). 添加购物车

  当添加的是菜品信息,而这个用户的购物车中当前并没有这个菜品时,添加一条数据,数量为1。

  在这里插入图片描述

  检查数据库数据,由于是菜品保存的是dish_id。

  在这里插入图片描述

  这时在页面上,我们可以继续点击+号,在购物车中增加该菜品,此时,应该是对现有的购物车菜品数量加1,而不应该插入新的记录。

  在这里插入图片描述

  检查数据库数据:

  在这里插入图片描述

  如果添加的是套餐,该套餐在当前用户的购物车中并不存在,则添加一条数据,数量为1。

  在这里插入图片描述

  检查数据库数据:

  在这里插入图片描述

  2). 查看购物车

  点击页面下面的购物车边栏,查看购物车数据列表是否正常展示。

  在这里插入图片描述

  3). 清空购物车

  在购物车列表展示页中点击"清空", 查看购物车是否被清空。

  在这里插入图片描述

  并检查数据库中的数据,可以看到数据已经被删除。

  注意这个模块没有实现购物车减少的功能:

  在这里插入图片描述

  在这里插入图片描述

  移动端用户将菜品或者套餐加入购物车后,可以点击购物车中的 “去结算” 按钮,页面跳转到订单确认页面,点击 “去支付” 按钮则完成下单操作。

  在这里插入图片描述

  这里,我们需要说明一下,这里并不会去开发支付功能,因为不论是支付宝的支付,还是微信支付,都是需要企业资质的,而我们大家在测试的时候,是没有办法提供企业资质的,所以这一部分支付功能我们就不去实现了。

  用户下单业务对应的数据表为orders表和order_detail表(一对多关系,一个订单关联多个订单明细):

  表名含义说明orders订单表主要存储订单的基本信息(如: 订单号、状态、金额、支付方式、下单用户、收件地址等)order_detail订单明细表主要存储订单详情信息(如: 该订单关联的套餐及菜品的信息)

  具体的表结构如下:

  A. orders 订单表

  在这里插入图片描述

  B. order_detail

  在这里插入图片描述

  数据示例:

  在这里插入图片描述

  用户提交订单时,需要往订单表orders中插入一条记录,并且需要往order_detail中插入一条或多条记录。

  在开发代码之前,需要梳理一下用户下单操作时前端页面和服务端的交互过程:

  1). 在购物车中点击按钮,页面跳转到订单确认页面

  在这里插入图片描述

  页面跳转前端已经完成,我们无需操作。

  2). 在订单确认页面,发送ajax请求,请求服务端获取当前登录用户的默认地址

  在这里插入图片描述

  该功能在用户地址簿管理功能开发时,已经实现(导入),我们无需操作。

  3). 在订单确认页面,发送ajax请求,请求服务端获取当前登录用户的购物车数据

  在这里插入图片描述

  该功能已经实现,我们无需操作。

  4). 在订单确认页面点击按钮,发送ajax请求,请求服务端完成下单操作

  在这里插入图片描述

  经过上述的分析,我们看到前三步的功能我们都已经实现了,我们主要需要实现最后一步的下单功能,该功能具体的请求信息如下:

  请求说明请求方式POST请求路径/order/submit请求参数{“remark”:“老板,记得带一次性筷子”,“payMethod”:1,“addressBookId”:“1425792459560005634”}

  在开发业务功能前,先将需要用到的类和接口基本结构创建好:

  1). 实体类 Orders、OrderDetail(直接从课程资料中导入即可)

  所属包: com.itheima.reggie.entity

  2). Mapper接口 OrderMapper、OrderDetailMapper

  所属包: com.itheima.reggie.mapper

  3). 业务层接口 OrderService、OrderDetailService

  所属包: com.itheima.reggie.service

  4). 业务层实现类 OrderServiceImpl、OrderDetailServiceImpl

  所属包: com.itheima.reggie.service.impl

  5). 控制层 OrderController、OrderDetailController

  所属包: com.itheima.reggie.controller

  在OrderController中创建submit方法,处理用户下单的逻辑 :

  由于下单的逻辑相对复杂,我们可以在OrderService中定义submit方法,来处理下单的具体逻辑:

  然后在OrderServiceImpl中完成下单功能的具体实现,下单功能的具体逻辑如下:

  A. 获得当前用户id, 查询当前用户的购物车数据

  B. 根据当前登录用户id, 查询用户数据

  C. 根据地址ID, 查询地址数据

  D. 组装订单明细数据, 批量保存订单明细

  E. 组装订单数据, 批量保存订单数据

  F. 删除当前用户的购物车列表数据

  具体代码实现如下:

  备注:

  ​ 上述逻辑处理中,计算购物车商品的总金额时,为保证我们每一次执行的累加计算是一个原子操作,我们这里用到了JDK中提供的一个原子类 AtomicInteger

  代码编写完成,我们重新启动服务,按照前面分析的操作流程进行测试,查看数据是否正常即可。在测试过程中,我们可以通过debug的形式来跟踪代码的正常执行。

  在这里插入图片描述

  检查数据库数据

  订单表插入一条记录:

  在这里插入图片描述

  订单明细表插入四条记录():

  在这里插入图片描述

  同时,购物车的数据被删除:

  在这里插入图片描述

  在这里插入图片描述