设置默认收货地址【项目 商城】

简介: 设置默认收货地址【项目 商城】

设置默认收货地址



1. 持久层

1.1 规划SQL语句

修改 AddressService | getByUid

      //address.setAid(null);
            //address.setUid(null);

AddressService–Aid&Uid


1.检测当前用户想设置为默认地址的这条数据是否存在。

select * from t_address aid=?

2.在修改用户的收货默认地址之前,先将所有的收货地址设置为非默认。


update t_address set is_default=0 where uid=?

3.将用户当前选中的这条记录设置为默认收货地址。

update t_address set is_default=1 modified_user=?,modified_time=? where aid=?

1.2 设计抽象方法

在AddressMapper接口中来进行定义和声明。

 /**
     * 根据aid的查询收货地址数据
     * @param aid 收货地址id
     * @return 收货地址数据,如果没有返回null
     */
    Address findByAid(Integer aid);
    /**
     * 根据用户的uid值来修改用户的收货地址设置为非默认
     * @param uid 用户id
     * @return 受影响的行数
     */
    Integer updateNonDefault(Integer uid);
    Integer updateDefaultByAid(@Param("aid") Integer aid, 
                               @Param("modifiedUser") String modifiedUser, 
                               @Param("modifiedTime") Date modifiedTime);

1.3 配置SQL映射

AddressMapper.xml文件中进行配置。

  <update id="updateNonDefault">
        UPDATE t_address
        SEt is_default=0
        WHERE uid=#{uid}
    </update>
    <update id="updateDefaultByAid">
        UPDATE t_address
        SET is_default=1,
        modified_user=#{modifiedUser},
        modified_time=#{modifiedTime}
        WHERE aid=#{aid}
    </update>
    <select id="findByAid" resultMap="AddressEntityMap">
        SELECT  * FROM t_address WHERE aid=#{aid}
    </select>

AddressMapper–findByAid

测试

单元测试方法中进行测试。

 @Test
    public void findByAid(){
        Address address = addressMapper.findByAid(5);
        System.out.println(address);
    }
    @Test
    public void updateNonDefault(){
        Integer rows = addressMapper.updateNonDefault(8);
        System.out.println(rows);
    }
    @Test
    public void updateDefaultByAid(){
        Integer rows = addressMapper.updateDefaultByAid(5,"管理员",new Date());
        System.out.println(rows);
    }

AddressMapperTests–updateDefaultByAid


2.业务层

2.1 异常规划

1.在执行更新时产生未知的UpdateException异常。已经创建无需重复创建。

2.访问的数据不是当前登录用户的收货地址数据,非法访问:AccessDeniedException异常。

3.收货地址有可能不存在:AddressNotFoundException异常。


默认收货地址–ex


2.2 抽象方法

在接口IAddressService中编写抽象方法的定义。

/**
     * 修改某个用户的某条数据为默认收货地址
     * @param aid 收货地址的id
     * @param uid 用户的id
     * @param username 表示修改执行的人
     */
    void setDefault(Integer aid,Integer uid,String username);

2.3 实现抽象方法

在AddressServiceImpl类中进行开发和业务设计。

  @Override
    public void setDefault(Integer aid, Integer uid, String username) {
        // 根据参数aid,调用addressMapper中的findByAid()查询收货地址数据
        Address result = addressMapper.findByAid(aid);
        // 判断查询结果是否为null
        if (result == null) {
            // 是:抛出AddressNotFoundException
            throw new AddressNotFoundException("尝试访问的收货地址数据不存在");
        }
        // 判断查询结果中的uid与参数uid是否不一致(使用equals()判断)
        if (!result.getUid().equals(uid)) {
            // 是:抛出AccessDeniedException
            throw new AccessDeniedException("非法访问的异常");
        }
        // 调用addressMapper的updateNonDefaultByUid()将该用户的所有收货地址全部设置为非默认,并获取返回受影响的行数
        Integer rows = addressMapper.updateNonDefault(uid);
        // 判断受影响的行数是否小于1(不大于0)
        if (rows < 1) {
            // 是:抛出UpdateException
            throw new UpdateException("设置默认收货地址时出现未知错误[1]");
        }
        // 调用addressMapper的updateDefaultByAid()将指定aid的收货地址设置为默认,并获取返回的受影响的行数
        rows = addressMapper.updateDefaultByAid(aid, username, new Date());
        // 判断受影响的行数是否不为1
        if (rows != 1) {
            // 是:抛出UpdateException
            throw new UpdateException("设置默认收货地址时出现未知错误[2]");
        }
    }

