فهرست منبع

feat(地址管理): 添加地址数量限制并改进保存逻辑

在AddressService中添加每个用户最多20个地址的限制,当超过限制时抛出异常。同时改进地址保存逻辑:
1. 当用户没有地址时,自动将新地址设为默认地址
2. 在AddressController中捕获异常并返回友好错误信息
skyfffire 1 هفته پیش
والد
کامیت
f912d78649
2فایلهای تغییر یافته به همراه32 افزوده شده و 5 حذف شده
  1. 9 4
      src/main/java/modules/address/AddressController.java
  2. 23 1
      src/main/java/modules/address/AddressService.java

+ 9 - 4
src/main/java/modules/address/AddressController.java

@@ -125,10 +125,15 @@ public class AddressController extends MyController {
 
         address.setUserId(user.getId().intValue());
 
-        if (service.save(address)) {
-            renderJson(MyRet.ok("保存成功").setData(address));
-        } else {
-            renderJson(MyRet.fail("保存失败"));
+        try {
+            if (service.save(address)) {
+                renderJson(MyRet.ok("保存成功").setData(address));
+            } else {
+                renderJson(MyRet.fail("保存失败"));
+            }
+        } catch (RuntimeException e) {
+            // 捕获地址数量超过上限的异常
+            renderJson(MyRet.fail(e.getMessage()));
         }
     }
     

+ 23 - 1
src/main/java/modules/address/AddressService.java

@@ -7,6 +7,9 @@ import java.util.List;
 
 public class AddressService {
 
+    // 定义每个用户最大地址数量限制
+    private static final int MAX_ADDRESS_COUNT = 20;
+    
     private final Address dao = new Address().dao();
 
     public List<Address> findByUserId(Long userId) {
@@ -17,7 +20,20 @@ public class AddressService {
         return dao.findFirst("select * from t_address where id = ? and user_id = ? and is_deleted = 0", id, userId);
     }
 
-    public boolean save(Address address) {
+    /**
+     * 保存地址,如果地址数量超过上限会抛出异常
+     * @param address 地址对象
+     * @return 保存结果
+     * @throws RuntimeException 当地址数量超过上限时抛出异常
+     */
+    public boolean save(Address address) throws RuntimeException {
+        // 检查用户地址数量是否已达上限
+        List<Address> existingAddresses = findByUserId(address.getUserId().longValue());
+        if (existingAddresses != null && existingAddresses.size() >= MAX_ADDRESS_COUNT) {
+            // 如果地址数量已达上限,抛出异常
+            throw new RuntimeException("地址数量已达上限(最多" + MAX_ADDRESS_COUNT + "个)");
+        }
+        
         // 设置初始状态
         address.setIsDeleted(0);
         
@@ -26,6 +42,12 @@ public class AddressService {
         address.setCreateTime(currentTime);
         address.setUpdateTime(currentTime);
         
+        // 检查用户是否有现有地址
+        if (existingAddresses == null || existingAddresses.isEmpty()) {
+            // 如果用户没有地址,则自动将新地址设为默认地址
+            address.setIsDefault(1);
+        }
+        
         if (address.getIsDefault() == 1) {
             // 如果将当前地址设为默认,则将该用户其他地址设为非默认
             Db.update("update t_address set is_default = 0, update_time = ? where user_id = ?",