WeChatMsg/wxManager/db_v3/open_im_contact.py

145 lines
4.8 KiB
Python
Raw Normal View History

2025-03-28 21:29:18 +08:00
import os.path
import shutil
import sqlite3
import threading
import traceback
from wxManager.merge import increase_update_data
from wxManager.log import logger
from wxManager.model import DataBaseBase
class OpenIMContactDB(DataBaseBase):
def get_contacts(self):
result = []
if not self.open_flag:
return result
try:
sql = '''SELECT UserName,NickName,Type,Remark,BigHeadImgUrl,SmallHeadImgUrl,Source,NickNamePYInit,NickNameQuanPin,RemarkPYInit,RemarkQuanPin,CustomInfoDetail,DescWordingId
FROM OpenIMContact
WHERE Type!=0 AND Type!=4
'''
cursor = self.DB.cursor()
cursor.execute(sql)
result = cursor.fetchall()
self.commit() # 提交更改
except sqlite3.OperationalError:
logger.error(f'数据库错误:\n{traceback.format_exc()}')
res = []
if result:
for contact in result:
wording = self.get_wordinfo(contact[12])
if wording:
res.append((*contact, wording[1]))
else:
res.append((*contact, ''))
return res
def set_remark(self, username, remark):
update_sql = '''
UPDATE OpenIMContact
SET Remark = ?
WHERE UserName = ?
'''
cursor = self.DB.cursor()
cursor.execute(update_sql, [remark, username])
self.commit() # 提交更改
return True
def get_contact_by_username(self, username_):
result = []
if not self.open_flag:
return result
try:
sql = '''SELECT UserName,NickName,Type,Remark,BigHeadImgUrl,SmallHeadImgUrl,Source,NickNamePYInit,NickNameQuanPin,RemarkPYInit,RemarkQuanPin,CustomInfoDetail,DescWordingId
FROM OpenIMContact
WHERE UserName=?
'''
cursor = self.DB.cursor()
cursor.execute(sql, [username_])
result = cursor.fetchone()
self.commit() # 提交更改
except sqlite3.OperationalError:
logger.error(f'数据库错误:\n{traceback.format_exc()}')
if result:
result = list(result)
wording = self.get_wordinfo(result[12])
if wording:
result.append(wording[1])
else:
result.append('')
return result
def get_wordinfo(self, wording_id):
"""
获取企业微信所在的公司
@param wording_id:
@return: WordingId, id
Wording, 企业名
Pinyin, 拼音
Quanpin, 全拼
UpdateTime 更新时间
"""
result = []
return result
if not self.open_flag:
return result
try:
sql = '''SELECT WordingId,Wording,Pinyin,Quanpin,UpdateTime
FROM OpenIMWordingInfo
WHERE WordingId=?
'''
cursor = self.DB.cursor()
cursor.execute(sql, [wording_id])
result = cursor.fetchone()
self.commit() # 提交更改
except sqlite3.OperationalError:
logger.error(f'数据库错误:\n{traceback.format_exc()}')
return result
def increase_source(self, db_path_):
if not (os.path.exists(db_path_) or os.path.isfile(db_path_)):
print(f'{db_path_} 不存在')
return
if not self.sourceDB or not self.sourceCursor:
print(f'企业微信数据异常,尝试修复···')
try:
os.remove(open_im_source_db_path)
except:
pass
try:
shutil.copy(db_path_, open_im_source_db_path)
except:
pass
return
try:
lock.acquire(True)
# 获取列名
increase_update_data(db_path_, self.sourceCursor, self.sourceDB, 'OpenIMWordingInfo', 'WordingId', 2)
except sqlite3.Error as e:
print(f"数据库操作错误: {e}")
self.sourceDB.rollback()
finally:
lock.release()
def merge(self, db_path):
if not (os.path.exists(db_path) or os.path.isfile(db_path)):
print(f'{db_path} 不存在')
return
try:
# 获取列名
increase_update_data(db_path, self.cursor, self.DB, 'OpenIMContact', 'UserName', 0)
except:
print(f"数据库操作错误: {traceback.format_exc()}")
self.DB.rollback()
if __name__ == '__main__':
db_path = "./Msg/OpenIMContact.db"
msg = OpenIMContactDB()
msg.init_database()
contacts = msg.get_contacts()
for contact in contacts:
print(contact)