AddressService–setDefault


测试

在单元测试类中进行测试。

    @Test
    public void setDefault(){
        addressService.setDefault(4,8,"管理员");
    }

AddressServiceTests–setDefault


3 控制层

3.1 处理异常

在BaseController中处理异常。

    else if (e instanceof AccessDeniedException){
            result.setState(4005);
            result.setMessage("收货地址数据非法访问的异常");
        }else if (e instanceof InsertException){
            result.setState(5000);
            result.setMessage("插入数据时产生未知的异常");
        }

BaseController–ex–setDefault


3.2 设计请求

/address/{aid}/set_default
@PathVariable("aid") Integer aid,HttpSession session
GET
JsonResult<Void>

3.3 完成请求方法

在AddressController类中编写请求处理方法。

  //RestFul风格的请求编写
    @RequestMapping("{aid}/set_default")
    public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid,HttpSession session){
        addressService.setDefault(
                aid,
                getuidFromSession(session),
                getUsernameFromSession(session));
        return new JsonResult<>(OK);
    }

AddressController–setDefault


测试

打开浏览器登录在去访问请求路径/address/{aid}/set_default

http://localhost:8080/address/5/set_default


4. 前端页面

address.html页面点击“设置默认”按钮,来发送ajax请求。

1.给设置默认收货按钮添加一个onclick属性,指向一个方法的调用,在这个方法中来完成ajax请求的方法。

address.html | showAddressList方法中修改

+ '<td><a οnclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">设为默认</a></td>'

完成setDefault方法的定义

    // <!--setDefault-->
      function setDefault(aid) {
        $.ajax({
          url: "/address/" + aid + "/set_default",
          type: "POST",
          dataType: "JSON",
          success: function(json) {
            if (json.state == 200) {
              showAddressList();
            } else {
              alert("设置默认收货地址失败!" + json.message);
            }
          },
          error: function(xhr) {
            alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + xhr.status);
            location.href = "login.html";
          }
        });
      }
      // <!--setDefault-->

address.html–setDefault


测试

先登录再访问addAddress.html页面进行测试。

修改路径address–>addresses


README–设置默认收货地址

相关文章
|
4月前
|
前端开发 数据库 Python
Django项目之电商购物商城 -- 修改/删除收货地址/设置默认地址
Django项目之电商购物商城 -- 修改/删除收货地址/设置默认地址
|
4月前
|
前端开发 JavaScript Python
Django项目之电商购物商城 -- 新增收货地址
Django项目之电商购物商城 -- 新增收货地址
|
SQL 前端开发
新增收货地址【项目 商城】
新增收货地址【项目 商城】
101 0
|
SQL 前端开发 测试技术
显示勾选的购物车数据【项目 商城】
显示勾选的购物车数据【项目 商城】
69 0
|
SQL 存储 前端开发
显示购物车列表【项目 商城】
显示购物车列表【项目 商城】
93 0
|
12月前
|
存储 小程序 API
【 uniapp - 黑马优购 | 购物车页面(2)】如何实现收货地址区域功能、常见问题解决方案
【 uniapp - 黑马优购 | 购物车页面(2)】如何实现收货地址区域功能、常见问题解决方案
285 0
|
SQL 前端开发 测试技术
删除收货地址【项目 商城】
删除收货地址【项目 商城】
72 0
|
SQL XML 前端开发
收货地址列表展示【项目 商城】
收货地址列表展示【项目 商城】
92 0
|
SQL 前端开发
显示商品详情【项目 商城】
显示商品详情【项目 商城】
86 0
|
存储 Java 测试技术
基于Springboot外卖系统19:用户地址+默认收货地址
地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。
475 0