logic_batch_task_create.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. from datetime import datetime
  2. from tkinter import messagebox
  3. from common.sql_lite import init_new_db_connection
  4. from db.batch_msg import batch_msg_create_many
  5. from db.batch_task import batch_task_create
  6. from service.robot import get_robot
  7. from ui.batch_task.ui_batch_task_create import WinGUIBatchTaskCreate
  8. class WinBatchTaskCreate(WinGUIBatchTaskCreate):
  9. def __init__(self):
  10. super().__init__()
  11. self.__event_bind()
  12. self.label_list = ["全部"]
  13. self.label_map = {
  14. "全部": 0
  15. }
  16. self.contacts = []
  17. def __event_bind(self):
  18. self.tk_button_send.bind('<Button-1>', self.send_event)
  19. self.tk_label_frame_contact.tk_select_box_type.bind('<<ComboboxSelected>>', self.on_select_event)
  20. self.tk_label_frame_contact.tk_select_box_label.bind('<<ComboboxSelected>>', self.on_select_event)
  21. self.tk_label_frame_contact.tk_table_contact_list.bind('<Control-a>', self.select_all_event)
  22. def on_select_event(self, event):
  23. contact_type = self.tk_label_frame_contact.tk_select_box_type.get()
  24. label = self.tk_label_frame_contact.tk_select_box_label.get()
  25. if contact_type == "联系人":
  26. self.tk_label_frame_contact.tk_select_box_label.config(state='normal')
  27. else:
  28. self.tk_label_frame_contact.tk_select_box_label.config(state='disabled')
  29. self.search(contact_type, label)
  30. def search(self, contact_type, label):
  31. # 清空列表
  32. self.tk_label_frame_contact.tk_table_contact_list.delete(*self.tk_label_frame_contact.tk_table_contact_list.get_children())
  33. self.contacts = []
  34. # 查询
  35. robot = get_robot()
  36. contacts = robot.getFriendOrChatRoomList(contact_type, self.label_map.get(label, 0))
  37. for contact in contacts:
  38. self.contacts.append((contact['wxid'], contact_type, contact['name']))
  39. for values in self.contacts:
  40. self.tk_label_frame_contact.tk_table_contact_list.insert('', "end", values=values)
  41. def send_event(self, event):
  42. content = self.tk_label_frame_content.tk_text_content.get(1.0, "end").strip()
  43. if content == "":
  44. messagebox.showerror('错误', '发送内容不能为空')
  45. return
  46. selected_items = self.tk_label_frame_contact.tk_table_contact_list.selection()
  47. if len(selected_items) == 0:
  48. if len(self.contacts) == 0:
  49. messagebox.showerror('错误', '请选择联系人或群组')
  50. return
  51. selected_items = self.contacts
  52. connection = init_new_db_connection()
  53. cursor = connection.cursor()
  54. try:
  55. now = datetime.now()
  56. created_at = int(now.timestamp())
  57. robot = get_robot()
  58. wx_wxid = robot.wcf.get_self_wxid()
  59. batch_task_id = batch_task_create(cursor, wx_wxid, content, len(selected_items))
  60. msg_to_insert = []
  61. for item in selected_items:
  62. item_values = self.tk_label_frame_contact.tk_table_contact_list.item(item, "values")
  63. print(item_values)
  64. if item_values[1] == "联系人":
  65. msg_type = 1
  66. else:
  67. msg_type = 2
  68. msg_to_insert.append((batch_task_id, created_at, msg_type, wx_wxid, item_values[0], item_values[2]))
  69. # 使用executemany来插入多行数据
  70. batch_msg_create_many(cursor, msg_to_insert)
  71. # 提交事务
  72. connection.commit()
  73. except Exception as e:
  74. # 回滚事务
  75. connection.rollback()
  76. print(f"发生错误: {e}")
  77. finally:
  78. # 确保资源被正确释放
  79. cursor.close()
  80. connection.close()
  81. # 关闭当前窗口
  82. self.destroy()
  83. def select_all_event(self, event):
  84. for item in self.tk_label_frame_contact.tk_table_contact_list.get_children():
  85. self.tk_label_frame_contact.tk_table_contact_list.selection_add(item)
  86. def open_batch_task_create_win():
  87. # 创建窗口对象
  88. win_batch_task_create = WinBatchTaskCreate()
  89. # 获取全部联系人和标签列表
  90. robot = get_robot()
  91. label_list = robot.getContactLabelList()
  92. for label in label_list:
  93. win_batch_task_create.label_map[label['LabelName']] = label['LabelId']
  94. win_batch_task_create.label_list.append(label['LabelName'])
  95. win_batch_task_create.tk_label_frame_contact.tk_select_box_label['values'] = win_batch_task_create.label_list
  96. win_batch_task_create.tk_label_frame_contact.tk_select_box_label.set(win_batch_task_create.label_list[0])
  97. win_batch_task_create.search(win_batch_task_create.tk_label_frame_contact.tk_select_box_type.get(), win_batch_task_create.tk_label_frame_contact.tk_select_box_label.get())
  98. # 设置默认
  99. # win_batch_task_create.tk_label_frame_contact.tk_select_box_type.set('联系人')
  100. # for values in users_to_insert:
  101. # win_batch_task_create.tk_label_frame_contact.tk_table_contact_list.insert('', "end", values=values)
  102. win_batch_task_create.mainloop()