|
@@ -38,6 +38,8 @@ import java.time.Duration;
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.Objects;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 客户联系人信息Service业务层处理
|
|
* 客户联系人信息Service业务层处理
|
|
@@ -254,11 +256,46 @@ public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMappe
|
|
|
* @param isValid 是否进行有效性校验
|
|
* @param isValid 是否进行有效性校验
|
|
|
* @return 是否删除成功
|
|
* @return 是否删除成功
|
|
|
*/
|
|
*/
|
|
|
- @Override
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 批量删除联系人
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param ids ID 集合
|
|
|
|
|
+ * @param isValid 是否需要业务校验
|
|
|
|
|
+ * @return 是否删除成功
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class) // 1. 开启事务
|
|
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
|
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;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|