mirror of
https://github.com/LC044/WeChatMsg
synced 2025-04-19 02:08:05 +08:00
145 lines
4.8 KiB
Python
145 lines
4.8 KiB
Python
|
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)
|