From a4afcfdb179e62a498b62cc6860d8cd46701a08f Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期三, 14 十月 2026 09:53:47 +0800
Subject: [PATCH] feat(user, miniapp): 完成C端小程序收货地址完整功能闭环
---
hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java | 61 ++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java b/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java
index f939d2e..a26c589 100644
--- a/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java
+++ b/hugray-server/ruoyi-modules/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/AccountUserServiceImpl.java
@@ -297,6 +297,67 @@
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)
{
--
Gitblit v1.7.1