| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- import os
- import sys
- from stringprep import in_table_c11
- 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
- from PyQt5.QtCore import Qt
- import requests as req
- import time,random,numpy as np
- import threading
- import asyncio
- import json
- from PyQt5.QtWidgets import QFileDialog
- from PyQt5.QtCore import pyqtSignal, QObject,pyqtSlot
- import sqlite3
- from EditSelectLogDialog import EditSelectLogDialog
- from datetime import datetime
- class SelectLogDialog(QDialog):
- def __init__(self, parent=None, title="添加选品日志"):
- super().__init__(parent)
- self.setWindowTitle(title)
- self.setGeometry(100, 100, 600, 400)
- layout = QDialogVBoxLayout()
- # 商品ID输入框
- item_id_label = QLabel("商品ID")
- self.item_id_edit = QDialogLineEdit()
- layout.addWidget(item_id_label)
- layout.addWidget(self.item_id_edit)
- # 商品名称输入框
- item_name_label = QLabel("商品名称")
- self.item_name_edit = QDialogLineEdit()
- layout.addWidget(item_name_label)
- layout.addWidget(self.item_name_edit)
- # 磨损最低值输入框
- min_wear_label = QLabel("磨损最低值")
- self.min_wear_edit = QDialogLineEdit()
- layout.addWidget(min_wear_label)
- layout.addWidget(self.min_wear_edit)
- # 磨损最高值输入框
- max_wear_label = QLabel("磨损最高值")
- self.max_wear_edit = QDialogLineEdit()
- layout.addWidget(max_wear_label)
- layout.addWidget(self.max_wear_edit)
- # 全磨损区间最低价输入框
- min_full_wear_price_label = QLabel("全磨损区间最低价")
- self.min_full_wear_price_edit = QDialogLineEdit()
- layout.addWidget(min_full_wear_price_label)
- layout.addWidget(self.min_full_wear_price_edit)
- # 扫货价输入框
- sweep_price_label = QLabel("扫货价")
- self.sweep_price_edit = QDialogLineEdit()
- layout.addWidget(sweep_price_label)
- layout.addWidget(self.sweep_price_edit)
- # 判断价输入框
- judge_price_label = QLabel("判断价")
- self.judge_price_edit = QDialogLineEdit()
- layout.addWidget(judge_price_label)
- layout.addWidget(self.judge_price_edit)
- # 时间输入框
- timestamp_label = QLabel("时间")
- self.timestamp_edit = QDialogLineEdit()
- layout.addWidget(timestamp_label)
- layout.addWidget(self.timestamp_edit)
- button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
- button_box.accepted.connect(self.accept)
- button_box.rejected.connect(self.reject)
- layout.addWidget(button_box)
- self.setLayout(layout)
- @staticmethod
- def export_selected_logs(self):
- # 获取选中的日志项
- selected_items = self.select_log_tree_widget.selectedItems()
- if not selected_items:
- QMessageBox.warning(self, "导出选品日志", "请选择要导出的日志项")
- return
- # 将选中的日志项转换为字典列表
- logs = {}
- for item in selected_items:
- logs[item.text(1)] = {
- "price":item.text(6),
- "min_paintwear":item.text(3),
- "max_paintwear" :item.text(4),
- "name":item.text(2),
- '商品ID': item.text(1),
- '商品名称': item.text(2),
- '磨损最低值': item.text(3),
- '磨损最高值': item.text(4),
- '全磨损区间最低价': item.text(5),
- '扫货价': item.text(6),
- '判断价': item.text(7),
- '时间': item.text(8)
- }
- # 选择保存文件的路径
- file_path, _ = QFileDialog.getSaveFileName(self, "导出选品日志", "", "JSON Files (*.json)")
- if file_path:
- try:
- with open(file_path, 'w', encoding='utf-8') as f:
- json.dump(logs, f, ensure_ascii=False, indent=4)
- QMessageBox.information(self, "导出选品日志", f"日志已成功导出到 {file_path}")
- except Exception as e:
- QMessageBox.critical(self, "导出选品日志", f"导出日志时发生错误: {e}")
- @staticmethod
- def export_selected_logs_tolocal(self):
- # 将列表中所有数据导出
- logs = {}
- for i in range(self.select_log_tree_widget.topLevelItemCount()):
- item = self.select_log_tree_widget.topLevelItem(i)
- logs[item.text(1)] = {
- "price":item.text(6),
- "min_paintwear":item.text(3),
- "max_paintwear" :item.text(4),
- "name":item.text(2),
- '商品ID': item.text(1),
- '商品名称': item.text(2),
- '磨损最低值': item.text(3),
- '磨损最高值': item.text(4),
- '全磨损区间最低价': item.text(5),
- '扫货价': item.text(6),
- '判断价': item.text(7),
- '时间': item.text(8)
- }
- # 保存到本地的xprz的文件夹中,文件名为当前时间戳+XPRZ.json
- current_time = datetime.now().strftime("%Y%m%d%H%M%S")
- file_name = f"{current_time}_选品日志文件.json"
- file_path = os.path.join(os.getcwd(), '选品日志文件', file_name)
- try:
- with open(file_path, 'w', encoding='utf-8') as f:
- json.dump(logs, f, ensure_ascii=False, indent=4)
- self.detail_logger.debug(f"日志已成功导出到 {file_path}")
- except Exception as e:
- self.detail_logger.debug(f"导出日志时发生错误: {e}")
- @staticmethod
- def delete_all_select_logs(self):
- # 连接到SQLite数据库
- conn = sqlite3.connect('buff.db')
- cursor = conn.cursor()
- # 清空表中的数据
- cursor.execute('DELETE FROM select_logs')
- # 提交更改并关闭连接
- conn.commit()
- conn.close()
- @staticmethod
- def save_select_logs(self):
- # 连接到SQLite数据库
- conn = sqlite3.connect('buff.db')
- cursor = conn.cursor()
- # 清空表中的数据
- cursor.execute('DELETE FROM select_logs')
- # 获取树形控件中的所有项
- for i in range(self.select_log_tree_widget.topLevelItemCount()):
- item = self.select_log_tree_widget.topLevelItem(i)
- item_id = item.text(1)
- item_name = item.text(2)
- min_wear = item.text(3)
- max_wear = item.text(4)
- #判断item.text(5)是否为''
- if item.text(5) == '':
- min_full_wear_price = 0
- else:
- min_full_wear_price = float(item.text(5))
- #判断item.text(6)是否为''
- if item.text(6) == '':
- sweep_price = 0
- else:
- sweep_price = float(item.text(6))
- #判断item.text(7)是否为''
- if item.text(7) == '':
- judge_price = 0
- else:
- judge_price = float(item.text(7))
- timestamp = item.text(8)
- # 插入数据到表中
- cursor.execute('''
- INSERT INTO select_logs (item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)
- ''', (item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp))
- # 提交更改并关闭连接
- conn.commit()
- conn.close()
- QMessageBox.information(self, "保存选品日志", "选品日志已成功保存")
- @staticmethod
- def edit_select_log(self):
- # 获取选中的日志项
- selected_items = self.select_log_tree_widget.selectedItems()
- if len(selected_items) != 1:
- QMessageBox.warning(self, "编辑选品日志", "请选择一个选品日志进行编辑")
- return
- item = selected_items[0]
- # 获取当前选中的日志项的数据
- current_data = {
- '商品ID': item.text(1),
- '商品名称': item.text(2),
- '磨损最低值': item.text(3),
- '磨损最高值': item.text(4),
- '全磨损区间最低价': item.text(5),
- '扫货价': item.text(6),
- '判断价': item.text(7),
- '时间': item.text(8)
- }
- # 弹出编辑对话框
- dialog = EditSelectLogDialog(self, "编辑选品日志", current_data)
- if dialog.exec():
- # 获取编辑后的数据
- new_item_id = dialog.item_id_edit.text()
- new_item_name = dialog.item_name_edit.text()
- new_min_wear = dialog.min_wear_edit.text()
- new_max_wear = dialog.max_wear_edit.text()
- new_min_full_wear_price = dialog.min_full_wear_price_edit.text()
- new_sweep_price = dialog.sweep_price_edit.text()
- new_judge_price = dialog.judge_price_edit.text()
- new_timestamp = dialog.timestamp_edit.text()
- # 更新日志项的数据
- item.setText(1, new_item_id)
- item.setText(2, new_item_name)
- item.setText(3, new_min_wear)
- item.setText(4, new_max_wear)
- item.setText(5, new_min_full_wear_price)
- item.setText(6, new_sweep_price)
- item.setText(7, new_judge_price)
- item.setText(8, new_timestamp)
- @staticmethod
- def delete_select_log(self):
- # 获取选中的日志项
- selected_items = self.select_log_tree_widget.selectedItems()
- for item in selected_items:
- (item.parent() or self.select_log_tree_widget).takeTopLevelItem(self.select_log_tree_widget.indexOfTopLevelItem(item))
- SelectLogDialog.update_row_numbers(self)
- @staticmethod
- def show_add_select_log_dialog(self):
- dialog = SelectLogDialog(self, "添加选品日志")
- if dialog.exec():
- item_id = dialog.item_id_edit.text()
- item_name = dialog.item_name_edit.text()
- min_wear = dialog.min_wear_edit.text()
- max_wear = dialog.max_wear_edit.text()
- min_full_wear_price = dialog.min_full_wear_price_edit.text()
- sweep_price = dialog.sweep_price_edit.text()
- judge_price = dialog.judge_price_edit.text()
- timestamp = dialog.timestamp_edit.text()
- SelectLogDialog.add_select_log(self,item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp)
- @staticmethod
- def add_select_log(self, item_id, item_name, min_wear, max_wear, min_full_wear_price, sweep_price, judge_price, timestamp):
- # 创建一个字典来存储记录的详细信息
- record = {
- '商品ID': item_id,
- '商品名称': item_name,
- '磨损最低值': min_wear,
- '磨损最高值': max_wear,
- '全磨损区间最低价': min_full_wear_price,
- '扫货价': sweep_price,
- '判断价': judge_price,
- '时间': timestamp
- }
- # 将新记录添加到树形控件中
- item = QTreeWidgetItem(self.select_log_tree_widget)
- item.setText(0, "") # 选择列为空
- item.setText(1, record['商品ID'])
- item.setText(2, record['商品名称'])
- item.setText(3, str(record['磨损最低值']))
- item.setText(4, str(record['磨损最高值']))
- item.setText(5, str(record['全磨损区间最低价']))
- item.setText(6, str(record['扫货价']))
- item.setText(7, str(record['判断价']))
- item.setText(8, record['时间'])
- # 创建复选框
- # checkbox = QCheckBox()
- # checkbox.setChecked(False)
- # self.select_log_tree_widget.setItemWidget(item, 0, checkbox)
- SelectLogDialog.update_row_numbers(self)
- @staticmethod
- def update_row_numbers(self):
- for index in range(self.select_log_tree_widget.topLevelItemCount()):
- item = self.select_log_tree_widget.topLevelItem(index)
- item.setText(0, str(index + 1))
|