点击按钮运行策略对比
# 订单文件 orders.csv id,product_id,qty,due_date,priority,release_date SO-10001,PA,50,2026-08-11 14:00,1,2026-08-09 14:00 # 设备文件 machines.csv id,name,machine_type,available_from M-CNC-01,CNC加工中心1,CNC,2026-08-09 14:00 # 工艺文件 routings.csv product_id,op_id,op_name,machine_type,setup_time,unit_time,seq PA,PA-OP1,下料冲压,CNC,20,3,1
APS(Advanced Planning & Scheduling,高级计划与排程系统)是制造业生产管理的核心工具,回答一个看似简单却极难回答的问题:
「哪些订单,在哪些设备上,按什么顺序做,才能在交期前做完?」
| 传统排程(Excel/手工) | APS 排程引擎 | |
|---|---|---|
| 考虑约束 | 单设备、无约束 | 多设备并行、工装独占、物料就绪、班次日历 |
| 瓶颈识别 | 凭经验猜测 | 自动计算每台设备利用率,精确定位短板 |
| 插单影响 | 不知道影响多大 | 模拟插单后所有订单交期变化,对比基准 |
| 策略选择 | 一种固定顺序 | 贪婪/负载均衡/纯均衡三策略对比,选最优 |
| 数据导出 | 手动截图 | CSV/JSON 一键导出,对接 ERP/MES |
| 策略 | 做法 | 适用场景 |
|---|---|---|
| 贪婪(Greedy) | 每道工序找最早空闲设备,尽快抢产能 | 交期紧张、订单数量不多时 |
| 负载均衡 | 在交期允许范围内,尽量把任务均匀分到多台设备 | 设备数量多、希望平衡疲劳时 |
| 纯均衡 | 完全按负载最低分配,不优先争交期 | 交期宽松、追求设备利用率均匀时 |
所有 API 基于 https://jiedian.club/aps,返回 JSON。POST 请求 Content-Type 为 application/json。本页也提供 健康检查 实时状态。
| 方法 | 路径 | 说明 | 关键参数 |
|---|---|---|---|
| GET | /api/state |
获取当前全部排程状态:订单/设备/任务/瓶颈/甘特图 HTML | — |
| POST | /api/insertion |
模拟紧急插单,返回基准 vs 插缝 vs 抢占三策略对比 | id, product_id, qty, due_hours, priority |
| GET | /api/compare_strategies |
贪婪 vs 负载均衡 vs 纯均衡 全量对比(含各自甘特图) | — |
| POST | /api/load_demo |
加载内置演示场景(3 产品 × 5 订单 × 4 设备) | — |
| POST | /api/import_csv |
上传 CSV 文件批量导入订单/设备/工艺路线 | FormData file 字段 |
| GET | /api/export_csv |
导出当前排程结果为 CSV | — |
| GET | /api/export_json |
导出当前排程结果为 JSON | — |
| 方法 | 路径 | 说明 | 关键参数 |
|---|---|---|---|
| GET | /api/v2/health |
服务健康检查,返回版本号与运行状态 | — |
| POST | /api/v2/schedule |
执行排程(支持同步/异步双模)。method: sync 直返结果;method: async 返回 task_id 轮询 |
{"method": "sync"|"async"} |
| GET | /api/v2/schedule/<task_id> |
查询异步排程任务结果 | — |
| GET | /api/v2/bottlenecks |
瓶颈资源分析 | — |
| POST | /api/v2/insertion/compare |
插单对比(v2 格式) | 同 /api/insertion |
| GET | /api/v2/compare/strategies |
策略对比(v2 格式) | — |
| POST | /api/v2/import/csv |
CSV 数据导入(v2) | FormData |
| POST | /api/v2/reset |
重置全部数据(清库 + 重载 demo) | — |
| 方法 | 路径 | 说明 | 关键参数 |
|---|---|---|---|
| POST | /api/v2/optimize |
智能优化排程。method: greedy/ga(遗传算法)/sa(模拟退火)/hybrid | {"method": "ga"} |
| POST | /api/v2/bench/batch |
跨场景 × 跨策略批量测评矩阵,生成排名与报告 | {"strategies": ["greedy","ga","sa"], "profile": "default"} |
| POST | /api/v2/rules/apply |
规则引擎:工装独占冲突检测、批量拆分、合并换模优化 | {"tasks": [...], "toolings": {...}, "batch_policy": {...}} |
| POST | /api/v2/rolling/init |
初始化滚动排程器(动态重排程周期) | {"window_hours": 24, "step_hours": 4} |
| POST | /api/v2/rolling/step |
滚动排程走一步(触发重排) | — |
| GET | /api/v2/rolling/state |
查询滚动排程当前状态 | — |
| 方法 | 路径 | 说明 | 关键参数 |
|---|---|---|---|
| GET | /api/v2/erp/mappings |
ERP 字段映射表(内外编号对照) | — |
| POST | /api/v2/erp/orders |
从 ERP 系统推送/拉取订单(推拉双模式) | {"mode": "push"|"pull", "orders": [...]} |
| POST | /api/v2/mes/completions |
MES 完工申报:上报实际产量与工时,触发产能反馈 | {"completions": [{order_id, machine_id, actual_qty, actual_end}]} |
| GET | /api/v2/mes/status |
查询设备实时状态(含完工率/良率) | ?machine_id=M-CNC-01 |
| POST | /api/v2/erp/bridge |
ERP-MES-APS 三系统桥接:模拟完整数据闭环一圈 | {"cycle": "erp→aps→mes→erp"} |
from sdk.aps_sdk import APSClient
client = APSClient(host="https://jiedian.club/aps")
# 健康检查
client.health()
# → {"status":"ok", "version":"2.0.0"}
# 执行排程
result = client.schedule(method="sync")
# → {n_tasks: 11, on_time_rate: 100, ...}
# 紧急插单
comp = client.insertion(
order_id="SO-URG-01", product_id="PA",
qty=30, due_hours=20, priority=1
)
# → {baseline: {...}, gap_strategy: {...}, preemptive_strategy: {...}}
# 批量测评
report = client.bench_batch(
strategies=["greedy", "ga", "sa"], profile="stress"
)
# → 跨场景 × 策略矩阵排名
三种部署方式,从小到大按需选择。零外部依赖(除 Flask),纯 Python + SQLite 运行。
适合本地试用、开发调试。一行命令启动。
# 1. 克隆项目 cd /home/user/projects # 解压或 clone 代码到 aps-system/ # 2. 安装依赖(仅 Flask) pip install flask # 3. 启动 cd aps-system python app_full.py # 4. 浏览器打开 → http://127.0.0.1:5000 (或 python app.py 用 API 模式)
适合企业内部部署、生产环境。Gunicorn 多 worker,SQLite 数据持久化到宿主机。
# 1. 构建镜像 docker build -t aps-full:2.0 -f deploy/Dockerfile . # 2. 启动(docker-compose) cd deploy docker-compose up -d # 3. 访问 curl http://localhost:5000/api/v2/health # 架构:Docker 容器内 Gunicorn 多 worker → /app/data/aps.db (VOLUME 挂载) # 重启不丢数据,宿主机可直接操作 SQLite
适合对公网提供 API 或 Web 服务。推荐 Ubuntu 20.04+,Python 3.10+。
# ── 1. 上传代码 ──
scp -r aps-system/ user@server:/home/user/
# ── 2. 创建 systemd 服务 ──
# cat /etc/systemd/system/aps-full.service
[Unit]
Description=APS-FULL Production Service
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/home/user/aps-system
Environment=APS_MODE=full
ExecStart=/usr/bin/python3 -u app.py
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
# ── 3. 启动 ──
sudo systemctl daemon-reload
sudo systemctl enable --now aps-full
# ── 4. Nginx 反代 ──
# 在 /etc/nginx/sites-enabled/ 中添加:
location /aps/ {
proxy_pass http://127.0.0.1:5001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120s;
}
# ── 5. HTTPS(Let's Encrypt)──
certbot --nginx -d your-domain.com
# ── 6. 验证 ──
curl https://your-domain.com/aps/api/v2/health
# → {"status":"ok","version":"2.0.0"}
不部署任何服务,直接调 jiedian.club 线上 API。适合快速集成和原型验证。
# 安装(零依赖,仅 requests)
pip install requests
# 使用
from sdk.aps_sdk import APSClient
client = APSClient(host="https://jiedian.club/aps")
# 无需本地部署,直接调线上引擎
result = client.schedule(method="sync")
print(f"{result['n_tasks']} 任务, 准时率 {result['on_time_rate']}%")
# SDK 文件:aps-system/sdk/aps_sdk.py (复制到你的项目即可)
| 组件 | 最低版本 | 说明 |
|---|---|---|
| Python | 3.9+ | 推荐 3.11+(dataclass 原生支持) |
| Flask | 2.0+ | 仅 app.py / app_full.py 需要 |
| 操作系统 | Linux / macOS / Windows | Windows 下建议 WSL2 运行 |
| 数据库 | SQLite(内置) | 无需安装,Python 标准库自带 |
| Docker(可选) | 20.10+ | 仅私有化部署需要 |
| Nginx(可选) | 1.18+ | 仅公网反代需要 |
APS_MODE=api)不暴露 Web 控制台,仅提供 REST 接口data/aps.db)定期备份(cp aps.db aps.db.$(date +%Y%m%d))