需求分析与详细设计文档
一、项目总体概述
二、需求分析
2.1 业务背景与痛点分析
2.2 用户角色分析
| 角色 | 职责 | 核心需求 |
|---|---|---|
| 质检员 | 查看瑕疵检测结果,确认/修正AI判定 | 直观的瑕疵标注界面,快速复核 |
| 生产调度员 | 制定/调整生产排程 | 智能排产建议,一键调整,甘特图展示 |
| 车间主任 | 监控生产与质量全局 | 综合看板,异常告警 |
| 设备管理员 | 管理织机设备状态 | 设备状态监控,维护提醒 |
| 系统管理员 | 平台配置与维护 | 用户权限管理,系统参数配置 |
2.3 功能性需求
2.3.1 瑕疵检测子系统(Python)
详细功能需求清单:
| 编号 | 功能模块 | 功能描述 | 优先级 |
|---|---|---|---|
| D-001 | 图像采集管理 | 支持多路工业相机接入,配置采集参数(分辨率、帧率、触发模式) | P0 |
| D-002 | 图像预处理 | 灰度转换、直方图均衡化、高斯去噪、自适应阈值处理 | P0 |
| D-003 | 瑕疵检测模型 | 基于YOLOv8/RT-DETR的实时目标检测,支持多类瑕疵同时识别 | P0 |
| D-004 | 瑕疵分类 | 识别≥8类常见纺织瑕疵(断经、断纬、跳纱、油污、破洞、稀密路、筘痕、错花) | P0 |
| D-005 | 瑕疵分级 | 根据瑕疵类型、面积、密度自动判定质量等级(A/B/C/废品) | P0 |
| D-006 | 模型管理 | 模型版本管理、在线更新、A/B测试、回滚 | P1 |
| D-007 | 标注工具 | 内置标注工具支持新样本标注,支持主动学习 | P1 |
| D-008 | 统计报表 | 瑕疵类型分布、趋势分析、设备瑕疵关联分析 | P1 |
| D-009 | 边缘部署 | 支持TensorRT/ONNX Runtime边缘端推理加速 | P2 |
| D-010 | 模型训练 | 增量训练、迁移学习,支持小样本场景 | P2 |
2.3.2 柔性排产子系统(Java)
详细功能需求清单:
| 编号 | 功能模块 | 功能描述 | 优先级 |
|---|---|---|---|
| S-001 | 订单管理 | 订单CRUD、Excel/CSV批量导入、订单状态跟踪(待排/已排/生产中/完成) | P0 |
| S-002 | 工序管理 | 纺织工艺流程定义(整经→穿综→织造→检验→整理),工序依赖关系 | P0 |
| S-003 | 设备管理 | 织机台账(型号、能力、状态)、设备日历、维护计划 | P0 |
| S-004 | 排产引擎 | 基于多目标优化算法(交期满足率、设备利用率、换产成本最小化) | P0 |
| S-005 | 排产约束 | 硬约束(设备能力、工序依赖、交期)+软约束(换纱时间、批次合并) | P0 |
| S-006 | 甘特图展示 | 交互式甘特图,支持拖拽调整、冲突检测、关键路径高亮 | P0 |
| S-007 | 动态重排 | 基于瑕疵质量反馈/设备故障触发局部重排,最小扰动原则 | P1 |
| S-008 | 产能分析 | 设备负荷率分析、瓶颈识别、产能预测 | P1 |
| S-009 | 生产看板 | 实时生产进度、质量指标、设备状态大屏展示 | P1 |
| S-010 | 排产模拟 | What-if分析,模拟不同策略下的排产效果 | P2 |
2.4 非功能性需求
| 类别 | 需求描述 | 指标 |
|---|---|---|
| 性能 | 瑕疵检测单张图像推理时间 | ≤50ms(GPU)/ ≤200ms(CPU) |
| 性能 | 排产引擎1000道订单求解时间 | ≤30s |
| 性能 | 平台页面响应时间 | ≤2s(P95) |
| 可用性 | 系统可用性 | ≥99.5% |
| 可用性 | 检测服务支持无缝重启 | 支持热更新 |
| 可扩展性 | 相机接入数量 | 单节点支持≥8路 |
| 可扩展性 | 排产算法可插拔 | 策略模式支持多种算法切换 |
| 安全性 | 访问控制 | RBAC权限模型 |
| 安全性 | 数据传输 | HTTPS + JWT认证 |
| 兼容性 | 浏览器 | Chrome/Edge/Firefox最新2个版本 |
2.5 系统上下文
三、详细设计
3.1 系统总体架构
3.2 瑕疵检测子系统详细设计(Python)
3.2.1 模块划分
defect-detection-service/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI应用入口
│ ├── config/
│ │ ├── settings.py # 全局配置(Pydantic BaseSettings)
│ │ └── logging_config.py # 日志配置
│ ├── api/
│ │ ├── v1/
│ │ │ ├── detection.py # 检测接口
│ │ │ ├── model_mgmt.py # 模型管理接口
│ │ │ ├── statistics.py # 统计分析接口
│ │ │ └── health.py # 健康检查
│ │ └── deps.py # 依赖注入
│ ├── core/
│ │ ├── camera/
│ │ │ ├── base.py # 相机抽象基类
│ │ │ ├── industrial.py # 工业相机驱动(GigE/USB3)
│ │ │ ├── simulator.py # 模拟相机(开发测试)
│ │ │ └── manager.py # 多相机管理器
│ │ ├── preprocessing/
│ │ │ ├── pipeline.py # 预处理流水线
│ │ │ ├── transforms.py # 图像变换操作集
│ │ │ └── augmentation.py # 数据增强
│ │ ├── inference/
│ │ │ ├── base_detector.py # 检测器抽象基类
│ │ │ ├── yolo_detector.py # YOLOv8检测器
│ │ │ ├── rtdetr_detector.py # RT-DETR检测器
│ │ │ ├── segmentor.py # 语义分割器
│ │ │ ├── model_loader.py # 模型加载器(支持ONNX/TRT/PT)
│ │ │ └── engine.py # 推理引擎(批处理/流式)
│ │ ├── postprocessing/
│ │ │ ├── nms.py # 非极大值抑制
│ │ │ ├── classifier.py # 瑕疵分类后处理
│ │ │ ├── grading.py # 质量分级规则引擎
│ │ │ └── tracker.py # 布匹连续帧瑕疵跟踪
│ │ └── training/
│ │ ├── trainer.py # 模型训练器
│ │ ├── dataset.py # 数据集管理
│ │ └── active_learning.py # 主动学习策略
│ ├── models/
│ │ ├── detection_result.py # 检测结果数据模型
│ │ ├── defect.py # 瑕疵实体
│ │ ├── quality_grade.py # 质量等级
│ │ └── camera_config.py # 相机配置
│ ├── services/
│ │ ├── detection_service.py # 检测业务服务
│ │ ├── alert_service.py # 告警服务
│ │ ├── storage_service.py # 图像存储服务
│ │ └── message_service.py # 消息发布服务
│ ├── db/
│ │ ├── database.py # 数据库连接
│ │ ├── models.py # SQLAlchemy ORM模型
│ │ └── repositories/ # 数据访问层
│ └── utils/
│ ├── image_utils.py
│ └── metrics.py # 性能指标收集
├── models/ # 预训练模型文件
├── tests/
├── Dockerfile
├── requirements.txt
└── pyproject.toml
3.2.2 核心类设计
3.2.3 核心流程设计
实时检测流程:
3.2.4 关键算法设计
瑕疵检测模型架构:
质量分级规则引擎:
# 分级规则配置示例(grading_rules.yaml对应的处理逻辑)
"""
分级规则设计:
- A级(优等品): 无重大瑕疵,轻微瑕疵≤2处/10米
- B级(一等品): 无破洞,其他瑕疵≤5处/10米,单处面积<2cm²
- C级(二等品): 无破洞,其他瑕疵≤10处/10米,单处面积<5cm²
- 废品: 超出C级标准,或存在连续性严重缺陷
"""
class GradingRule:
"""质量分级规则"""
def __init__(self, grade, max_defect_count, max_single_area,
forbidden_types, max_total_area_ratio):
self.grade = grade
self.max_defect_count = max_defect_count # 每10米最大瑕疵数
self.max_single_area = max_single_area # 单处最大面积(cm²)
self.forbidden_types = forbidden_types # 禁止出现的瑕疵类型
self.max_total_area_ratio = max_total_area_ratio # 总瑕疵面积占比
GRADING_RULES = [
GradingRule("A", max_defect_count=2, max_single_area=1.0,
forbidden_types=["HOLE", "BROKEN_WARP"], max_total_area_ratio=0.001),
GradingRule("B", max_defect_count=5, max_single_area=2.0,
forbidden_types=["HOLE"], max_total_area_ratio=0.005),
GradingRule("C", max_defect_count=10, max_single_area=5.0,
forbidden_types=["HOLE"], max_total_area_ratio=0.01),
# 超出C级 → 废品
]
3.2.5 API接口设计
| 接口 | 方法 | 路径 | 描述 |
|---|---|---|---|
| 单图检测 | POST | /api/v1/detection/image |
上传单张图片进行检测 |
| 批量检测 | POST | /api/v1/detection/batch |
批量图片检测 |
| 启动流式检测 | POST | /api/v1/detection/stream/start |
启动指定相机的实时检测 |
| 停止流式检测 | POST | /api/v1/detection/stream/stop |
停止指定相机的实时检测 |
| 检测记录查询 | GET | /api/v1/detection/records |
分页查询历史检测记录 |
| 瑕疵统计 | GET | /api/v1/statistics/defects |
获取瑕疵分布统计 |
| 趋势分析 | GET | /api/v1/statistics/trends |
获取瑕疵趋势数据 |
| 模型列表 | GET | /api/v1/models |
获取已注册模型列表 |
| 切换模型 | PUT | /api/v1/models/{id}/activate |
激活指定模型版本 |
| 实时WebSocket | WS | /ws/v1/detection/{camera_id} |
实时检测结果推送 |
核心接口详细定义:
# 单图检测接口
# POST /api/v1/detection/image
# Request: multipart/form-data
# - file: 图片文件 (JPEG/PNG/BMP)
# - camera_id: 可选,关联相机ID
# - fabric_type: 可选,面料类型
# Response 200:
{
"request_id": "uuid-string",
"image_id": "img_20260302_001",
"detection_time_ms": 42.5,
"defects": [
{
"defect_id": "def_001",
"type": "BROKEN_WARP",
"type_name": "断经",
"confidence": 0.96,
"bbox": {"x1": 120, "y1": 350, "x2": 185, "y2": 420},
"area_px": 4550,
"area_cm2": 1.82,
"severity": "MAJOR"
}
],
"defect_count": 1,
"quality_grade": "B",
"annotated_image_url": "/storage/annotated/img_20260302_001.jpg",
"original_image_url": "/storage/original/img_20260302_001.jpg"
}
3.3 柔性排产子系统详细设计(Java)
3.3.1 模块划分
flexible-scheduling-service/
├── pom.xml
├── src/main/java/com/zhihuitong/scheduling/
│ ├── SchedulingApplication.java
│ ├── config/
│ │ ├── SecurityConfig.java # Spring Security配置
│ │ ├── RedisConfig.java
│ │ ├── RabbitMQConfig.java
│ │ ├── SwaggerConfig.java
│ │ └── WebSocketConfig.java
│ ├── controller/
│ │ ├── OrderController.java # 订单管理API
│ │ ├── ResourceController.java # 资源管理API
│ │ ├── ScheduleController.java # 排产管理API
│ │ ├── DashboardController.java # 看板数据API
│ │ └── SystemController.java # 系统管理API
│ ├── service/
│ │ ├── order/
│ │ │ ├── OrderService.java
│ │ │ └── OrderDecomposeService.java # 订单工序分解
│ │ ├── resource/
│ │ │ ├── LoomService.java # 织机设备管理
│ │ │ ├── WorkerService.java # 人员班次
│ │ │ └── CapacityService.java # 产能计算
│ │ ├── scheduling/
│ │ │ ├── SchedulingService.java # 排产主服务
│ │ │ ├── SchedulingContext.java # 排产上下文
│ │ │ └── SchedulingEvaluator.java # 方案评估
│ │ ├── engine/
│ │ │ ├── SchedulingEngine.java # 排产引擎接口
│ │ │ ├── GeneticAlgorithmEngine.java # 遗传算法实现
│ │ │ ├── SimulatedAnnealingEngine.java # 模拟退火实现
│ │ │ └── OptaPlannerEngine.java # OptaPlanner实现
│ │ ├── quality/
│ │ │ ├── QualityFeedbackService.java # 质量反馈处理
│ │ │ └── DynamicRescheduleService.java # 动态重排
│ │ └── monitor/
│ │ ├── ProductionMonitorService.java # 生产监控
│ │ └── AlertService.java # 告警服务
│ ├── domain/
│ │ ├── entity/
│ │ │ ├── Order.java
│ │ │ ├── OrderItem.java
│ │ │ ├── ProcessStep.java # 工序
│ │ │ ├── Loom.java # 织机
│ │ │ ├── Worker.java
│ │ │ ├── SchedulePlan.java # 排产计划
│ │ │ ├── ScheduleTask.java # 排产任务(最小排程单元)
│ │ │ └── QualityEvent.java # 质量事件
│ │ ├── enums/
│ │ │ ├── OrderStatus.java
│ │ │ ├── LoomStatus.java
│ │ │ ├── TaskStatus.java
│ │ │ └── DefectType.java
│ │ └── vo/
│ │ ├── GanttChartVO.java
│ │ ├── ScheduleResultVO.java
│ │ └── DashboardVO.java
│ ├── repository/
│ │ ├── OrderRepository.java
│ │ ├── LoomRepository.java
│ │ ├── SchedulePlanRepository.java
│ │ └── ScheduleTaskRepository.java
│ ├── mq/
│ │ ├── QualityEventConsumer.java # 消费瑕疵检测事件
│ │ └── ScheduleEventProducer.java # 发布排产事件
│ └── util/
│ ├── GanttChartBuilder.java
│ └── TimeWindowCalculator.java
└── src/main/resources/
├── application.yml
├── application-dev.yml
└── mapper/ # MyBatis XML(使用)
3.3.2 核心类设计
3.3.3 排产引擎核心算法设计
染色体编码设计:
/**
* 染色体编码:双层编码
* 第一层(工序排列):工序的执行顺序排列 [P3, P1, P5, P2, P4, ...]
* 第二层(设备分配):每个工序对应的设备ID [L2, L1, L3, L1, L4, ...]
*
* 解码规则:
* 1. 按工序排列顺序,依次将工序安排到对应设备上
* 2. 考虑工序依赖(同一订单内工序必须按sequence顺序)
* 3. 同一设备上的任务不能时间重叠
* 4. 连续不同品种间加入换产时间
*/
public class Chromosome {
private int[] processSequence; // 工序排列编码
private int[] loomAssignment; // 设备分配编码
private double fitness; // 适应度值
// 适应度计算
public double calculateFitness(SchedulingContext context) {
// 解码得到排程方案
List<ScheduleTask> tasks = decode(context);
// 计算各子目标
double deliveryRate = calcDeliveryRate(tasks, context);
double utilization = calcUtilization(tasks, context);
double changeover = calcChangeoverCost(tasks, context);
double balance = calcLoadBalance(tasks, context);
// 加权求和
this.fitness = 0.4 * deliveryRate + 0.3 * utilization
- 0.2 * changeover + 0.1 * balance;
return this.fitness;
}
}
3.3.4 质量反馈驱动的动态重排流程
3.3.5 API接口设计
订单管理接口:
| 接口 | 方法 | 路径 | 描述 |
|---|---|---|---|
| 创建订单 | POST | /api/v1/orders |
新建生产订单 |
| 查询订单列表 | GET | /api/v1/orders |
分页查询,支持多条件筛选 |
| 查询订单详情 | GET | /api/v1/orders/{id} |
包含工序分解详情 |
| 更新订单 | PUT | /api/v1/orders/{id} |
修改订单信息 |
| 删除订单 | DELETE | /api/v1/orders/{id} |
逻辑删除(仅待排状态) |
| 批量导入 | POST | /api/v1/orders/import |
Excel批量导入 |
| 工序分解 | POST | /api/v1/orders/{id}/decompose |
按工艺路线分解工序 |
排产管理接口:
| 接口 | 方法 | 路径 | 描述 |
|---|---|---|---|
| 执行排产 | POST | /api/v1/schedules/generate |
根据参数执行排产 |
| 查询排产计划 | GET | /api/v1/schedules |
获取排产计划列表 |
| 获取甘特图数据 | GET | /api/v1/schedules/{id}/gantt |
获取甘特图渲染数据 |
| 手动调整任务 | PUT | /api/v1/schedules/{id}/tasks/{taskId} |
拖拽调整后保存 |
| 冲突检测 | POST | /api/v1/schedules/{id}/check-conflicts |
检测排产冲突 |
| 方案对比 | POST | /api/v1/schedules/compare |
多方案对比分析 |
| 确认发布 | POST | /api/v1/schedules/{id}/publish |
确认排产计划 |
| 动态重排 | POST | /api/v1/schedules/{id}/reschedule |
触发动态重排 |
资源管理接口:
| 接口 | 方法 | 路径 | 描述 |
|---|---|---|---|
| 织机列表 | GET | /api/v1/looms |
获取织机列表 |
| 织机详情 | GET | /api/v1/looms/{id} |
设备详情含能力矩阵 |
| 更新织机状态 | PUT | /api/v1/looms/{id}/status |
更新设备状态 |
| 产能日历 | GET | /api/v1/looms/{id}/calendar |
获取设备产能日历 |
| 产能分析 | GET | /api/v1/capacity/analysis |
获取产能分析报告 |
看板接口:
| 接口 | 方法 | 路径 | 描述 |
|---|---|---|---|
| 综合看板数据 | GET | /api/v1/dashboard/overview |
获取综合看板数据 |
| 生产进度 | GET | /api/v1/dashboard/progress |
实时生产进度 |
| 质量指标 | GET | /api/v1/dashboard/quality |
质量指标汇总 |
| 设备状态 | GET | /api/v1/dashboard/loom-status |
设备实时状态 |
| WebSocket推送 | WS | /ws/v1/dashboard |
看板实时数据推送 |
排产生成请求体示例:
{
"planName": "2026年3月第1周排产",
"planStartDate": "2026-03-02",
"planEndDate": "2026-03-08",
"orderIds": [1001, 1002, 1003, 1005],
"algorithmType": "GENETIC_ALGORITHM",
"algorithmParams": {
"populationSize": 200,
"maxGenerations": 500,
"crossoverRate": 0.8,
"mutationRate": 0.15
},
"objectiveWeights": {
"deliveryRate": 0.4,
"utilization": 0.3,
"changeoverCost": 0.2,
"loadBalance": 0.1
},
"constraints": {
"respectDeadline": true,
"maxOvertimeHoursPerDay": 2,
"minChangeoverMinutes": 30
}
}
甘特图响应体示例:
{
"planId": 2001,
"planName": "2026年3月第1周排产",
"metrics": {
"deliveryRate": 0.95,
"avgUtilization": 0.87,
"totalChangeoverHours": 12.5,
"loadBalanceIndex": 0.82
},
"looms": [
{
"loomId": 1,
"loomCode": "L-001",
"loomType": "喷气织机",
"tasks": [
{
"taskId": 5001,
"orderNo": "ORD-2026-0301",
"processName": "织造",
"fabricType": "涤纶平纹",
"startTime": "2026-03-02T08:00:00",
"endTime": "2026-03-02T16:30:00",
"changeoverBefore": 30,
"status": "PLANNED",
"color": "#4CAF50"
}
]
}
],
"criticalPath": [5001, 5003, 5007],
"conflicts": []
}
3.4 系统集成设计
3.4.1 Python-Java跨语言通信
3.4.2 消息队列设计
| Exchange | Routing Key | 消息内容 | 生产者 | 消费者 |
|---|---|---|---|---|
quality.events |
defect.alert.{severity} |
瑕疵告警事件 | Python检测服务 | Java排产服务 |
quality.events |
grade.change.{loomId} |
布匹质量等级变更 | Python检测服务 | Java排产服务 |
quality.events |
device.fault.{loomId} |
设备异常(检测端发现) | Python检测服务 | Java排产服务 |
schedule.events |
plan.updated |
排产计划变更通知 | Java排产服务 | 前端WebSocket |
schedule.events |
task.status.change |
任务状态变更 | Java排产服务 | 监控大屏 |
消息体格式示例:
// 质量事件消息 (Python → RabbitMQ → Java)
{
"eventId": "evt_20260302_001",
"eventType": "DEFECT_ALERT",
"timestamp": "2026-03-02T13:45:00Z",
"source": {
"cameraId": "CAM-003",
"loomId": "L-005",
"fabricRollId": "ROLL-20260302-003"
},
"data": {
"defectType": "BROKEN_WARP",
"defectCount": 5,
"timeWindow": "10min",
"currentGrade": "C",
"previousGrade": "B",
"severity": "HIGH"
},
"recommendation": "RESCHEDULE_SUGGESTED"
}
3.5 部署架构设计
项目分区导航:⬅️ 02-性能优化 | 01-需求分析与详细设计文档 | ➡️ 00-企业级项目深读
💬 评论