springboot整合项目-商城设置默认地址功能

设置默认的收货地址

持久层

1.sql语句的 规划

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

select * from t_address where aid = ?

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

updata t_address set is_default = 0 where uid = #{uid}

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

updata t_address set id_default = 1 ,modified_user = #{modifiedUser},modified_time =#{modifiedTime} where aid = #{aid}

2.定义接口和抽象方法

   /**
     * 根据aid查询收货地址数据
     * @param aid  地址的aid
     * @return 返货收货地址的数据,如果没有找到则返回null值
     * 辅助 Integer updateNonDefault(Integer uid);方法
     */
    Address findByAid(Integer aid);

    /**
     * 根据用户的uid来修改用户的收货地址设置为非默认的收货地址
     * @param uid  用户的uid
     * @return  影响的行数
     *辅助 Integer updateNonDefault(Integer uid);方法
     */
     Integer updateNonDefault(Integer uid);

    /**
     * 根据用户的aid 来将用户选择的当前地址设置为默认的收货地址
     * @param aid
     * @param modifiedUser
     * @param modifiedTime
     * @return
     */
     Integer updateDefaultByAid(@Param("aid") Integer aid, @Param("modifiedUser") String modifiedUser, @Param("modifiedTime")Date modifiedTime);

}

4测试

/**
     * 设置默认地址中:通过aid查询是否存在这个收货地址的数据
     */
    @Test
    void testFindByAid(){
        Address byUid = addressMapper.findByAid(1);
        log.info("收货地址:{}",byUid);
    }

    /**
     * 通过uid设置当前用户下的所有收货地址的is_Default为0
     */
    @Test
    void testUpdateNonDefault(){
        Integer byUid = addressMapper.updateNonDefault(10);
        log.info("修改收货地址的行数:{}",byUid);
    }

    /**
     * 通过aid 设置当前收货地址的is_Default为1
     */
    @Test
    void testUpdateDefault(){
       Integer byUid = addressMapper.updateDefaultByAid(1,"admin",new Date());
        log.info("设置收货地址的行数:{}",byUid);
    }


业务层

1异常的规划

1.查找不到这个aid的收货地址数据 AddressNotException

2.执行更新产生位置的UpdateException异常,无需重复的创建

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

2.抽象方法

setDefault(Integer aid,Integer uid,String username)方法:

  @Override
    public void setDefault(Integer aid, Integer uid, String username) {
        //1.首先判断此收货地址的数据是否存在
        Address byAid = addressMapper.findByAid(aid);
        if (byAid == null) {
            throw new AddressNotFoundException("找不到这条收货地址");
        }
        //非法访问 检测当前的收货地址的归属
        if (!uid.equals(byAid.getUid())){
            throw  new AccessDeniedException("访问数据非法");
        }
        //2.将所有的地址数据的id_default为0
        Integer integer = addressMapper.updateNonDefault(uid);
        if (integer < 1) {
            throw new UpdateException("更新数据产生位置的异常");
        }
        //3.将用户选择的某条地址设置为默认的收货地址
        Integer integer1 = addressMapper.updateDefaultByAid(aid, username, new Date());
        if (integer1 != 1) {
            throw new UpdateException("更新时产生了位置的异常");
        }
    }
}

4.测试

/**
     * 测试设置某个用户的收货地址为默认地址
     */
    @Test
    void  testSetDefault(){
        addressService.setDefault(27,10,"admin");
    }

控制层

1.异常处理

else if (e instanceof AccessDeniedException) {
            result.setState(4005);
            result.setMessage("收货地址数据访问非法的异常");
        }else if (e instanceof AddressNotFoundException) {
            result.setState(4004);
            result.setMessage("用户收货地址不存在的异常");
        }

2.设计请求

/address/update_is_default/{aid}
/HttpSession session Integer aid
/get
/JsonResult

 /**
      * 设置当前用户的默认收货地址
      * @param session
      * @param aid
      * @return
      * //RestFul
      */
     @RequestMapping("{aid}/update_is_default")
     public JsonResult<Void> updateDefault(HttpSession session,@PathVariable("aid") Integer aid){
         String username = getUsernameFromSession(session);
         Integer uid = getUidFromSession(session);
         addressService.setDefault(aid,uid,username);
         return  new JsonResult<Void>(OK);
     }
 }

前端页面

1.给设置默认收货地址按钮添加一个onclick属性,指向同一个方法,在这个方法中来完成ajax的请求的方法。
address.html页面点击“设置默认”按钮,来发送ajax请求。

let list = json.data;
							for (let i = 0; i < list.length ; i++) {
								//TODO
								let tr = '<tr>\n' +
									'<td>#{tag}</td>\n' +
									'<td>#{name}</td>\n' +
									'<td>#{address}</td>\n' +
									'<td>#{phone}</td>\n' +
									'<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>\n' +
									'<td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 删除</a></td>\n' +
									'<td><a  onclick="setDefault(#{aid}})" class="btn btn-xs add-def btn-default">设为默认</a></td>\n' +
									'</tr>';
								tr = tr.replace(/#{tag}/g,list[i].tag);
								tr = tr.replace(/#{name}/g,list[i].name);
								tr = tr.replace(/#{phone}/g,list[i].phone);
								tr = tr.replace(/#{address}/g,list[i].address);
								tr = tr.replace(/#{aid}/g,list[i].aid);

2.设置setDefault方法


function setDefault(aid){
				$.ajax({
					url :"/address"+aid+"/update_is_default",
					type:"post",
					dataType:"json",
					success : function(json) {
						if (json.state == 200) {
							showAddressList();
						}else {
							alert("设置默认地址失败")
						}
					},
					error : function(xhr) {
						alert("设置默认地址时产生了未知的错误异常"+xhr.message)
					}
				});
			};
			/**
posted @ 2022-11-07 10:38  wiselee/  阅读(95)  评论(0编辑  收藏  举报