Browse Source

refactor(customer): 优化客户联系人删除逻辑并完善远程用户服务接口

hurx 4 tuần trước cách đây
mục cha
commit
4c444738bc

+ 3 - 3
ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java

@@ -195,10 +195,10 @@ public interface RemoteUserService {
     Long addUser(RemoteUserBo remoteUserBo) throws ServiceException;
 
     /**
-    * 编辑用户
-    * */
+     * 编辑用户
+     */
     Long editUser(RemoteUserBo remoteUserBo);
 
-
+    Integer deleteUser(Long userId);
 
 }

+ 1 - 1
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/controller/pc/PcContactController.java

@@ -46,7 +46,7 @@ public class PcContactController extends BaseController {
         // TODO: 需要根据当前登录用户的实际ID查询联系人信息
         // 目前LoginHelper.getUserId()返回的是customerId(企业ID)
         // 需要通过其他方式(如手机号、用户名)来查询当前用户的联系人记录
-        Long userId = LoginHelper.getUserId();
+        Long userId = LoginHelper.getLoginUser().getUserId();
 
         // 查询该企业下的联系人(不限制是否为主联系人)
         CustomerContactBo bo = new CustomerContactBo();

+ 41 - 4
ruoyi-modules/ruoyi-customer/src/main/java/org/dromara/customer/service/impl/CustomerContactServiceImpl.java

@@ -38,6 +38,8 @@ import java.time.Duration;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 客户联系人信息Service业务层处理
@@ -254,11 +256,46 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
      * @param isValid 是否进行有效性校验
      * @return 是否删除成功
      */
-    @Override
+    /**
+     * 批量删除联系人
+     *
+     * @param ids     ID 集合
+     * @param isValid 是否需要业务校验
+     * @return 是否删除成功
+     */
+    @Transactional(rollbackFor = Exception.class) // 1. 开启事务
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if (isValid) {
-            //TODO 做一些业务上的校验,判断是否需要校验
+        if (ids == null || ids.isEmpty()) {
+            return false;
+        }
+
+        // 3. 【关键优化】批量查询
+        List<CustomerContact> contactList = baseMapper.selectBatchIds(ids);
+
+        if (contactList.isEmpty()) {
+            return false;
         }
-        return baseMapper.deleteByIds(ids) > 0;
+
+        // 5. 提取 userId 列表
+        List<Long> userIds = contactList.stream()
+            .map(CustomerContact::getUserId)
+            .filter(Objects::nonNull) // 过滤掉 userId 为 null 的情况
+            .distinct()
+            .collect(Collectors.toList());
+
+        // 6. 【关键优化】批量调用远程服务
+
+        for (Long uid : userIds) {
+            try {
+                remoteUserService.deleteUser(uid);
+            } catch (Exception e) {
+                log.error("删除远程用户 {} 失败", uid, e);
+                throw new ServiceException("依赖服务异常,删除中止"); // 抛出异常触发回滚
+            }
+        }
+        // 7. 执行本地数据库删除
+        int rows = baseMapper.deleteByIds(ids); // 确保 MP 版本支持或自定义 XML
+
+        return rows > 0;
     }
 }

+ 5 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java

@@ -515,4 +515,9 @@ public class RemoteUserServiceImpl implements RemoteUserService {
         userService.updateUser(sysUserBo);
         return sysUserBo.getUserId();
     }
+
+    @Override
+    public Integer deleteUser(Long userId) {
+        return userService.deleteUserById(userId);
+    }
 }