0


基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)

地址簿相关功能

1.1 需求分析和设计

1.1.1 产品原型

地址簿,指的是消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。同一个用户可以有多个地址信息,但是只能有一个默认地址
在这里插入图片描述

对于地址簿管理,有以下几个功能:

  • 查询地址列表
  • 新增地址
  • 修改地址
  • 删除地址
  • 设置默认地址
  • 查询默认地址

1.1.2 接口设计

根据上述原型图先粗粒度设计接口,共包含7个接口。

接口设计:

  • 新增地址
  • 查询登录用户所有地址
  • 查询默认地址
  • 根据id修改地址
  • 根据id删除地址
  • 根据id查询地址
  • 设置默认地址

接下来细粒度分析每个接口,明确每个接口的请求方式、请求路径、传入参数和返回值。

1). 新增地址
在这里插入图片描述

2). 查询登录用户所有地址

在这里插入图片描述

3). 查询默认地址

在这里插入图片描述

4). 修改地址
在这里插入图片描述
5). 根据id删除地址

在这里插入图片描述

6). 根据id查询地址

在这里插入图片描述

7). 设置默认地址

在这里插入图片描述

1.1.3 表设计

用户的地址信息会存储在address_book表,即地址簿表中。具体表结构如下:
字段名数据类型说明****备注idbigint主键自增user_idbigint用户id逻辑外键consigneevarchar(50)收货人sexvarchar(2)性别phonevarchar(11)手机号province_codevarchar(12)省份编码province_namevarchar(32)省份名称city_codevarchar(12)城市编码city_namevarchar(32)城市名称district_codevarchar(12)区县编码district_namevarchar(32)区县名称detailvarchar(200)详细地址信息具体到门牌号labelvarchar(100)标签公司、家、学校is_defaulttinyint(1)是否默认地址1是 0否
这里面有一个字段is_default,实际上我们在设置默认地址时,只需要更新这个字段就可以了。

1.2 代码实现

1.2.1 Mapper层

创建AddressBookMapper.java

packagecom.sky.mapper;importcom.sky.entity.AddressBook;importorg.apache.ibatis.annotations.*;importjava.util.List;@MapperpublicinterfaceAddressBookMapper{/**
     * 条件查询
     * @param addressBook
     * @return
     */List<AddressBook>list(AddressBook addressBook);/**
     * 新增
     * @param addressBook
     */@Insert("insert into address_book"+"        (user_id, consignee, phone, sex, province_code, province_name, city_code, city_name, district_code,"+"         district_name, detail, label, is_default)"+"        values (#{userId}, #{consignee}, #{phone}, #{sex}, #{provinceCode}, #{provinceName}, #{cityCode}, #{cityName},"+"                #{districtCode}, #{districtName}, #{detail}, #{label}, #{isDefault})")voidinsert(AddressBook addressBook);/**
     * 根据id查询
     * @param id
     * @return
     */@Select("select * from address_book where id = #{id}")AddressBookgetById(Long id);/**
     * 根据id修改
     * @param addressBook
     */voidupdate(AddressBook addressBook);/**
     * 根据 用户id修改 是否默认地址
     * @param addressBook
     */@Update("update address_book set is_default = #{isDefault} where user_id = #{userId}")voidupdateIsDefaultByUserId(AddressBook addressBook);/**
     * 根据id删除地址
     * @param id
     */@Delete("delete from address_book where id = #{id}")voiddeleteById(Long id);}

创建AddressBookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sky.mapper.AddressBookMapper"><selectid="list"parameterType="AddressBook"resultType="AddressBook">
        select * from address_book
        <where><iftest="userId != null">
                and user_id = #{userId}
            </if><iftest="phone != null">
                and phone = #{phone}
            </if><iftest="isDefault != null">
                and is_default = #{isDefault}
            </if></where></select><updateid="update"parameterType="addressBook">
        update address_book
        <set><iftest="consignee != null">
                consignee = #{consignee},
            </if><iftest="sex != null">
                sex = #{sex},
            </if><iftest="phone != null">
                phone = #{phone},
            </if><iftest="detail != null">
                detail = #{detail},
            </if><iftest="label != null">
                label = #{label},
            </if><iftest="isDefault != null">
                is_default = #{isDefault},
            </if></set>
        where id = #{id}
    </update></mapper>

1.2.2 Service层

创建AddressBookService.java

