Update AddrController.java

cyj
pbvfus8to 2 months ago
parent fe3a23381f
commit d994e91883

@ -31,6 +31,8 @@ import java.util.Date;
import java.util.List;
/**
*
*
* @author lanhai
*/
@RestController
@ -39,120 +41,195 @@ import java.util.List;
@AllArgsConstructor
public class AddrController {
// 自动注入用户地址服务层接口,通过该接口调用具体的业务逻辑方法来处理用户地址相关业务
@Autowired
private UserAddrService userAddrService;
/**
*
*
* DTO
*
* @return ServerResponseEntity UserAddrDto 便使
*/
@GetMapping("/list")
@Operation(summary = "用户地址列表", description = "获取用户的所有地址信息")
public ServerResponseEntity<List<UserAddrDto>> dvyList() {
// 获取当前用户的 ID用于筛选属于该用户的地址记录
String userId = SecurityUtils.getUser().getUserId();
List<UserAddr> userAddrs = userAddrService.list(new LambdaQueryWrapper<UserAddr>().eq(UserAddr::getUserId, userId).orderByDesc(UserAddr::getCommonAddr).orderByDesc(UserAddr::getUpdateTime));
// 使用 MyBatis Plus 的 LambdaQueryWrapper 构建查询条件,查询当前用户的所有地址信息,并按照常用地址和更新时间降序排序
List<UserAddr> userAddrs = userAddrService.list(new LambdaQueryWrapper<UserAddr>()
.eq(UserAddr::getUserId, userId)
.orderByDesc(UserAddr::getCommonAddr)
.orderByDesc(UserAddr::getUpdateTime));
// 使用 Hutool 的 BeanUtil 将查询到的 UserAddr 类型的地址列表转换为 UserAddrDto 类型列表,方便返回给前端展示
return ServerResponseEntity.success(BeanUtil.copyToList(userAddrs, UserAddrDto.class));
}
/**
* AddrParam
* ID 0
*
*
* @param addrParam @Valid
* @return ServerResponseEntity "添加地址成功" ID
*/
@PostMapping("/addAddr")
@Operation(summary = "新增用户地址", description = "新增用户地址")
public ServerResponseEntity<String> addAddr(@Valid @RequestBody AddrParam addrParam) {
// 获取当前用户的 ID用于关联新地址到该用户
String userId = SecurityUtils.getUser().getUserId();
// 如果传入的地址 ID 不为空且不等于 0说明该地址可能已存在返回相应的错误提示信息
if (addrParam.getAddrId()!= null && addrParam.getAddrId()!= 0) {
return ServerResponseEntity.showFailMsg("该地址已存在");
}
// 统计当前用户已有的地址数量,用于判断是否需要将新地址设置为默认地址
long addrCount = userAddrService.count(new LambdaQueryWrapper<UserAddr>().eq(UserAddr::getUserId, userId));
// 使用 Hutool 的 BeanUtil 将 AddrParam 类型的参数对象转换为 UserAddr 类型,方便保存到数据库
UserAddr userAddr = BeanUtil.copyProperties(addrParam, UserAddr.class);
// 如果当前用户没有地址记录则将新地址设置为默认地址常用地址commonAddr 设为 1
if (addrCount == 0) {
userAddr.setCommonAddr(1);
} else {
// 否则设置为非默认地址commonAddr 设为 0
userAddr.setCommonAddr(0);
}
// 设置用户 ID明确该地址所属的用户
userAddr.setUserId(userId);
// 设置地址状态为有效(这里假设 1 表示有效状态)
userAddr.setStatus(1);
// 设置地址的创建时间为当前时间
userAddr.setCreateTime(new Date());
// 设置地址的更新时间为当前时间
userAddr.setUpdateTime(new Date());
// 调用用户地址服务层的保存方法,将新地址信息保存到数据库中
userAddrService.save(userAddr);
// 如果新地址被设置为默认地址commonAddr 为 1则清除默认地址缓存确保缓存数据的一致性
if (userAddr.getCommonAddr() == 1) {
// 清除默认地址缓存
userAddrService.removeUserAddrByUserId(0L, userId);
}
return ServerResponseEntity.success("添加地址成功");
}
/**
*
* AddrParam
*
*
* @param addrParam @Valid
* @return ServerResponseEntity "修改地址成功"
*/
@PutMapping("/updateAddr")
@Operation(summary = "修改订单用户地址", description = "修改用户地址")
public ServerResponseEntity<String> updateAddr(@Valid @RequestBody AddrParam addrParam) {
// 获取当前用户的 ID用于验证地址是否属于该用户以及后续更新操作
String userId = SecurityUtils.getUser().getUserId();
// 根据传入的地址 ID 和用户 ID从数据库中查询对应的用户地址记录若不存在则返回相应的错误提示信息
UserAddr dbUserAddr = userAddrService.getUserAddrByUserId(addrParam.getAddrId(), userId);
if (dbUserAddr == null) {
return ServerResponseEntity.showFailMsg("该地址已被删除");
}
// 使用 Hutool 的 BeanUtil 将 AddrParam 类型的参数对象转换为 UserAddr 类型,准备更新到数据库
UserAddr userAddr = BeanUtil.copyProperties(addrParam, UserAddr.class);
// 设置用户 ID确保更新的是正确用户的地址记录
userAddr.setUserId(userId);
// 设置地址的更新时间为当前时间
userAddr.setUpdateTime(new Date());
// 调用用户地址服务层的更新方法,将更新后的地址信息保存到数据库中
userAddrService.updateById(userAddr);
// 清除当前地址缓存
// 清除当前地址的缓存,保证缓存数据与数据库最新数据一致
userAddrService.removeUserAddrByUserId(addrParam.getAddrId(), userId);
// 清除默认地址缓存
// 清除默认地址缓存,确保默认地址相关数据的准确性
userAddrService.removeUserAddrByUserId(0L, userId);
return ServerResponseEntity.success("修改地址成功");
}
/**
*
* ID
*
*
* @param addrId ID
* @return ServerResponseEntity "删除地址成功"
*/
@DeleteMapping("/deleteAddr/{addrId}")
@Operation(summary = "删除订单用户地址", description = "根据地址id删除用户地址")
@Parameter(name = "addrId", description = "地址ID", required = true)
public ServerResponseEntity<String> deleteDvy(@PathVariable("addrId") Long addrId) {
// 获取当前用户的 ID用于验证地址是否属于该用户以及后续删除操作
String userId = SecurityUtils.getUser().getUserId();
// 根据传入的地址 ID 和用户 ID从数据库中查询对应的用户地址记录若不存在则返回相应的错误提示信息
UserAddr userAddr = userAddrService.getUserAddrByUserId(addrId, userId);
if (userAddr == null) {
return ServerResponseEntity.showFailMsg("该地址已被删除");
}
// 如果该地址是默认地址commonAddr 为 1则不允许删除返回相应的错误提示信息
if (userAddr.getCommonAddr() == 1) {
return ServerResponseEntity.showFailMsg("默认地址无法删除");
}
// 调用用户地址服务层的删除方法,从数据库中删除该地址记录
userAddrService.removeById(addrId);
// 清除对应地址的缓存,保证缓存数据与数据库数据的一致性
userAddrService.removeUserAddrByUserId(addrId, userId);
return ServerResponseEntity.success("删除地址成功");
}
/**
*
* ID
*
*
* @param addrId ID
* @return ServerResponseEntity "修改地址成功"
*/
@PutMapping("/defaultAddr/{addrId}")
@Operation(summary = "设置默认地址", description = "根据地址id设置默认地址")
public ServerResponseEntity<String> defaultAddr(@PathVariable("addrId") Long addrId) {
// 获取当前用户的 ID用于关联默认地址到该用户
String userId = SecurityUtils.getUser().getUserId();
// 调用用户地址服务层的方法,将指定地址 ID 的地址设置为当前用户的默认地址
userAddrService.updateDefaultUserAddr(addrId, userId);
// 清除默认地址的缓存,保证缓存数据与数据库最新数据一致
userAddrService.removeUserAddrByUserId(0L, userId);
// 清除当前设置为默认地址的地址缓存,确保相关数据准确性
userAddrService.removeUserAddrByUserId(addrId, userId);
return ServerResponseEntity.success("修改地址成功");
}
/**
*
* ID UserAddrDto
*
*
* @param addrId ID
* @return ServerResponseEntity UserAddrDto
*/
@GetMapping("/addrInfo/{addrId}")
@Operation(summary = "获取地址信息", description = "根据地址id获取地址信息")
@Parameter(name = "addrId", description = "地址ID", required = true)
public ServerResponseEntity<UserAddrDto> addrInfo(@PathVariable("addrId") Long addrId) {
// 获取当前用户的 ID用于验证地址是否属于该用户以及查询操作
String userId = SecurityUtils.getUser().getUserId();
// 根据传入的地址 ID 和用户 ID从数据库中查询对应的用户地址记录若不存在则抛出相应的异常
UserAddr userAddr = userAddrService.getUserAddrByUserId(addrId, userId);
if (userAddr == null) {
throw new YamiShopBindException("该地址已被删除");
}
// 使用 Hutool 的 BeanUtil 将查询到的 UserAddr 类型的地址信息转换为 UserAddrDto 类型,方便返回给前端展示
return ServerResponseEntity.success(BeanUtil.copyProperties(userAddr, UserAddrDto.class));
}
}
Loading…
Cancel
Save