在旅游景区档案制度建设中,第一步是将管理规范转化为数据模型。我们需要设计一个能够涵盖档案全生命周期的数据库结构。这里我们采用SQLite作为轻量级数据库,无需复杂配置即可运行,非常适合中小型景区快速落地。
基于档案管理制度,我们需要定义以下核心字段:档案编号、档案标题、所属分类(如基础建设、安全巡查、财务票据)、密级(公开、内部、机密)、归档状态(草稿、待审核、已归档)以及创建时间。
请在项目根目录下创建名为 schema.sql 的文件,并复制以下完整的建表语句。这段SQL代码不仅创建了表,还初始化了基础的分类数据,确保系统启动时数据规范符合制度要求。
```sql -- 删除旧表(仅用于开发环境重置,生产环境可注释) DROP TABLE IF EXISTS archives; -- 创建档案主表 CREATE TABLE archives ( id INTEGER PRIMARY KEY AUTOINCREMENT, archive_code VARCHAR(50) NOT NULL UNIQUE, -- 档案编号,全局唯一 title VARCHAR(200) NOT NULL, -- 档案标题 category VARCHAR(50) NOT NULL, -- 档案分类 security_level VARCHAR(20) DEFAULT '公开', -- 密级 content TEXT, -- 档案内容/描述 status VARCHAR(20) DEFAULT '草稿', -- 归档状态 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 创建时间 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 更新时间 ); -- 创建索引以提升检索性能 CREATE INDEX idx_category ON archives(category); CREATE INDEX idx_status ON archives(status); ```为了确保零门槛落地,本系统采用Python标准库及轻量级Web框架Flask。你不需要配置Nginx或Apache,直接运行Python脚本即可启动服务。
确保你的电脑上安装了Python 3.8或更高版本。打开终端或命令行工具,依次执行以下命令来安装必要的依赖包。这里指定了版本号,防止因库更新导致的不兼容问题。
```bash 安装Flask框架 pip install flask==2.3.3 安装日期时间处理库 pip install python-dateutil==2.8.2 ```安装完成后,在项目根目录下创建一个名为 app.py 的文件。这个文件将包含所有的后端逻辑,包括数据库连接、档案录入、查询和状态流转。
后端代码是实现档案制度的关键。我们将编写逻辑来强制执行档案编号的唯一性、状态的合法性校验以及分类的规范化。以下代码是一个完整的、可直接运行的Flask应用。
请将以下代码完整复制到 app.py 中。代码中包含了详细的注释,解释了每一部分是如何对应档案管理制度的。
```python import sqlite3 import datetime from flask import Flask, request, jsonify, render_template_string from functools import wraps app = Flask(__name__) DATABASE = 'scenic_archives.db' 配置常量:定义档案制度允许的分类和状态 ALLOWED_CATEGORIES = ['基础建设', '安全巡查', '游客投诉', '财务票据', '行政审批'] ALLOWED_STATUSES = ['草稿', '待审核', '已归档', '已借出'] SECURITY_LEVELS = ['公开', '内部', '机密'] def get_db(): """获取数据库连接""" conn = sqlite3.connect(DATABASE) conn.row_factory = sqlite3.Row 允许通过列名访问数据 return conn def init_db(): """初始化数据库,执行schema.sql""" with app.app_context(): db = get_db() with open('schema.sql', mode='r', encoding='utf-8') as f: db.cursor().executescript(f.read()) db.commit() @app.route('/api/archive/add', methods=['POST']) def add_archive(): """ 档案录入接口 制度校验点: 1. 档案编号不能为空且必须唯一 2. 分类必须在允许的范围内 3. 密级必须合法 """ data = request.json 必填字段校验 if not data or 'archive_code' not in data or 'title' not in data: return jsonify({'error': '档案编号和标题为必填项'}), 400 制度规则校验:分类合法性 if data.get('category') not in ALLOWED_CATEGORIES: return jsonify({'error': f'档案分类无效,允许的分类:{ALLOWED_CATEGORIES}'}), 400 制度规则校验:密级合法性 if data.get('security_level') not in SECURITY_LEVELS: return jsonify({'error': f'密级无效,允许的密级:{SECURITY_LEVELS}'}), 400 try: db = get_db() cursor = db.cursor() cursor.execute( "INSERT INTO archives (archive_code, title, category, security_level, content, status) VALUES (?, ?, ?, ?, ?, ?)", (data['archive_code'], data['title'], data.get('category', '其他'), data.get('security_level', '公开'), data.get('content', ''), '草稿') ) db.commit() return jsonify({'message': '档案录入成功', 'id': cursor.lastrowid}), 201 except sqlite3.IntegrityError: return jsonify({'error': '档案编号已存在,违反唯一性制度'}), 409 except Exception as e: return jsonify({'error': str(e)}), 500 @app.route('/api/archive/list', methods=['GET']) def list_archives(): """ 档案查询接口 支持按分类和状态筛选 """ category = request.args.get('category') status = request.args.get('status') query = "SELECT FROM archives WHERE 1=1" params = [] if category: query += " AND category = ?" params.append(category) if status: query += " AND status = ?" params.append(status) query += " ORDER BY created_at DESC" db = get_db() cursor = db.cursor() cursor.execute(query, params) rows = cursor.fetchall() 将结果转换为字典列表 result = [dict(row) for row in rows] return jsonify(result) @app.route('/api/archive/update_status/为了方便操作,我们需要构建一个简单的HTML页面。这个页面将直接调用后端API,提供档案录入表单和列表展示功能。请在项目根目录下创建一个名为 templates 的文件夹,并在其中创建 index.html 文件。
以下HTML代码包含了CSS样式和JavaScript逻辑,是一个单文件应用,无需安装Vue或React即可运行。界面设计简洁,重点突出操作按钮和必填项。
```html| 编号 | 标题 | 分类 | 密级 | 状态 | 操作 |
|---|
代码编写完成后,最后一步是启动系统并进行验证。请严格按照以下步骤操作,确保档案制度真正落地到系统中。

1. 启动数据库与应用
在终端中,确保你位于项目根目录下(即包含 app.py 和 schema.sql 的目录),执行以下命令启动服务:
```bash python app.py ```终端将显示“数据库初始化完成”以及“Running on http://127.0.0.1:5000”。此时,SQLite数据库文件 scenic_archives.db 已自动生成,并且表结构已按照 schema.sql 建立完毕。
2. 执行档案录入测试
打开浏览器,访问 http://127.0.0.1:5000。你将看到档案录入界面。按照景区档案制度要求,输入以下测试数据:
点击“提交档案”。如果看到“录入成功”提示,说明后端逻辑正常工作,且数据已写入数据库。
3. 验证制度约束(异常测试)
为了证明系统严格执行了档案制度,我们尝试输入非法数据进行测试:
系统应返回错误提示:“档案编号已存在,违反唯一性制度”。这证明了系统的唯一性校验生效,防止了档案重号。
4. 验证状态流转
在页面下方的档案列表中,找到刚才录入的档案。点击“归档”按钮。状态标签应从灰色的“草稿”变为绿色的“已归档”。这一步模拟了档案管理员对实体档案进行审核归档的操作流程。
通过以上步骤,你已经在本地成功搭建了一个符合旅游景区档案制度规范的数字化管理系统。这套系统虽然轻量,但完整涵盖了档案录入、校验、查询和状态管理的核心功能,可以直接作为景区数字化转型的初步技术方案进行演示或进一步扩展开发。