2025-08-20 15:11:35 +08:00
|
|
|
|
import mysql.connector
|
|
|
|
|
|
from mysql.connector import Error
|
2025-08-17 13:24:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DBService:
|
2025-08-20 15:11:35 +08:00
|
|
|
|
# MySQL数据库连接配置
|
|
|
|
|
|
db_config = {
|
|
|
|
|
|
'host': '101.200.148.149',
|
|
|
|
|
|
'port': 4406,
|
|
|
|
|
|
'user': 'root',
|
|
|
|
|
|
'password': 'Jian(1@3)',
|
|
|
|
|
|
'database': 'verify_db'
|
|
|
|
|
|
}
|
2025-08-17 13:24:36 +08:00
|
|
|
|
conn = None
|
2025-08-20 15:11:35 +08:00
|
|
|
|
|
2025-08-17 13:24:36 +08:00
|
|
|
|
def __init__(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
初始化函数
|
|
|
|
|
|
"""
|
|
|
|
|
|
self.conn = self.get_conn()
|
|
|
|
|
|
print("DBService init")
|
2025-08-20 15:11:35 +08:00
|
|
|
|
self.create_database()
|
2025-08-17 13:24:36 +08:00
|
|
|
|
self.create_file_data_table()
|
|
|
|
|
|
self.create_invoice_table()
|
|
|
|
|
|
self.create_verify_log_table()
|
|
|
|
|
|
pass
|
2025-08-20 15:11:35 +08:00
|
|
|
|
|
2025-08-17 13:24:36 +08:00
|
|
|
|
def get_conn(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
创建数据库连接
|
|
|
|
|
|
该函数用于创建数据库连接,并返回连接对象
|
|
|
|
|
|
返回值:
|
|
|
|
|
|
连接对象
|
|
|
|
|
|
"""
|
2025-08-20 15:11:35 +08:00
|
|
|
|
if self.conn is not None and self.conn.is_connected():
|
2025-08-17 13:24:36 +08:00
|
|
|
|
return self.conn
|
|
|
|
|
|
try:
|
2025-08-20 15:11:35 +08:00
|
|
|
|
self.conn = mysql.connector.connect(**self.db_config)
|
2025-08-17 13:24:36 +08:00
|
|
|
|
except Error as e:
|
|
|
|
|
|
print(e)
|
|
|
|
|
|
return self.conn
|
2025-08-20 15:11:35 +08:00
|
|
|
|
|
|
|
|
|
|
def create_database(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
创建数据库
|
|
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
# 连接 MySQL 服务器(不指定数据库)
|
|
|
|
|
|
server_config = self.db_config.copy()
|
|
|
|
|
|
server_config.pop('database', None)
|
|
|
|
|
|
server_conn = mysql.connector.connect(**server_config)
|
|
|
|
|
|
cursor = server_conn.cursor()
|
|
|
|
|
|
|
|
|
|
|
|
# 创建数据库
|
|
|
|
|
|
cursor.execute(f"CREATE DATABASE IF NOT EXISTS {self.db_config['database']} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
|
|
|
|
|
|
cursor.close()
|
|
|
|
|
|
server_conn.close()
|
|
|
|
|
|
|
|
|
|
|
|
# 重新连接到指定数据库
|
|
|
|
|
|
self.conn = self.get_conn()
|
|
|
|
|
|
except Error as e:
|
|
|
|
|
|
print(e)
|
|
|
|
|
|
|
2025-08-17 13:24:36 +08:00
|
|
|
|
def create_verify_log_table(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
创建验证记录表
|
|
|
|
|
|
该函数用于创建表,并返回创建结果
|
|
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
# delete_table_sql = """DROP TABLE IF EXISTS verify_log;"""
|
|
|
|
|
|
# c = self.get_conn().cursor()
|
|
|
|
|
|
# c.execute(delete_table_sql)
|
|
|
|
|
|
create_table_sql = """CREATE TABLE IF NOT EXISTS verify_log (
|
2025-08-20 15:11:35 +08:00
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
|
cyjgxx TEXT NOT NULL,
|
|
|
|
|
|
inspectionAmount VARCHAR(255) NOT NULL,
|
|
|
|
|
|
verify_time VARCHAR(255) NOT NULL,
|
|
|
|
|
|
file_path TEXT NOT NULL,
|
|
|
|
|
|
`desc` TEXT
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"""
|
2025-08-17 13:24:36 +08:00
|
|
|
|
c = self.get_conn().cursor()
|
|
|
|
|
|
c.execute(create_table_sql)
|
2025-08-20 15:11:35 +08:00
|
|
|
|
self.get_conn().commit()
|
2025-08-17 13:24:36 +08:00
|
|
|
|
except Error as e:
|
|
|
|
|
|
print(e)
|
2025-08-20 15:11:35 +08:00
|
|
|
|
|
2025-08-17 13:24:36 +08:00
|
|
|
|
# 文件数据表
|
|
|
|
|
|
def create_file_data_table(self):
|
|
|
|
|
|
"""
|
|
|
|
|
|
创建文件数据表
|
|
|
|
|
|
该函数用于创建表,并返回创建结果
|
|
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
# delete_table_sql = """DROP TABLE IF EXISTS file_data;"""
|
|
|
|
|
|
# c = self.get_conn().cursor()
|
|
|
|
|
|
# c.execute(delete_table_sql)
|
|
|
|
|
|
create_table_sql = """CREATE TABLE IF NOT EXISTS file_data (
|
2025-08-20 15:11:35 +08:00
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
|
file_name TEXT NOT NULL,
|
|
|
|
|
|
file_path TEXT NOT NULL,
|
|
|
|
|
|
file_size INT NOT NULL,
|
|
|
|
|
|
file_type VARCHAR(50) NOT NULL,
|
|
|
|
|
|
file_time VARCHAR(50) NOT NULL,
|
|
|
|
|
|
file_hash VARCHAR(255) NOT NULL,
|
|
|
|
|
|
UNIQUE KEY unique_file_hash (file_hash)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"""
|
2025-08-17 13:24:36 +08:00
|
|
|
|
c = self.get_conn().cursor()
|
|
|
|
|
|
c.execute(create_table_sql)
|
|
|
|
|
|
self.get_conn().commit()
|
|
|
|
|
|
except Error as e:
|
|
|
|
|
|
print(e)
|
|
|
|
|
|
|
|
|
|
|
|
# 发票数据表
|
|
|
|
|
|
def create_invoice_table(self):
|
|
|
|
|
|
# delete_table_sql = """DROP TABLE IF EXISTS invoice;"""
|
|
|
|
|
|
# c = self.get_conn().cursor()
|
|
|
|
|
|
# c.execute(delete_table_sql)
|
|
|
|
|
|
create_table_sql = """
|
|
|
|
|
|
-- 主表存储发票基本信息
|
2025-08-20 15:11:35 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS invoice (
|
|
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
|
checkCode VARCHAR(255), -- 校验码(唯一)
|
|
|
|
|
|
drawer VARCHAR(100), -- 开票人
|
|
|
|
|
|
formType VARCHAR(100), -- 表单类型
|
|
|
|
|
|
invoiceAmountPreTax DECIMAL(15,2), -- 税前金额
|
|
|
|
|
|
invoiceCode VARCHAR(50) NOT NULL, -- 发票代码
|
|
|
|
|
|
invoiceDate VARCHAR(50), -- 开票日期
|
|
|
|
|
|
invoiceNumber VARCHAR(50) NOT NULL, -- 发票号码
|
|
|
|
|
|
invoiceTax DECIMAL(15,2), -- 发票税额
|
|
|
|
|
|
invoiceType VARCHAR(100), -- 发票类型
|
|
|
|
|
|
machineCode VARCHAR(50), -- 机器编号
|
|
|
|
|
|
passwordArea TEXT, -- 密码区
|
|
|
|
|
|
printedInvoiceCode VARCHAR(50), -- 打印发票代码
|
|
|
|
|
|
printedInvoiceNumber VARCHAR(50), -- 打印发票号码
|
|
|
|
|
|
purchaserBankAccountInfo TEXT, -- 购买方银行信息
|
|
|
|
|
|
purchaserContactInfo TEXT, -- 购买方联系信息
|
|
|
|
|
|
purchaserName VARCHAR(255), -- 购买方名称
|
|
|
|
|
|
purchaserTaxNumber VARCHAR(100), -- 购买方税号
|
|
|
|
|
|
recipient VARCHAR(100), -- 收款人
|
|
|
|
|
|
remarks TEXT, -- 备注
|
|
|
|
|
|
reviewer VARCHAR(100), -- 复核人
|
|
|
|
|
|
sellerBankAccountInfo TEXT, -- 销售方银行信息
|
|
|
|
|
|
sellerContactInfo TEXT, -- 销售方联系信息
|
|
|
|
|
|
sellerName VARCHAR(255), -- 销售方名称
|
|
|
|
|
|
sellerTaxNumber VARCHAR(100), -- 销售方税号
|
|
|
|
|
|
specialTag VARCHAR(50), -- 特殊标记
|
|
|
|
|
|
title VARCHAR(255), -- 发票标题
|
|
|
|
|
|
totalAmount DECIMAL(15,2), -- 合计金额
|
|
|
|
|
|
totalAmountInWords VARCHAR(255), -- 大写金额
|
|
|
|
|
|
file_path TEXT, -- 文件哈希
|
|
|
|
|
|
verify_time VARCHAR(50), -- 验证时间
|
|
|
|
|
|
verify_status VARCHAR(50), -- 验证结果
|
|
|
|
|
|
inspectionAmount VARCHAR(50), -- 验证次数
|
|
|
|
|
|
`desc` TEXT, -- 备注
|
|
|
|
|
|
desc_files TEXT, -- 备注附件
|
|
|
|
|
|
status VARCHAR(20), -- 是否报销(yes,no)
|
|
|
|
|
|
UNIQUE KEY unique_invoice (invoiceCode, invoiceNumber)
|
|
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
2025-08-17 13:24:36 +08:00
|
|
|
|
"""
|
|
|
|
|
|
try:
|
|
|
|
|
|
c = self.get_conn().cursor()
|
|
|
|
|
|
c.execute(create_table_sql)
|
2025-08-20 15:11:35 +08:00
|
|
|
|
self.get_conn().commit()
|
2025-08-17 13:24:36 +08:00
|
|
|
|
except Error as e:
|
|
|
|
|
|
print(e)
|