| | |
| | | return accountAddressMapper.deleteAddressByIds(ids); |
| | | } |
| | | |
| | | @Override |
| | | public List<AccountAddress> getAddressList(Long userId) |
| | | { |
| | | return accountAddressMapper.selectAddressByUserId(userId); |
| | | } |
| | | |
| | | @Override |
| | | public AccountAddress getAddressDetail(Long userId, Long id) |
| | | { |
| | | // 编辑页回填:需校验归属,防止拿到他人地址 |
| | | return queryOwnedAddress(userId, id); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public int insertMyAddress(AccountAddress accountAddress) |
| | | { |
| | | // STEP 1: 会员身份防御性校验(正常由登录态注入,必非空) |
| | | if (accountAddress.getUserId() == null) |
| | | { |
| | | throw new ServiceException("会员身份缺失"); |
| | | } |
| | | // STEP 2: 是否默认完全以用户勾选为准,不做「首条自动默认」的强制改写; |
| | | // 为空时明确兜底为 0,避免落库为 null 影响前端判定 |
| | | if (!"1".equals(accountAddress.getIsDefault())) |
| | | { |
| | | accountAddress.setIsDefault("0"); |
| | | } |
| | | // STEP 3: 置为默认前先清掉旧默认,保证"每会员至多一条默认"(与插入同事务) |
| | | if ("1".equals(accountAddress.getIsDefault())) |
| | | { |
| | | accountAddressMapper.clearDefaultByUserId(accountAddress.getUserId()); |
| | | } |
| | | // STEP 4: 落库 |
| | | return accountAddressMapper.insertAddress(accountAddress); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public int deleteMyAddress(Long userId, Long id) |
| | | { |
| | | // 校验归属:非本人地址直接抛异常,避免越权删除(deleteAddressByIds 本身不带 user_id) |
| | | queryOwnedAddress(userId, id); |
| | | return accountAddressMapper.deleteAddressByIds(new Long[]{ id }); |
| | | } |
| | | |
| | | /** |
| | | * 查询地址并校验归属 |
| | | * |
| | | * 地址不存在或不属于该会员时统一抛业务异常(避免暴露他人地址是否存在)。 |
| | | */ |
| | | private AccountAddress queryOwnedAddress(Long userId, Long id) |
| | | { |
| | | AccountAddress address = accountAddressMapper.selectAddressById(id); |
| | | if (address == null || !Objects.equals(address.getUserId(), userId)) |
| | | { |
| | | throw new ServiceException("收货地址不存在或不属于该会员"); |
| | | } |
| | | return address; |
| | | } |
| | | |
| | | |
| | | private Date resolveBindTime(Long oldId, Long newId, Date oldTime, Date now) |
| | | { |