一、技术栈选型与架构设计
为了确保系统轻量且易于维护,本文采用Python作为核心开发语言,配合Flask框架提供Web服务,SQLite作为嵌入式数据库。这种组合无需配置复杂的服务器环境,下载Python即可直接运行,非常适合内部快速部署。
系统主要包含三个核心模块:
- 档案录入模块:用于录入制度文件的基本信息。
- 监督规则引擎:内置预设逻辑,自动检查档案的完整性与合规性。
- 结果展示面板:直观展示监督结果与整改建议。
二、开发环境快速初始化
在开始编写代码前,需要准备好基础环境。请确保你的操作系统已安装Python 3.8及以上版本。打开终端或命令提示符,依次执行以下命令安装必要的依赖库。
创建项目目录并进入:
```bash
mkdir archive_supervision
cd archive_supervision
```
安装Flask框架及日期处理库:
```bash
pip install flask flask-sqlalchemy
```
三、数据库模型与表结构设计
我们需要设计两张核心数据表:archives用于存储档案实体,supervision_logs用于存储每次监督的记录。创建名为models.py的文件,并写入以下完整代码:
```python
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class Archive(db.Model):
__tablename__ = 'archives'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False) 档案标题
category = db.Column(db.String(50), nullable=False) 档案分类
dept_name = db.Column(db.String(50), nullable=False) 责任部门
create_date = db.Column(db.Date, nullable=False) 归档日期
file_url = db.Column(db.String(200)) 文件路径
status = db.Column(db.String(20), default='Pending') 审核状态
class SupervisionLog(db.Model):
__tablename__ = 'supervision_logs'
id = db.Column(db.Integer, primary_key=True)
archive_id = db.Column(db.Integer, db.ForeignKey('archives.id'))
check_item = db.Column(db.String(100)) 检查项名称
result = db.Column(db.String(20)) 检查结果:Pass/Fail
detail = db.Column(db.String(500)) 详细描述
check_time = db.Column(db.DateTime, default=datetime.now)
```
四、后端核心监督逻辑实现
创建主程序文件app.py。此文件包含数据库连接配置、监督核心算法以及Web接口。请确保SQLALCHEMY_DATABASE_URI配置了绝对路径,否则可能会报错。
```python
import os
from flask import Flask, render_template, request, redirect, url_for, flash
from models import db, Archive, SupervisionLog
from datetime import datetime, date
app = Flask(__name__)
配置数据库文件路径,存放在当前目录下的data文件夹
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data', 'supervision.db')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = 'dev-secret-key'
db.init_app(app)
核心监督逻辑函数
def run_supervision(archive_id):
archive = Archive.query.get(archive_id)
logs = []
规则1:检查责任部门是否为空
if not archive.dept_name or archive.dept_name.strip() == "":
logs.append(SupervisionLog(
archive_id=archive_id,
check_item="责任部门完整性",
result="Fail",
detail="责任部门字段为空,请补充"
))
else:
logs.append(SupervisionLog(
archive_id=archive_id,
check_item="责任部门完整性",
result="Pass",
detail="部门信息已填写"
))
规则2:检查归档时效性(假设要求必须在7天内归档)
这里模拟当前日期与归档日期的差值检查
if (date.today() - archive.create_date).days > 7:
logs.append(SupervisionLog(
archive_id=archive_id,
check_item="归档时效性",
result="Fail",
detail="归档时间超过7天,不符合及时性要求"
))
else:
logs.append(SupervisionLog(
archive_id=archive_id,
check_item="归档时效性",
result="Pass",
detail="归档及时"
))
批量保存日志
for log in logs:
db.session.add(log)
db.session.commit()
return logs
@app.route('/')
def index():
获取所有档案及最新的检查结果
archives = Archive.query.all()
return render_template('index.html', archives=archives)
@app.route('/add', methods=['GET', 'POST'])
def add_archive():
if request.method == 'POST':
try:
new_archive = Archive(
title=request.form['title'],
category=request.form['category'],
dept_name=request.form['dept_name'],
create_date=datetime.strptime(request.form['create_date'], '%Y-%m-%d').date(),
file_url=request.form['file_url']
)
db.session.add(new_archive)
db.session.commit()
flash('档案添加成功,请执行监督。')
return redirect(url_for('index'))
except Exception as e:
flash(f'添加失败: {str(e)}')
return render_template('add.html')
@app.route('/supervise/
')
def supervise(id):
logs = run_supervision(id)
更新档案状态
archive = Archive.query.get(id)
has_fail = any(log.result == 'Fail' for log in logs)
archive.status = 'Non-Compliant' if has_fail else 'Compliant'
db.session.commit()
flash(f'监督完成,共执行 {len(logs)} 项检查。')
return redirect(url_for('index'))
初始化数据库
with app.app_context():
if not os.path.exists(os.path.join(basedir, 'data')):
os.makedirs(os.path.join(basedir, 'data'))
db.create_all()
if __name__ == '__main__':
app.run(debug=True, port=5000)
```
五、前端管理界面开发

为了方便操作,我们需要建立简单的HTML页面。请在项目目录下创建templates文件夹,并在其中创建index.html和add.html。
1. 首页列表页 (templates/index.html)
```html
C
档案制度监督看板
档案制度建设专项监督看板
新增档案
| ID |
标题 |
责任部门 |
归档日期 |
状态 |
操作 |
{% for archive in archives %}
| {{ archive.id }} |
{{ archive.title }} |
{{ archive.dept_name }} |
{{ archive.create_date }} |
{% if archive.status == 'Compliant' %}
合规
{% elif archive.status == 'Non-Compliant' %}
不合规
{% else %}
待检查
{% endif %}
|
执行监督
|
{% endfor %}
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
```
2. 新增档案页 (templates/add.html)
```html
新增档案
录入新档案
返回列表
```
六、系统运行与功能验证
所有代码文件准备就绪后,回到终端,确保当前目录在项目根目录下,执行以下命令启动系统:
```bash
python app.py
```
看到输出Running on http://127.0.0.1:5000即代表启动成功。打开浏览器访问该地址。
操作验证步骤:
- 点击“新增档案”,输入标题,故意留空责任部门,选择一个较旧的归档日期(如2022-01-01),点击保存。
- 在列表页找到该条记录,点击右侧的“执行监督”按钮。
- 系统将自动跳转回首页,状态栏应显示红色的“不合规”。
- 为了验证通过,再次点击“新增档案”,填写完整信息,责任部门填“测试部”,归档日期选今天。
- 点击“执行监督”,状态栏应显示绿色的“合规”。
此时,一个具备基础数据录入、规则自动判断、结果反馈的档案制度建设专项监督系统已完全落地。你可以通过修改app.py中的run_supervision函数来增加更复杂的业务逻辑,例如对接真实的文件存储服务或增加邮件报警功能。