设置默认收货地址
首先进行mapper层的设计
首先需要分三步走
//查看用户想设置为默认地址的这条数据是否存在
Address isMorenAddress(Integer aid);
//在修改用户的收货默认地址之前先把所有地址设为非默认
Integer IsNotDefault(Integer uid);
//将用户选中的这条记录作为默认地址
Integer IsDefault(@Param("aid") Integer aid, @Param("modifiedUser") String modifiedUser, @Param("modifiedTime") Date modifiedTime);
<select id="isMorenAddress" resultType="com.cy.store.entity.Address" resultMap="AddressEntityMap">
select * from t_address where aid=#{aid}
</select>
<update id="IsNotDefault">
update t_address set is_default=0 where uid=#{uid}
</update>
<update id="IsDefault">
update t_address set is_default=1,
modified_user=#{modifiedUser},
modified_time=#{modifiedTime}
where aid=#{aid}
</update>
默认收获地址时需要永远把默认的收货地址设置为第一条,所以展示收货地址的sql语句需要改变
<select id="showAddress" resultType="com.cy.store.entity.Address" resultMap="AddressEntityMap">
select * from t_address where uid=#{uid} order by is_default desc,created_time desc
</select>
接着设计service层
//设置默认地址
void setDefaultAddress(Integer aid,
Integer uid,
String username);
需要设计异常 AccessDeniedException AddressNotFoundException
@Override
public void setDefaultAddress(Integer aid, Integer uid, String username) {
Address address = addressMapper.isMorenAddress(aid);
if (address == null){
throw new AddressNotFoundException("收货地址不存在");
}
//获取当前收货地址的归属
if (!address.getUid().equals(uid)){
throw new AccessDeniedException("非法数据访问");
}
//先将所有的用户地址设置为非默认
Integer rows = addressMapper.IsNotDefault(uid);
if (rows < 1){
throw new UpdateException("更新数据产生未知的异常");
}
rows = addressMapper.IsDefault(aid,username,new Date());
if (rows != 1){
throw new UpdateException("更新数据产生未知的异常");
}
}
接着设计controller层
RestFul是一种风格,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
但是他也必须要使用@PathVariable注解,两者必须搭配使用,否则会报错。
//RestFul风格的请求编写
@RequestMapping("{aid}/set_default")
public JsonResult<List<Void>> showaddAddress(@PathVariable("aid") Integer aid,
HttpSession session){
addressService.setDefaultAddress(aid,getUidFromSession(session),getUsernameFromSession(session));
return new JsonResult<>(OK);
}
前端页面的实现
function showAddressList(){
$("#address-list").empty();
$.ajax({
url:"/address/showAddress",
dataType:"json",
type:"post",
success:function (data){
if (data.state==200){
let list = data.data;
/*let x=0;*/
for (let i = 0; i < list.length;i++) {
let tr = "<tr>\n" +
"<td>"+list[i].tag+"</td>\n" +
"<td>"+list[i].name+"</td>\n" +
"<td>"+list[i].address+"</td>\n" +
"<td>"+list[i].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("#{aid}",list[i].aid);
//alert(list[i].aid);
$("#address-list").append(tr);
/*if (list[i].is_default==1){
x=i;
}*/
}
//将第一行的设置默认隐藏,因为第一个就是默认
$(".add-def:eq(0)").hide();
}else{
alert("新增失败");
}
},
error:function (data){
alert("产生未知错误"+data.status)
}
})
}
function setDefault(aid){
$.ajax({
url:"/address/"+aid+"/set_default",
dataType:"json",
type:"post",
success:function (data){
if (data.state==200){
//$("#address-list").clear();
showAddressList();
}else{
alert("设置默认收货地址失败");
}
},
error:function (data){
alert("设置默认收货地址产生未知错误"+data.status)
}
})
}