| | |
| | | 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: |
| | |
| | | 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 |
| | |
| | | # 提交事务 |
| | | db.commit() |
| | | logger.info(f"联系人信息保存完成: 新增={saved_count}, 更新={updated_count}") |
| | | |
| | | # 同步联系人后更新Redis忽略列表 |
| | | self._update_redis_ignore_list(db) |
| | | |
| | | return True |
| | | |
| | | except Exception as e: |
| | |
| | | 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() |