📊 APS-FULL · 高级排程控制台

📋 排程明细

🗺️ 排程甘特图

🔍 瓶颈资源分析

📊 设备负载分布

🔥 紧急插单模拟器

⚖️ 排程策略对比

对比 原贪婪策略 vs 负载均衡策略 vs 纯均衡策略

点击按钮运行策略对比

📥 数据导入(CSV)

📋 CSV 格式参考

# 订单文件 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 高级排程?

APS(Advanced Planning & Scheduling,高级计划与排程系统)是制造业生产管理的核心工具,回答一个看似简单却极难回答的问题:
「哪些订单,在哪些设备上,按什么顺序做,才能在交期前做完?」

🔸 与传统排程的区别

传统排程(Excel/手工)APS 排程引擎
考虑约束单设备、无约束多设备并行、工装独占、物料就绪、班次日历
瓶颈识别凭经验猜测自动计算每台设备利用率,精确定位短板
插单影响不知道影响多大模拟插单后所有订单交期变化,对比基准
策略选择一种固定顺序贪婪/负载均衡/纯均衡三策略对比,选最优
数据导出手动截图CSV/JSON 一键导出,对接 ERP/MES

🔸 核心概念

订单(Order)
一条生产指令:什么产品 + 多少数量 + 何时交。优先级数字越小越优先,交期越紧越优先。
工艺路线(Routing)
一个产品从原料到成品的加工步骤链。每步指定设备类型、换模时间(setup)和单件工时(unit_time)。
设备(Machine)
产线上的加工单元。同类设备可并行处理订单,设备有忙闲区间和负载率。
物料约束(Material)
关键原料的到货时间。排程会自动推迟依赖物料的工序至物料就绪之后。
瓶颈资源
全产线利用率最高的设备。产线产能由瓶颈决定——改善非瓶颈设备不会提升总产出。
合并换模
同设备上同一工装连续加工时,后续批次的换模时间可归零。节省时间和成本。

🔸 三种排程策略

策略做法适用场景
贪婪(Greedy)每道工序找最早空闲设备,尽快抢产能交期紧张、订单数量不多时
负载均衡在交期允许范围内,尽量把任务均匀分到多台设备设备数量多、希望平衡疲劳时
纯均衡完全按负载最低分配,不优先争交期交期宽松、追求设备利用率均匀时

🔌 API 参考

所有 API 基于 https://jiedian.club/aps,返回 JSON。POST 请求 Content-Type 为 application/json。本页也提供 健康检查 实时状态。

📋 核心 API · 排程引擎

方法路径说明关键参数
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

🔌 v2 API · 工程化开放层

方法路径说明关键参数
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)

🧬 v2 算法仿真 · 约束与优化

方法路径说明关键参数
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 查询滚动排程当前状态

🏭 v2 ERP/MES 数据闭环

方法路径说明关键参数
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"}

📦 Python SDK 示例

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"
)
# → 跨场景 × 策略矩阵排名

🚀 部署 APS-FULL 到你的环境

三种部署方式,从小到大按需选择。零外部依赖(除 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 模式)

🔸 方式二:Docker 私有化部署

适合企业内部部署、生产环境。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

🔸 方式三:生产服务器部署(systemd + Nginx)

适合对公网提供 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"}

🔸 方式四:Python SDK 远程调用(零部署)

不部署任何服务,直接调 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  (复制到你的项目即可)

📦 环境要求

组件最低版本说明
Python3.9+推荐 3.11+(dataclass 原生支持)
Flask2.0+仅 app.py / app_full.py 需要
操作系统Linux / macOS / WindowsWindows 下建议 WSL2 运行
数据库SQLite(内置)无需安装,Python 标准库自带
Docker(可选)20.10+仅私有化部署需要
Nginx(可选)1.18+仅公网反代需要

🔐 安全建议

  • API 模式(APS_MODE=api)不暴露 Web 控制台,仅提供 REST 接口
  • 生产环境务必加 Nginx HTTPS + Let's Encrypt 证书
  • SQLite 文件(data/aps.db)定期备份(cp aps.db aps.db.$(date +%Y%m%d)
  • Docker 部署时勿暴露 5000 端口到公网,走 Nginx 反代
  • 建议在 systemd 服务中以非 root 用户(如 www-data)运行