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