VerifVATInvoice/alibabacloud_sample/dbservice.py

165 lines
7.4 KiB
Python
Raw Permalink Normal View History

import mysql.connector
from mysql.connector import Error
class DBService:
# MySQL数据库连接配置
db_config = {
'host': '101.200.148.149',
'port': 4406,
'user': 'root',
'password': 'Jian(1@3)',
'database': 'verify_db'
}
conn = None
def __init__(self):
"""
初始化函数
"""
self.conn = self.get_conn()
print("DBService init")
self.create_database()
self.create_file_data_table()
self.create_invoice_table()
self.create_verify_log_table()
pass
def get_conn(self):
"""
创建数据库连接
该函数用于创建数据库连接并返回连接对象
返回值:
连接对象
"""
if self.conn is not None and self.conn.is_connected():
return self.conn
try:
self.conn = mysql.connector.connect(**self.db_config)
except Error as e:
print(e)
return self.conn
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)
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 (
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;"""
c = self.get_conn().cursor()
c.execute(create_table_sql)
self.get_conn().commit()
except Error as e:
print(e)
# 文件数据表
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 (
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;"""
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 = """
-- 主表存储发票基本信息
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;
"""
try:
c = self.get_conn().cursor()
c.execute(create_table_sql)
self.get_conn().commit()
except Error as e:
print(e)