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)
}
});
};
/**
本文来自博客园,作者:wiselee/,转载请注明原文链接:https://www.cnblogs.com/wiseleer/p/16865188.html