yj
2025-09-03 f28ac0166536a2a4b68cac685a41ea667f60f7e9
app/services/contact_sync.py
@@ -133,6 +133,9 @@
                        existing_contact.small_head = contact_data.get("smallHead")
                        existing_contact.label_list = contact_data.get("labelList")
                        existing_contact.v1 = contact_data.get("v1")
                        # 只有当新的workWcId不为空时才更新
                        if contact_data.get("workWcId"):
                            existing_contact.work_wc_id = contact_data.get("workWcId")
                        updated_count += 1
                        logger.debug(f"更新联系人信息: wc_id={wc_id}, nick_name={contact_data.get('nickName')}")
                    else:
@@ -150,6 +153,7 @@
                            small_head=contact_data.get("smallHead"),
                            label_list=contact_data.get("labelList"),
                            v1=contact_data.get("v1"),
                            work_wc_id=contact_data.get("workWcId"),  # 添加企业微信ID
                        )
                        db.add(new_contact)
                        saved_count += 1
@@ -158,6 +162,10 @@
                # 提交事务
                db.commit()
                logger.info(f"联系人信息保存完成: 新增={saved_count}, 更新={updated_count}")
                # 同步联系人后更新Redis忽略列表
                self._update_redis_ignore_list(db)
                return True
        except Exception as e:
@@ -166,6 +174,45 @@
                db.rollback()
            return False
    def _update_redis_ignore_list(self, db: Session) -> bool:
        """
        同步联系人后更新Redis忽略列表
        将数据库中contacts表中work_wc_id不为空的记录的work_wc_id作为wc_id添加到Redis忽略列表
        Args:
            db: 数据库会话
        Returns:
            更新成功返回True,失败返回False
        """
        try:
            # 查询所有work_wc_id不为空且不为空字符串的联系人
            contacts_with_work_wc_id = db.query(Contact).filter(
                Contact.work_wc_id.isnot(None) & (Contact.work_wc_id != "")
            ).all()
            if not contacts_with_work_wc_id:
                logger.info("没有找到work_wc_id不为空的联系人")
                return True
            # 提取所有work_wc_id
            work_wc_ids = [contact.work_wc_id for contact in contacts_with_work_wc_id]
            logger.info(f"找到 {len(work_wc_ids)} 个work_wc_id不为空的联系人")
            # 将这些work_wc_id添加到Redis忽略列表
            success = friend_ignore_service.add_friends_to_ignore_list(work_wc_ids)
            if success:
                logger.info(f"成功将 {len(work_wc_ids)} 个work_wc_id添加到Redis忽略列表")
            else:
                logger.error("添加work_wc_id到Redis忽略列表失败")
            return success
        except Exception as e:
            logger.error(f"更新Redis忽略列表异常: error={str(e)}")
            return False
# 全局联系人同步服务实例
contact_sync_service = ContactSyncService()