在开始构建档案制度自动化监管系统之前,需要确保运行环境满足以下基本要求。本系统基于Python开发,利用其强大的文件处理能力和轻量级数据库SQLite,实现无需复杂配置即可落地的监管方案。
请确保系统已安装版本3.8及以上的Python。如果未安装,请根据操作系统执行以下命令:
sudo yum install python3 python3-pip -ysudo apt install python3 python3-pip -yhttps://www.python.org/downloads/ 下载安装包并安装,勾选 "Add Python to PATH"。我们需要使用watchdog库来监控文件系统变化,以及hashlib(内置)进行文件完整性校验。请在终端执行以下命令安装依赖:
pip3 install watchdog
为了保持代码的可维护性,请在本地创建一个名为archive_supervisor的文件夹,并按照以下结构创建文件和目录:
配置文件是监管系统的核心,监督员可以通过修改config.json来定义监管的目录、必须存在的制度文件以及命名规范。请完整复制以下内容到config.json中:
配置项详解:
data文件夹,请根据实际路径修改(如/var/www/archives)。本部分将编写完整的监管逻辑代码。该脚本将自动扫描目录、校验规则、记录数据库并生成报告。请将以下代码完整复制到supervisor.py中。
代码首先加载必要的库,读取配置文件,并初始化SQLite数据库连接。数据库用于记录每次检查的结果,形成监管台账。
```python import os import json import sqlite3 import time import logging import hashlib import re from datetime import datetime from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler 加载配置 with open('config.json', 'r', encoding='utf-8') as f: CONFIG = json.load(f) 初始化日志 logging.basicConfig( level=getattr(logging, CONFIG.get('log_level', 'INFO')), format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(os.path.join('logs', 'supervisor.log'), encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) 初始化数据库 def init_db(): conn = sqlite3.connect(CONFIG['database']) cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS audit_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, folder_name TEXT, check_time TEXT, status TEXT, details TEXT, UNIQUE(folder_name, check_time) ) ''') conn.commit() conn.close() ```
此模块包含具体的检查逻辑:计算文件哈希值以验证完整性,检查文件夹命名是否符合规范,以及是否包含必要的制度文件。
```python def calculate_file_hash(filepath): """计算文件的SHA256值,用于完整性校验""" sha256 = hashlib.sha256() try: with open(filepath, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): sha256.update(chunk) return sha256.hexdigest() except Exception as e: logger.error(f"无法读取文件 {filepath}: {e}") return None def check_folder_compliance(folder_path): """执行单个文件夹的合规性检查""" folder_name = os.path.basename(folder_path) issues = [] 1. 检查命名规范 pattern = re.compile(CONFIG['rules']['naming_convention']) if not pattern.match(folder_name): issues.append(f"命名不符合规范: {folder_name}") 2. 检查必须存在的制度文件 files_in_folder = os.listdir(folder_path) for req_file in CONFIG['rules']['required_files']: if req_file not in files_in_folder: issues.append(f"缺失必备制度文件: {req_file}") else: 如果文件存在,进行完整性校验(示例:检查是否为0字节) full_path = os.path.join(folder_path, req_file) if os.path.getsize(full_path) == 0: issues.append(f"制度文件为空: {req_file}") 3. 检查是否存在违禁文件扩展名 for file in files_in_folder: ext = os.path.splitext(file)[1].lower() if ext in CONFIG['rules']['forbidden_extensions']: issues.append(f"发现违禁文件类型: {file}") status = "PASS" if not issues else "FAIL" details = "; ".join(issues) if issues else "合规" 写入数据库 conn = sqlite3.connect(CONFIG['database']) cursor = conn.cursor() check_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') try: cursor.execute("INSERT INTO audit_logs (folder_name, check_time, status, details) VALUES (?, ?, ?, ?)", (folder_name, check_time, status, details)) conn.commit() except sqlite3.IntegrityError: 避免重复记录同一秒的检查 pass conn.close() return status, details ```该部分实现了HTML格式的监管报告生成,以及利用watchdog实现实时的文件系统监控。一旦有新档案加入或修改,系统自动触发检查。
生成时间: {time}
| 档案文件夹 | 检查时间 | 状态 | 详情 |
|---|
代码和配置准备就绪后,按照以下步骤启动系统,即可开始自动化的档案制度监督工作。
为了验证系统功能,我们需要创建一些符合和不符合规范的测试数据。在项目根目录下执行:
mkdir -p data/GOOD-2023-001touch data/GOOD-2023-001/档案管理制度.pdf touch data/GOOD-2023-001/归档范围表.xlsx touch data/GOOD-2023-001/保管期限表.xlsxmkdir -p data/bad_foldermkdir -p data/MISS-2023-002在终端中运行以下命令启动程序:
python3 supervisor.py
启动后,终端会显示扫描日志。程序会自动在reports目录下生成一个HTML文件。直接在浏览器中打开该文件,你将看到包含如下内容的表格:
PASS,详情为“合规”。FAIL,详情提示“命名不符合规范”。FAIL,详情提示“缺失必备制度文件”。此时,如果你尝试在data目录下新建文件夹或修改文件,系统会自动触发检查并更新日志和报告,实现了档案制度建设的全流程自动化监督。