Files
2026-06-08 18:14:59 +08:00

61 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
钉钉同步日志模型
- DingtalkSyncLog: 全量同步任务日志
- DingtalkStreamEventLog: Stream 增量事件日志
"""
from sqlalchemy import Column, String, Text, Integer, DateTime
from app.base_model import BaseModel
class DingtalkSyncLog(BaseModel):
"""
钉钉全量同步日志
字段说明:
- sync_type: 同步类型 dept=部门 user=用户
- total_count: 钉钉侧总数
- success_count: 同步成功数
- fail_count: 同步失败数
- status: 同步状态 running/success/partial/failed
- error_detail: 失败详情(JSON
- started_at: 同步开始时间
- finished_at: 同步结束时间
"""
__tablename__ = "core_dingtalk_sync_log"
sync_type = Column(String(20), nullable=False, index=True, comment="同步类型: dept/user")
total_count = Column(Integer, default=0, comment="总数")
success_count = Column(Integer, default=0, comment="成功数")
fail_count = Column(Integer, default=0, comment="失败数")
status = Column(String(20), default="running", index=True, comment="状态: running/success/partial/failed")
error_detail = Column(Text, nullable=True, comment="失败详情")
started_at = Column(DateTime, nullable=True, comment="开始时间")
finished_at = Column(DateTime, nullable=True, comment="结束时间")
def __repr__(self):
return f"<DingtalkSyncLog {self.sync_type} {self.status}>"
class DingtalkStreamEventLog(BaseModel):
"""
钉钉 Stream 增量事件日志
记录每一次 Stream 推送的增量变更(部门/用户的创建、修改、删除等)
"""
__tablename__ = "core_dingtalk_stream_event_log"
event_type = Column(String(50), nullable=False, index=True, comment="事件类型: org_dept_create/user_add_org等")
target_type = Column(String(20), nullable=False, index=True, comment="目标类型: dept/user")
target_name = Column(String(100), nullable=True, comment="目标名称")
dingtalk_dept_id = Column(String(50), nullable=True, comment="钉钉部门ID")
dingtalk_userid = Column(String(100), nullable=True, comment="钉钉用户ID")
status = Column(String(20), default="success", index=True, comment="状态: success/failed")
error_detail = Column(Text, nullable=True, comment="失败详情")
event_time = Column(DateTime, nullable=True, comment="事件时间")
def __repr__(self):
return f"<DingtalkStreamEventLog {self.event_type} {self.target_type} {self.status}>"