SelectLogDialog.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. import os
  2. import sys
  3. from stringprep import in_table_c11
  4. from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QTabWidget, QLabel, QLineEdit, QTextEdit, QFormLayout, QMessageBox, QTreeWidget, QTreeWidgetItem, QDialog, QVBoxLayout as QDialogVBoxLayout, QLineEdit as QDialogLineEdit, QDialogButtonBox, QCheckBox, QComboBox
  5. from PyQt5.QtCore import Qt
  6. import requests as req
  7. import time,random,numpy as np
  8. import threading
  9. import asyncio
  10. import json
  11. from PyQt5.QtWidgets import QFileDialog
  12. from PyQt5.QtCore import pyqtSignal, QObject,pyqtSlot
  13. import sqlite3
  14. from EditSelectLogDialog import EditSelectLogDialog
  15. from datetime import datetime
  16. class SelectLogDialog(QDialog):
  17. def __init__(self, parent=None, title="添加选品日志"):
  18. super().__init__(parent)
  19. self.setWindowTitle(title)
  20. self.setGeometry(100, 100, 600, 400)
  21. layout = QDialogVBoxLayout()
  22. # 商品ID输入框
  23. item_id_label = QLabel("商品ID")
  24. self.item_id_edit = QDialogLineEdit()
  25. layout.addWidget(item_id_label)
  26. layout.addWidget(self.item_id_edit)
  27. # 商品名称输入框
  28. item_name_label = QLabel("商品名称")
  29. self.item_name_edit = QDialogLineEdit()
  30. layout.addWidget(item_name_label)
  31. layout.addWidget(self.item_name_edit)
  32. # 磨损最低值输入框
  33. min_wear_label = QLabel("磨损最低值")
  34. self.min_wear_edit = QDialogLineEdit()
  35. layout.addWidget(min_wear_label)
  36. layout.addWidget(self.min_wear_edit)
  37. # 磨损最高值输入框
  38. max_wear_label = QLabel("磨损最高值")
  39. self.max_wear_edit = QDialogLineEdit()
  40. layout.addWidget(max_wear_label)
  41. layout.addWidget(self.max_wear_edit)
  42. # 全磨损区间最低价输入框
  43. min_full_wear_price_label = QLabel("全磨损区间最低价")
  44. self.min_full_wear_price_edit = QDialogLineEdit()
  45. layout.addWidget(min_full_wear_price_label)
  46. layout.addWidget(self.min_full_wear_price_edit)
  47. # 扫货价输入框
  48. sweep_price_label = QLabel("扫货价")
  49. self.sweep_price_edit = QDialogLineEdit()
  50. layout.addWidget(sweep_price_label)
  51. layout.addWidget(self.sweep_price_edit)
  52. # 判断价输入框
  53. judge_price_label = QLabel("判断价")
  54. self.judge_price_edit = QDialogLineEdit()
  55. layout.addWidget(judge_price_label)
  56. layout.addWidget(self.judge_price_edit)
  57. # 时间输入框
  58. timestamp_label = QLabel("时间")
  59. self.timestamp_edit = QDialogLineEdit()
  60. layout.addWidget(timestamp_label)
  61. layout.addWidget(self.timestamp_edit)
  62. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  63. button_box.accepted.connect(self.accept)
  64. button_box.rejected.connect(self.reject)
  65. layout.addWidget(button_box)
  66. self.setLayout(layout)
  67. @staticmethod
  68. def export_selected_logs(self):
  69. # 获取选中的日志项
  70. selected_items = self.select_log_tree_widget.selectedItems()
  71. if not selected_items:
  72. QMessageBox.warning(self, "导出选品日志", "请选择要导出的日志项")
  73. return
  74. # 将选中的日志项转换为字典列表
  75. logs = {}
  76. for item in selected_items:
  77. logs[item.text(1)] = {
  78. "price":item.text(6),
  79. "min_paintwear":item.text(3),
  80. "max_paintwear" :item.text(4),
  81. "name":item.text(2),
  82. '商品ID': item.text(1),
  83. '商品名称': item.text(2),
  84. '磨损最低值': item.text(3),
  85. '磨损最高值': item.text(4),
  86. '全磨损区间最低价': item.text(5),
  87. '扫货价': item.text(6),
  88. '判断价': item.text(7),
  89. '时间': item.text(8)
  90. }
  91. # 选择保存文件的路径
  92. file_path, _ = QFileDialog.getSaveFileName(self, "导出选品日志", "", "JSON Files (*.json)")
  93. if file_path:
  94. try:
  95. with open(file_path, 'w', encoding='utf-8') as f:
  96. json.dump(logs, f, ensure_ascii=False, indent=4)
  97. QMessageBox.information(self, "导出选品日志", f"日志已成功导出到 {file_path}")
  98. except Exception as e:
  99. QMessageBox.critical(self, "导出选品日志", f"导出日志时发生错误: {e}")
  100. @staticmethod
  101. def export_selected_logs_tolocal(self):
  102. # 将列表中所有数据导出
  103. logs = {}
  104. for i in range(self.select_log_tree_widget.topLevelItemCount()):
  105. item = self.select_log_tree_widget.topLevelItem(i)
  106. logs[item.text(1)] = {
  107. "price":item.text(6),
  108. "min_paintwear":item.text(3),
  109. "max_paintwear" :item.text(4),
  110. "name":item.text(2),
  111. '商品ID': item.text(1),
  112. '商品名称': item.text(2),
  113. '磨损最低值': item.text(3),
  114. '磨损最高值': item.text(4),
  115. '全磨损区间最低价': item.text(5),
  116. '扫货价': item.text(6),
  117. '判断价': item.text(7),
  118. '时间': item.text(8)
  119. }
  120. # 保存到本地的xprz的文件夹中,文件名为当前时间戳+XPRZ.json
  121. current_time = datetime.now().strftime("%Y%m%d%H%M%S")
  122. file_name = f"{current_time}_选品日志文件.json"
  123. file_path = os.path.join(os.getcwd(), '选品日志文件', file_name)
  124. try:
  125. with open(file_path, 'w', encoding='utf-8') as f:
  126. json.dump(logs, f, ensure_ascii=False, indent=4)
  127. self.detail_logger.debug(f"日志已成功导出到 {file_path}")
  128. except Exception as e:
  129. self.detail_logger.debug(f"导出日志时发生错误: {e}")
  130. @staticmethod
  131. def delete_all_select_logs(self):
  132. # 连接到SQLite数据库
  133. conn = sqlite3.connect('buff.db')
  134. cursor = conn.cursor()
  135. # 清空表中的数据
  136. cursor.execute('DELETE FROM select_logs')
  137. # 提交更改并关闭连接
  138. conn.commit()
  139. conn.close()
  140. @staticmethod
  141. def save_select_logs(self):
  142. # 连接到SQLite数据库
  143. conn = sqlite3.connect('buff.db')
  144. cursor = conn.cursor()
  145. # 清空表中的数据
  146. cursor.execute('DELETE FROM select_logs')
  147. # 获取树形控件中的所有项
  148. for i in range(self.select_log_tree_widget.topLevelItemCount()):
  149. item = self.select_log_tree_widget.topLevelItem(i)
  150. item_id = item.text(1)
  151. item_name = item.text(2)
  152. min_wear = item.text(3)
  153. max_wear = item.text(4)
  154. #判断item.text(5)是否为''
  155. if item.text(5) == '':
  156. min_full_wear_price = 0
  157. else:
  158. min_full_wear_price = float(item.text(5))
  159. #判断item.text(6)是否为''
  160. if item.text(6) == '':
  161. sweep_price = 0
  162. else:
  163. sweep_price = float(item.text(6))
  164. #判断item.text(7)是否为''
  165. if item.text(7) == '':
  166. judge_price = 0
  167. else:
  168. judge_price = float(item.text(7))
  169. timestamp = item.text(8)
  170. # 插入数据到表中
  171. cursor.execute('''
  172. INSERT INTO select_logs (item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp)
  173. VALUES (?, ?, ?, ?, ?, ?, ?, ?)
  174. ''', (item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp))
  175. # 提交更改并关闭连接
  176. conn.commit()
  177. conn.close()
  178. QMessageBox.information(self, "保存选品日志", "选品日志已成功保存")
  179. @staticmethod
  180. def edit_select_log(self):
  181. # 获取选中的日志项
  182. selected_items = self.select_log_tree_widget.selectedItems()
  183. if len(selected_items) != 1:
  184. QMessageBox.warning(self, "编辑选品日志", "请选择一个选品日志进行编辑")
  185. return
  186. item = selected_items[0]
  187. # 获取当前选中的日志项的数据
  188. current_data = {
  189. '商品ID': item.text(1),
  190. '商品名称': item.text(2),
  191. '磨损最低值': item.text(3),
  192. '磨损最高值': item.text(4),
  193. '全磨损区间最低价': item.text(5),
  194. '扫货价': item.text(6),
  195. '判断价': item.text(7),
  196. '时间': item.text(8)
  197. }
  198. # 弹出编辑对话框
  199. dialog = EditSelectLogDialog(self, "编辑选品日志", current_data)
  200. if dialog.exec():
  201. # 获取编辑后的数据
  202. new_item_id = dialog.item_id_edit.text()
  203. new_item_name = dialog.item_name_edit.text()
  204. new_min_wear = dialog.min_wear_edit.text()
  205. new_max_wear = dialog.max_wear_edit.text()
  206. new_min_full_wear_price = dialog.min_full_wear_price_edit.text()
  207. new_sweep_price = dialog.sweep_price_edit.text()
  208. new_judge_price = dialog.judge_price_edit.text()
  209. new_timestamp = dialog.timestamp_edit.text()
  210. # 更新日志项的数据
  211. item.setText(1, new_item_id)
  212. item.setText(2, new_item_name)
  213. item.setText(3, new_min_wear)
  214. item.setText(4, new_max_wear)
  215. item.setText(5, new_min_full_wear_price)
  216. item.setText(6, new_sweep_price)
  217. item.setText(7, new_judge_price)
  218. item.setText(8, new_timestamp)
  219. @staticmethod
  220. def delete_select_log(self):
  221. # 获取选中的日志项
  222. selected_items = self.select_log_tree_widget.selectedItems()
  223. for item in selected_items:
  224. (item.parent() or self.select_log_tree_widget).takeTopLevelItem(self.select_log_tree_widget.indexOfTopLevelItem(item))
  225. SelectLogDialog.update_row_numbers(self)
  226. @staticmethod
  227. def show_add_select_log_dialog(self):
  228. dialog = SelectLogDialog(self, "添加选品日志")
  229. if dialog.exec():
  230. item_id = dialog.item_id_edit.text()
  231. item_name = dialog.item_name_edit.text()
  232. min_wear = dialog.min_wear_edit.text()
  233. max_wear = dialog.max_wear_edit.text()
  234. min_full_wear_price = dialog.min_full_wear_price_edit.text()
  235. sweep_price = dialog.sweep_price_edit.text()
  236. judge_price = dialog.judge_price_edit.text()
  237. timestamp = dialog.timestamp_edit.text()
  238. SelectLogDialog.add_select_log(self,item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp)
  239. @staticmethod
  240. def add_select_log(self, item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp):
  241. # 创建一个字典来存储记录的详细信息
  242. record = {
  243. '商品ID': item_id,
  244. '商品名称': item_name,
  245. '磨损最低值': min_wear,
  246. '磨损最高值': max_wear,
  247. '全磨损区间最低价': min_full_wear_price,
  248. '扫货价': sweep_price,
  249. '判断价': judge_price,
  250. '时间': timestamp
  251. }
  252. # 将新记录添加到树形控件中
  253. item = QTreeWidgetItem(self.select_log_tree_widget)
  254. item.setText(0, "") # 选择列为空
  255. item.setText(1, record['商品ID'])
  256. item.setText(2, record['商品名称'])
  257. item.setText(3, str(record['磨损最低值']))
  258. item.setText(4, str(record['磨损最高值']))
  259. item.setText(5, str(record['全磨损区间最低价']))
  260. item.setText(6, str(record['扫货价']))
  261. item.setText(7, str(record['判断价']))
  262. item.setText(8, record['时间'])
  263. # 创建复选框
  264. # checkbox = QCheckBox()
  265. # checkbox.setChecked(False)
  266. # self.select_log_tree_widget.setItemWidget(item, 0, checkbox)
  267. SelectLogDialog.update_row_numbers(self)
  268. @staticmethod
  269. def update_row_numbers(self):
  270. for index in range(self.select_log_tree_widget.topLevelItemCount()):
  271. item = self.select_log_tree_widget.topLevelItem(index)
  272. item.setText(0, str(index + 1))