当前位置: 首页 > article >正文

《苍穹外卖》项目学习记录-Day7导入地址簿模块功能代码

一个用户可以有多个收货地址,但是只能有一个默认地址,这个默认地址的作用就是当用户下单的时候默认使用这个地址。用户也可以点击新增收货地址,在弹出来的页面可以填写一个新的地址,填写完后点击保存地址向数据库插入一条新增地址的信息。用户可以对已经填写好的收货地址进行修改,如果这个地址不用了也可以点击删除地址按钮把这个地址删除掉。

所以地址簿模块功能有6个小的业务功能:

1.查询地址列表

2.新增地址

3.修改地址(涉及两个接口,第一个是根据主键把原先的收货地址信息查出来用于页面回显,第二个才是真正去修改地址)

4.删除地址

5.设置默认地址

6.查询默认地址(在用户下单的时候会去查询默认地址)

package com.sky.controller.user;

import com.sky.context.BaseContext;
import com.sky.entity.AddressBook;
import com.sky.result.Result;
import com.sky.service.AddressBookService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/user/addressBook")
@Api(tags = "C端地址簿接口")
public class AddressBookController {

    @Autowired
    private AddressBookService addressBookService;

    /**
     * 查询当前登录用户的所有地址信息
     *
     * @return
     */
    @GetMapping("/list")
    @ApiOperation("查询当前登录用户的所有地址信息")
    public Result<List<AddressBook>> list() {
        AddressBook addressBook = new AddressBook();
        addressBook.setUserId(BaseContext.getCurrentId());
        List<AddressBook> list = addressBookService.list(addressBook);
        return Result.success(list);
    }

    /**
     * 新增地址
     *
     * @param addressBook
     * @return
     */
    @PostMapping
    @ApiOperation("新增地址")
    public Result save(@RequestBody AddressBook addressBook) {
        addressBookService.save(addressBook);
        return Result.success();
    }

    @GetMapping("/{id}")
    @ApiOperation("根据id查询地址")
    public Result<AddressBook> getById(@PathVariable Long id) {
        AddressBook addressBook = addressBookService.getById(id);
        return Result.success(addressBook);
    }

    /**
     * 根据id修改地址
     *
     * @param addressBook
     * @return
     */
    @PutMapping
    @ApiOperation("根据id修改地址")
    public Result update(@RequestBody AddressBook addressBook) {
        addressBookService.update(addressBook);
        return Result.success();
    }

    /**
     * 设置默认地址
     *
     * @param addressBook
     * @return
     */
    @PutMapping("/default")
    @ApiOperation("设置默认地址")
    public Result setDefault(@RequestBody AddressBook addressBook) {
        addressBookService.setDefault(addressBook);
        return Result.success();
    }

    /**
     * 根据id删除地址
     *
     * @param id
     * @return
     */
    @DeleteMapping
    @ApiOperation("根据id删除地址")
    public Result deleteById(Long id) {
        addressBookService.deleteById(id);
        return Result.success();
    }

    /**
     * 查询默认地址
     */
    @GetMapping("default")
    @ApiOperation("查询默认地址")
    public Result<AddressBook> getDefault() {
        //SQL:select * from address_book where user_id = ? and is_default = 1
        AddressBook addressBook = new AddressBook();
        addressBook.setIsDefault(1);
        addressBook.setUserId(BaseContext.getCurrentId());
        List<AddressBook> list = addressBookService.list(addressBook);

        if (list != null && list.size() == 1) {
            return Result.success(list.get(0));
        }

        return Result.error("没有查询到默认地址");
    }

}

 ·查询当前用户所有的地址信息


·新增地址

把当前的收货地址设置为不是默认的,也就是说新增的地址都不是默认地址。

    /**
     * 新增
     * @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})")
    void insert(AddressBook addressBook);

·根据id查询地址

 

·根据id修改地址

  <update id="update" parameterType="addressBook">
        update address_book
        <set>
            <if test="consignee != null">
                consignee = #{consignee},
            </if>
            <if test="sex != null">
                sex = #{sex},
            </if>
            <if test="phone != null">
                phone = #{phone},
            </if>
            <if test="detail != null">
                detail = #{detail},
            </if>
            <if test="label != null">
                label = #{label},
            </if>
            <if test="isDefault != null">
                is_default = #{isDefault},
            </if>
        </set>
        where id = #{id}
    </update>

·设置默认地址

因为对于同一个用户他的所有地址来说,只能有一个是默认地址,现在提交过来一个地址设置成默认地址,那么在设置这个默认地址之前可能用户已经有了一个默认地址。现在我们设置了一个默认地址,那原先的默认地址应该就不再是默认地址了。

1、将当前用户的所有地址修改为非默认地址 update address_book set is_default = ? where user_id = ?

2、将当前地址改为默认地址 update address_book set is_default = ? where id = ?

    <update id="update" parameterType="addressBook">
        update address_book
        <set>
            <if test="consignee != null">
                consignee = #{consignee},
            </if>
            <if test="sex != null">
                sex = #{sex},
            </if>
            <if test="phone != null">
                phone = #{phone},
            </if>
            <if test="detail != null">
                detail = #{detail},
            </if>
            <if test="label != null">
                label = #{label},
            </if>
            <if test="isDefault != null">
                is_default = #{isDefault},
            </if>
        </set>
        where id = #{id}
    </update>

 ·根据id删除地址

·查询默认地址

·测试

删除地址

 


http://www.kler.cn/a/527767.html

相关文章:

  • QT实现有限元软件操作界面
  • 你了解哪些Java限流算法?
  • flowable expression和json字符串中的双引号内容
  • 初二回娘家
  • Vue.js路由管理与自定义指令深度剖析
  • Deepseek技术浅析(二):大语言模型
  • SSM开发(十) SSM框架协同工作原理
  • 菜鸟之路Day13一一方法引用
  • Flutter Candies 一桶天下
  • Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
  • python中字典用法
  • eBay管理工具:提升运营效率的利器
  • UE学习日志#16 C++笔记#2 基础复习2
  • 【股票数据API接口44】如何获取股票指历史分时MA数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • sublime_text的快捷键
  • C++11新特性之tuple元组
  • Day49:添加字典元素
  • CSS 背景与边框:从基础到高级应用
  • I2C基础知识
  • 【项目集成Husky】
  • MATLAB中lineBoundary函数用法
  • Snowflake企业权限管理
  • 动态规划DP 最长上升子序列模型 导弹防御模型(题目分析+C++完整代码实现)
  • 基于Hutool的Merkle树hash值生成工具
  • 使用Pygame制作“贪吃蛇”游戏
  • 深度学习篇---深度学习框架