packagecom.sky.service;importcom.sky.entity.AddressBook;importjava.util.List;publicinterfaceAddressBookService{List<AddressBook>list(AddressBook addressBook);voidsave(AddressBook addressBook);AddressBookgetById(Long id);voidupdate(AddressBook addressBook);voidsetDefault(AddressBook addressBook);voiddeleteById(Long id);}

创建AddressBookServiceImpl.java

packagecom.sky.service.impl;@Service@Slf4jpublicclassAddressBookServiceImplimplementsAddressBookService{@AutowiredprivateAddressBookMapper addressBookMapper;/**
     * 条件查询
     *
     * @param addressBook
     * @return
     */publicList<AddressBook>list(AddressBook addressBook){return addressBookMapper.list(addressBook);}/**
     * 新增地址
     *
     * @param addressBook
     */publicvoidsave(AddressBook addressBook){
        addressBook.setUserId(BaseContext.getCurrentId());
        addressBook.setIsDefault(0);
        addressBookMapper.insert(addressBook);}/**
     * 根据id查询
     *
     * @param id
     * @return
     */publicAddressBookgetById(Long id){AddressBook addressBook = addressBookMapper.getById(id);return addressBook;}/**
     * 根据id修改地址
     *
     * @param addressBook
     */publicvoidupdate(AddressBook addressBook){
        addressBookMapper.update(addressBook);}/**
     * 设置默认地址
     *
     * @param addressBook
     */@TransactionalpublicvoidsetDefault(AddressBook addressBook){//1、将当前用户的所有地址修改为非默认地址 update address_book set is_default = ? where user_id = ?
        addressBook.setIsDefault(0);
        addressBook.setUserId(BaseContext.getCurrentId());
        addressBookMapper.updateIsDefaultByUserId(addressBook);//2、将当前地址改为默认地址 update address_book set is_default = ? where id = ?
        addressBook.setIsDefault(1);
        addressBookMapper.update(addressBook);}/**
     * 根据id删除地址
     *
     * @param id
     */publicvoiddeleteById(Long id){
        addressBookMapper.deleteById(id);}}

1.2.3 Controller层

packagecom.sky.controller.user;@RestController@RequestMapping("/user/addressBook")@Api(tags ="C端地址簿接口")publicclassAddressBookController{@AutowiredprivateAddressBookService addressBookService;/**
     * 查询当前登录用户的所有地址信息
     *
     * @return
     */@GetMapping("/list")@ApiOperation("查询当前登录用户的所有地址信息")publicResult<List<AddressBook>>list(){AddressBook addressBook =newAddressBook();
        addressBook.setUserId(BaseContext.getCurrentId());List<AddressBook> list = addressBookService.list(addressBook);returnResult.success(list);}/**
     * 新增地址
     *
     * @param addressBook
     * @return
     */@PostMapping@ApiOperation("新增地址")publicResultsave(@RequestBodyAddressBook addressBook){
        addressBookService.save(addressBook);returnResult.success();}@GetMapping("/{id}")@ApiOperation("根据id查询地址")publicResult<AddressBook>getById(@PathVariableLong id){AddressBook addressBook = addressBookService.getById(id);returnResult.success(addressBook);}/**
     * 根据id修改地址
     *
     * @param addressBook
     * @return
     */@PutMapping@ApiOperation("根据id修改地址")publicResultupdate(@RequestBodyAddressBook addressBook){
        addressBookService.update(addressBook);returnResult.success();}/**
     * 设置默认地址
     *
     * @param addressBook
     * @return
     */@PutMapping("/default")@ApiOperation("设置默认地址")publicResultsetDefault(@RequestBodyAddressBook addressBook){
        addressBookService.setDefault(addressBook);returnResult.success();}/**
     * 根据id删除地址
     *
     * @param id
     * @return
     */@DeleteMapping@ApiOperation("根据id删除地址")publicResultdeleteById(Long id){
        addressBookService.deleteById(id);returnResult.success();}/**
     * 查询默认地址
     */@GetMapping("default")@ApiOperation("查询默认地址")publicResult<AddressBook>getDefault(){//SQL:select * from address_book where user_id = ? and is_default = 1AddressBook addressBook =newAddressBook();
        addressBook.setIsDefault(1);
        addressBook.setUserId(BaseContext.getCurrentId());List<AddressBook> list = addressBookService.list(addressBook);if(list !=null&& list.size()==1){returnResult.success(list.get(0));}returnResult.error("没有查询到默认地址");}}

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹


本文转载自: https://blog.csdn.net/m0_59230408/article/details/134437469
版权归原作者 失重外太空. 所有, 如有侵权,请联系我们删除。

“基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)”的评论:

还没有评论