设置默认收货地址

设置默认收货地址


持久层

SQL语句的规划

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

select * from t_address where 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=?

设计抽象方法

在AddressMappe接口中进行定义和声明

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

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

/**
 *
 * @param aid
 * @return
 */
Integer updateDefaultByAid(@Param("aid") Integer aid,
                           @Param("modifiedUser") String modifiedUser,
                           @Param("modifiedTime") Date modifiedTime);

配置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>

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

   @Test
public void findByAid(){
        Address byAid = addressMapper.findByAid(15);
        System.out.println(byAid);
    }

    @Test
public void updateNonDefault(){
    addressMapper.updateNonDefault(7);
    }

    @Test
public void updateDefaultByAid(){
    addressMapper.updateDefaultByAid(15,"管理员",new Date());
    }

业务层

异常的规划

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

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

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

抽象方法

在接口IAddressSevice编写抽象方法

   @Override
    public void setDefault(Integer aid, Integer uid, String username) { 
    }

实现抽象方法

在实现类中实现接口中的方法

@Override
public void setDefault(Integer aid, Integer uid, String username) {
    Address result = addressMapper.findByAid(aid);
    if(result == null){
        throw new AddressNotFoundException("收货地址不存在");
    }
    //检测当前收货地址归属
    if(!result.getUid().equals(uid)){
        throw new AccessDeniedException("非法数据访问");
    }
    //先将所有的收货地址设置为0(不是默认地址)
    Integer rows = addressMapper.updateNonDefault(uid);
    if(rows < 1 ){
        throw new UpdateException("修改数据时产生了未知的异常");
    }
    //设置选中的地址数据为1(默认地址)
    Integer rows1 = addressMapper.updateDefaultByAid(aid, username, new Date());
    if(rows1 != 1){
        throw new UpdateException("修改数据时产生了未知的异常");
    }
}

编写测试类测试

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

控制层

###处理异常
在BaseController类中进行统一的处理。

else if(e instanceof AddressCountLimitException){
        result.setstate(4003);
        result.setMessage("用户地址超出限制");
    }else if(e instanceof AccessDeniedException){
        result.setstate(4004);
        result.setMessage("非法数据访问");
    }

请求设计

/addresses/{aid}/set_default
@PathVariable(“id”) Integer aid,HttpSession session
GET
JsonResult

完成请求方法

在AddressController类中编写请求方法。

	//RestFul风格的请求编写
	@RequestMapping("{aid}/set_default")
	public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid,HttpSession session){
	    Integer uid = getUidFromSession(session);
	    String username = getUsernameFromSession(session);
	    addressService.setDefault(aid,uid,username);
	    return new JsonResult<>(OK);
	}
打开浏览

器先登录再去访问一个请求路径localhost:8080/addresses/{aid}/set_default

前端页面

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

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 οnclick="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("#{address}", list[i].address);
tr = tr.replace("#{phone}", list[i].phone);
tr = tr.replace("#{aid}",list[i].aid); 

address.html页面点击"设置默认"按钮,来发送ajax请求。完成setDefault()方法的声明和定义。

/*设置地址为默认地址*/
function setDefault(aid) {
	$.ajax({
		url:"/addresses/"+ aid +"/set_default",
		type:"GET",
		dataType:"JSON",
		success:function(json){
			if(json.state == 200){
				//重新加载收货地址页面
				showAddressList();
			}else {
				alert("设置默认收货地址失败");
			}
		},
		error:function (xhr) {
			alert("设置默认收货地址时产生了未知的异常" + xhr.message);
		}
	});
}

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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于小程序用户端的收货地址功能,以下是一些建议: 1. 地址管理页面:在小程序中设计一个地址管理页面,用于展示用户已保存的收货地址列表。可以显示收货人姓名、联系电话、详细地址等信息,并提供编辑、删除、设为默认地址等操作按钮。 2. 添加地址:用户可以通过点击添加地址按钮或在订单结算页面选择添加地址来新增收货地址。在添加地址时,可以提供输入框或表单供用户填写收货人姓名、联系电话、详细地址等信息,并进行必要的格式验证。 3. 编辑地址:用户可以对已保存的收货地址进行编辑操作。可以提供编辑按钮或点击地址进入编辑页面,用户可以修改收货人姓名、联系电话、详细地址等信息,并保存修改后的地址。 4. 删除地址:在地址管理页面,用户可以选择删除已保存的收货地址。可以提供删除按钮或滑动删除功能,用户确认删除后,相应的地址将从列表中移除。 5. 默认地址设置:为了方便用户下单时的选择,可以支持用户设置默认收货地址。用户可以在地址管理页面或在编辑地址时勾选设为默认地址,系统将自动将其设置默认地址。在订单结算页面,默认地址将自动显示,并且用户可以选择其他已保存的地址。 6. 地址选择:在订单结算页面或其他涉及到收货地址的地方,可以提供选择收货地址的功能。用户可以从已保存的地址列表中选择一个作为当前订单的收货地址。 7. 地址验证:为了保证地址的准确性,可以在用户填写或编辑地址时进行地址验证。可以通过调用地理位置服务或与第三方地址验证接口进行验证,确保用户输入的地址是有效的。 以上是关于小程序用户端收货地址功能的一些建议,希望对您有所帮助。如有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值