48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
# inventory-backend/app/models/audit.py
|
||
from app.extensions import db, beijing_time
|
||
from datetime import datetime
|
||
|
||
|
||
class AuditLog(db.Model):
|
||
"""
|
||
操作审计日志表
|
||
记录所有关键业务操作
|
||
"""
|
||
__tablename__ = 'audit_logs'
|
||
|
||
id = db.Column(db.Integer, primary_key=True)
|
||
user_id = db.Column(db.Integer, nullable=True, index=True) # 操作人ID(sys_user.id)
|
||
username = db.Column(db.String(100), nullable=False, index=True) # 操作人账号
|
||
display_name = db.Column(db.String(100)) # 操作人显示名称
|
||
action = db.Column(db.String(50), nullable=False, index=True) # 操作类型: create/update/delete/export 等
|
||
module = db.Column(db.String(50), nullable=False, index=True) # 业务模块: inbound_buy/inbound_semi/bom/user 等
|
||
target_id = db.Column(db.String(100), index=True) # 被操作的数据ID
|
||
target_name = db.Column(db.String(200)) # 被操作数据的显示名称
|
||
details = db.Column(db.JSON) # 详细变更内容 {old: {}, new: {}}
|
||
ip_address = db.Column(db.String(50)) # 操作IP
|
||
user_agent = db.Column(db.String(500)) # 浏览器UA
|
||
method = db.Column(db.String(10)) # HTTP方法
|
||
url = db.Column(db.String(500)) # 请求URL
|
||
status_code = db.Column(db.Integer) # 响应状态码
|
||
error_message = db.Column(db.Text) # 错误信息(如有)
|
||
created_at = db.Column(db.DateTime, default=beijing_time, index=True) # 操作时间
|
||
|
||
def to_dict(self):
|
||
return {
|
||
'id': self.id,
|
||
'user_id': self.user_id,
|
||
'username': self.username,
|
||
'display_name': self.display_name,
|
||
'action': self.action,
|
||
'module': self.module,
|
||
'target_id': self.target_id,
|
||
'target_name': self.target_name,
|
||
'details': self.details,
|
||
'ip_address': self.ip_address,
|
||
'method': self.method,
|
||
'url': self.url,
|
||
'status_code': self.status_code,
|
||
'error_message': self.error_message,
|
||
'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None
|
||
}
|