气田异常管理系统 (Exception Management System)
气田生产异常全流程闭环管理系统,支持异常上报、接收、处置、审核、销项等完整业务流程,集成钉钉通知推送。
技术
版本
说明
Python
3.11+
运行环境
Flask
3.0.0
Web框架
Flask-SQLAlchemy
3.1.1
ORM
Flask-JWT-Extended
4.6.0
JWT认证
Flask-CORS
4.0.0
跨域支持
APScheduler
3.10.4
定时任务调度
Gunicorn
21.2.0
生产WSGI服务器
requests
2.31.0
HTTP客户端(钉钉API)
技术
版本
说明
Vue
3.4+
前端框架
Vite
5.0
构建工具
Element Plus
2.4+
UI组件库
Vue Router
4.2+
路由管理
Pinia
2.1+
状态管理
Axios
1.6+
HTTP请求
ECharts
5.4+
数据可视化
Sass
1.69+
CSS预处理器
exception-system/
├── app/ # Flask后端应用
│ ├── __init__.py # 应用工厂
│ ├── api/ # API蓝图
│ │ ├── auth.py # 认证接口(登录/登出/Token刷新)
│ │ ├── users.py # 用户管理接口
│ │ ├── exceptions.py # 异常管理接口(CRUD+流程操作)
│ │ ├── statistics.py # 统计分析接口
│ │ ├── dict.py # 数据字典接口
│ │ ├── upload.py # 文件上传接口
│ │ ├── health.py # 健康检查接口
│ │ ├── logs.py # 操作日志接口
│ │ └── export.py # 数据导出接口
│ ├── models/ # 数据库模型
│ │ └── __init__.py # User, ExceptionRecord, DisposalHistory等
│ ├── services/ # 业务逻辑层
│ │ ├── exception_service.py # 异常业务服务
│ │ ├── dingtalk_service.py # 钉钉集成服务
│ │ └── scheduler_service.py # 定时任务服务
│ └── utils/ # 工具模块
│ ├── auth_utils.py # 认证工具(角色校验等)
│ ├── jwt_callbacks.py # JWT回调处理
│ └── error_handlers.py # 全局错误处理
├── config/ # 配置文件
│ └── config.py # 多环境配置(开发/生产/测试)
├── frontend/ # Vue前端应用
│ ├── src/
│ │ ├── api/ # API请求封装
│ │ │ ├── auth.js # 认证API
│ │ │ ├── exception.js # 异常API
│ │ │ ├── statistics.js # 统计API
│ │ │ └── dingtalk.js # 钉钉API
│ │ ├── router/ # 路由配置
│ │ ├── store/ # Pinia状态管理
│ │ ├── utils/ # 工具函数
│ │ │ ├── request.js # Axios封装(拦截器/Token刷新)
│ │ │ └── dingtalk.js # 钉钉JS工具
│ │ └── views/ # 页面视图
│ │ ├── Dashboard.vue # 仪表盘
│ │ ├── ExceptionList.vue # 异常列表
│ │ ├── ExceptionForm.vue # 异常表单(上报/编辑)
│ │ ├── ExceptionDetail.vue # 异常详情
│ │ ├── Statistics.vue # 统计分析
│ │ ├── UserList.vue # 用户管理
│ │ ├── DictList.vue # 数据字典管理
│ │ ├── Login.vue # 登录页
│ │ ├── Layout.vue # PC端布局
│ │ └── mobile/ # 移动端适配页面
│ ├── package.json
│ └── vite.config.js
├── migrations/ # 数据库迁移脚本
│ └── 001_init_schema.sql # 初始数据SQL
├── data/ # SQLite数据库文件(开发)
├── uploads/ # 上传文件目录
├── logs/ # 日志目录
├── docker-compose.yml # Docker编排配置
├── Dockerfile # 后端镜像构建
├── .env.docker # Docker环境变量模板
├── gunicorn.conf.py # Gunicorn生产配置
├── requirements.txt # Python依赖
├── run.py # 应用入口
└── README.md # 项目说明文档
异常上报 - 支持多级分类、图片附件、自动编号
流程管理 - 上报→接收→处置→审核→销项 全流程闭环
退回与重报 - 接收人可退回,上报人可修改后重新提交
撤回机制 - 上报人可在接收前撤回异常
延期管理 - 处置人可申请延期,接收人审批
取消功能 - 接收人/管理员可取消异常
多轮处置 - 支持处置不通过重新处置
用户管理 - 多角色支持,数据权限隔离
数据字典 - 异常类型三级分类配置
统计分析 - 多维度数据统计,ECharts可视化
操作日志 - 全流程审计日志
数据导出 - Excel格式导出
钉钉通知 - 异常状态变更实时推送
钉钉免登 - 通过钉钉授权码登录(待完善)
文件上传 - 图片上传,支持压缩和预览
JWT认证 - Access Token + Refresh Token 双令牌
乐观锁 - 并发操作版本控制,防止冲突
CORS - 灵活的跨域配置
健康检查 - API健康检查端点
响应式 - PC端与移动端自适应布局
Python 3.11+
Node.js 18+ (前端开发)
npm 或 pnpm
git clone < repository-url>
cd exception-system
# 创建Python虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 初始化数据库
flask init-db
# 创建管理员账号
flask create-admin
# 输出: 用户名: admin 密码: admin123
# 启动开发服务器
python run.py
# 后端运行在 http://localhost:5000
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 前端运行在 http://localhost:5173
# 复制环境变量模板
cp .env.docker .env
# 编辑 .env 文件,设置必要配置
# 至少修改 SECRET_KEY 和 JWT_SECRET_KEY
# 构建并启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f backend
变量名
必填
说明
示例
SECRET_KEY
生产必须
Flask应用密钥
your-random-secret-key
JWT_SECRET_KEY
生产必须
JWT签名密钥
your-jwt-secret-key
DATABASE_URL
生产必须
数据库连接URL
sqlite:///data/exception.db
FLASK_ENV
否
运行环境
development / production
DINGTALK_APP_KEY
否
钉钉应用AppKey
-
DINGTALK_APP_SECRET
否
钉钉应用AppSecret
-
DINGTALK_AGENT_ID
否
钉钉微应用AgentId
-
DINGTALK_CHAT_ID
否
钉钉群会话ID
-
CORS_ORIGINS
否
允许的跨域来源(逗号分隔)
http://localhost:5173
所有API前缀: /api/v1/
方法
路径
说明
权限
POST
/login
用户登录
公开
POST
/refresh
刷新Token
Refresh Token
POST
/logout
用户登出
需登录
POST
/dingtalk-login
钉钉免登
公开
方法
路径
说明
权限
POST
/
异常上报
上报人/接收人/管理员
GET
/
获取异常列表
需登录(数据隔离)
GET
/{id}
获取异常详情
需登录
POST
/{id}/accept
接收确认
接收人
POST
/{id}/reject
退回上报人
接收人
POST
/{id}/resubmit
重新提交
上报人
POST
/{id}/dispose
提交处置结果
处置人
POST
/{id}/approve
销项审核
接收人
POST
/{id}/delay/approve
延期审批
接收人
POST
/{id}/cancel
取消异常
接收人/系统管理员
POST
/{id}/withdraw
撤回异常
上报人
方法
路径
说明
权限
GET
/
用户列表
管理员
POST
/
创建用户
管理员
PUT
/{id}
更新用户
管理员
DELETE
/{id}
删除用户
系统管理员
路径前缀
说明
/api/v1/statistics
统计分析
/api/v1/dict
数据字典管理
/api/v1/upload
文件上传
/api/v1/operation-logs
操作日志
/api/v1/export
数据导出
/api/v1/health
健康检查
{
"code" : 200 ,
"data" : { ... },
"message" : " 操作成功"
}
错误码
说明
200
成功
400
请求参数错误
401
未认证/Token过期
403
无权限
404
资源不存在
409
状态冲突(并发操作)
500
服务器内部错误
字段
类型
说明
id
INTEGER
主键
username
VARCHAR(50)
登录用户名(唯一)
display_name
VARCHAR(100)
显示名称
role
VARCHAR(20)
角色
site
VARCHAR(50)
所属站点
phone
VARCHAR(20)
手机号
dingtalk_user_id
VARCHAR(100)
钉钉用户ID
password_hash
VARCHAR(128)
密码哈希
is_active
INTEGER
是否启用
exception_records - 异常记录表
字段
类型
说明
id
INTEGER
主键
exception_no
VARCHAR(20)
异常编号(唯一)
site
VARCHAR(50)
所属站点
level
VARCHAR(20)
异常级别(站级/公司级)
category_1/2/3
VARCHAR(50)
三级分类
occur_date
DATE
发生日期
occur_time
TIME
发生时间
description
TEXT
异常描述
photo_urls
TEXT
照片URL(JSON)
reporter
VARCHAR(50)
上报人
receiver
VARCHAR(50)
接收人
handler
VARCHAR(50)
处置人
status
VARCHAR(20)
当前状态
version
INTEGER
乐观锁版本号
记录每次处置操作的详细信息,支持多轮处置。
记录所有状态变更操作,包含操作人、角色、IP地址等。
配置三级异常分类的可选值。
┌─────────────────────────────────────────────┐
│ 异常生命周期流程图 │
└─────────────────────────────────────────────┘
上报人 接收人 处置人
│ │ │
▼ │ │
┌─────────┐ │ │
│ 上 报 │ │ │
└────┬────┘ │ │
│ │ │
▼ │ │
┌─────────┐ 接收确认 │ │
│ 待接收 │──────────────────▶│ │
└────┬────┘ │ │
│ │ │
│◀─── 退回 ──────────────┤ │
│ │ │
┌─────────┐ │ │
│ 已退回 │ │ │
└────┬────┘ │ │
│ │ │
│ 重新提交 │ │
│───▶ 待接收 │ │
│ │ │
│ ┌─────────▼─────────┐ │
│ │ 处置中 │──────────────▶│
│ └───────────────────┘ │
│ │ │
│ │ 提交处置结果 │
│ │◀───────────────────────┤
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ 待审核 │ │
│ └─────────┬─────────┘ │
│ │ │
│ │ 审核 │
│ ▼ │
│ ┌───────────────────┐ │
│ │ ┌─────────┐ │ │
│ │ │ 审核 │ │ │
│ │ └────┬────┘ │ │
│ │ │ │ │
│ │ ┌────┴────┐ │ │
│ │ ▼ ▼ │ │
│ │ 通过 不通过 │ │
│ │ │ │ │ │
│ │ ▼ ▼ │ │
│ │ 已销项 处置中 │──────────────▶│
│ └───────────────────┘ │
│ │
│ ┌───────────────────┐ │
│ │ 已取消 │ │
│ └───────────────────┘ │
│ │
│ ┌───────────────────┐ │
│ │ 延期待审批 │ │
│ └───────────────────┘ │
│ │
状态
说明
可执行操作
待接收
已上报,等待接收人确认
接收/退回/撤回(上报人)/取消
已退回
被接收人退回
重新提交/取消
处置中
已接收,等待处置
提交处置/申请延期/取消
延期待审批
处置人申请延期
延期审批(通过/拒绝)
待审核
处置完成,等待审核
审核(通过/不通过)/取消
已销项
审核通过,异常关闭
-
已取消
异常被取消
-
角色
数据权限
主要操作
系统管理员
全部数据
用户管理、系统配置、取消异常
管理员
全部数据
用户管理、查看统计
上报人
仅自己上报的
上报异常、撤回、重新提交
接收人
本站点数据
接收/退回/审核/取消、指派处置人
处置人
指派给自己的
提交处置结果、申请延期
上报人 : 只能查看和操作自己上报的异常
接收人 : 只能查看和操作本站点的异常
处置人 : 只能查看被指派处置的异常
管理员/系统管理员 : 可查看所有异常
必须修改 SECRET_KEY 和 JWT_SECRET_KEY 为强随机字符串
生产环境使用 MySQL/PostgreSQL 替代 SQLite
配置 HTTPS
限制 CORS_ORIGINS 为实际前端域名
生产环境使用Gunicorn运行:
gunicorn -c gunicorn.conf.py run:app
配置文件 gunicorn.conf.py 默认配置:
绑定: 0.0.0.0:5000
工作进程: 4
超时: 120秒
日志: /app/logs/
server {
listen 80 ;
server_name your-domain.com;
location / {
root /path/to/frontend/dist;
try_files $uri $uri / /index .html;
}
location /api/ {
proxy_pass http ://127.0.0.1:5000 ;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
}
}
# 直接修改数据库
sqlite3 data/exception_dev.db
UPDATE users SET password_hash=' <new-hash>' WHERE username=' admin' ;
通过数据字典管理界面(/dict)添加,或直接操作 exception_dict 表。
检查以下配置:
.env 中钉钉相关变量是否正确
钉钉应用是否已发布
网络是否能访问钉钉API
本项目为内部使用系统,请勿外传。
气田异常管理系统 © 2026 | 版本 V1.0