14.设置默认地址模块

1.业务分析

  • 可能存在的异常: 用户在设置的时候,该地址可能同时被管理员删除,抛AddressNotFoundException异常
  • 在设置当前地址为默认之前,将该用户的所有地址都设置成非默认,即is_default设置成为0
  • 根据地址的id设置其字段is_default为1

2.持久层接口及mapper映射

/**
 *@描述 根据aid查找收货地址是否存在
 *@参数 收货地址id
 *@返回值 收货地址
 *@创建人 ZhangHailong
 */
Address selectAddressByAid(Integer aid);

/**
 *@描述 将用户所有的收货地址设置成非默认
 *@参数 用户id
 *@返回值 受影响的行数
 *@创建人 ZhangHailong
 */
Integer updateNonDefaultAddress(Integer uid);

/**
 *@描述 将当前收货地址设置成默认
 *@参数 aid: 商品id, modifiedUser: 日志修改者, modifiedTime: 日志修改时间
 *@返回值 受影响的行数
 *@创建人 ZhangHailong
 */
Integer updateDefaultAddress(@Param("aid") Integer aid,
                             @Param("modifiedUser") String modifiedUser,
                             @Param("modifiedTime") Date modifiedTime);
  • 在开发中我遇到了一个问题,updateDefaultAddress接口中使用了多个参数,一开始并未添加@Param注解,该接口的映射文件中的sql语句并不是按照接口参数的顺序使用的,所以会报param not found的错误,所以记住 持久层接口中的参数如果是多个,非对象的, 此时使用@Param注解对其进行添加别名

3.业务层

@Override
public void setDefaultAddress(Integer uid, Integer aid, String modifiedUser) {

    // 先判断当前需要设置为默认的收货地址是否存在
    Address address = addressDao.selectAddressByAid(aid);
    if (address == null) {
        throw new AddressNotFoundException("当前设置的地址不存在");
    }

    // 先将该用户所有的收货地址设置成非默认的
    addressDao.updateNonDefaultAddress(uid);

    // 再将收货地址id为aid的地址设置成默认的
    addressDao.updateDefaultAddress(aid,modifiedUser,new Date());

}

4.控制层

/**
 *@描述 设置默认收货地址controller
 *@参数 收货地址id
 *@返回值 void
 *@创建人 ZhangHailong
 */
@RequestMapping(value = "{aid}/setDefaultAddress", method = RequestMethod.POST)
public JsonResult<Void> setDefaultAddressController(@PathVariable("aid") Integer aid, HttpSession session) {

    iAddressService.setDefaultAddress(
            getUidFromSession(session),
            aid,
            getUsernameFromSession(session));

    return new JsonResult<>(OK);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值