1045 lines
21 KiB
Markdown
1045 lines
21 KiB
Markdown
# Produce 插件六模块复刻方案
|
||||
|
|
|
|||
|
|
## 1. 文档目的
|
|||
|
|
|
|||
|
|
本文档用于梳理 `backend/plugin/produce` 插件需要优先复刻的 6 个模块,并结合旧项目的前端、后端、SQL 安装脚本,整理出一份可以直接执行的开发方案。
|
|||
|
|
|
|||
|
|
目标模块:
|
|||
|
|
|
|||
|
|
1. 工序管理 `process`
|
|||
|
|
2. 工序步骤 `process-step`
|
|||
|
|
3. 步骤状态 `step-status`
|
|||
|
|
4. 步骤关系 `step-relation`
|
|||
|
|
5. 状态转换 `status-transition`
|
|||
|
|
6. 转换日志 `transition-log`
|
|||
|
|
|
|||
|
|
本文档基于以下真实参考:
|
|||
|
|
|
|||
|
|
- 旧前端目录:`old/web/src/views/produce/*`
|
|||
|
|
- 旧后端路由:`old/server/app/admin/route/produce.php`
|
|||
|
|
- 旧后端控制器:`old/server/app/admin/controller/produce/*`
|
|||
|
|
- 旧后端 Validate:`old/server/app/admin/validate/produce/*`
|
|||
|
|
- 旧后端 DAO / Model / Service:`old/server/app/common/{dao,model,services}/produce/*`
|
|||
|
|
- 旧库 SQL:`old/server/scripts/sql/install.sql`
|
|||
|
|
- 当前插件骨架:`backend/plugin/produce/*`
|
|||
|
|
|
|||
|
|
## 2. 当前 produce 插件现状
|
|||
|
|
|
|||
|
|
### 2.1 已存在结构
|
|||
|
|
|
|||
|
|
当前插件目录:`backend/plugin/produce`
|
|||
|
|
|
|||
|
|
已有基础骨架:
|
|||
|
|
|
|||
|
|
- `app/adminapi/controller/ProduceController.php`
|
|||
|
|
- `config/app.php`
|
|||
|
|
- `config/info.php`
|
|||
|
|
- `config/route.php`
|
|||
|
|
- `resource/menu/admin.php`
|
|||
|
|
- `resource/template/admin/api`
|
|||
|
|
- `resource/template/admin/views/produce/index`
|
|||
|
|
- `resource/template/admin/lang`
|
|||
|
|
|
|||
|
|
### 2.2 缺失结构
|
|||
|
|
|
|||
|
|
以下目录当前基本为空,尚不足以承载 6 个业务模块:
|
|||
|
|
|
|||
|
|
- `app/model`
|
|||
|
|
- `app/dao`
|
|||
|
|
- `app/service`
|
|||
|
|
- `app/validate`
|
|||
|
|
- `app/schema`
|
|||
|
|
- `resource/database/migrations`
|
|||
|
|
|
|||
|
|
结论:当前 `produce` 插件仍是示例骨架,复刻这 6 个模块时需要按插件标准完整补齐后端数据层、控制器、菜单、模板源前端。
|
|||
|
|
|
|||
|
|
## 3. 旧项目总体结构结论
|
|||
|
|
|
|||
|
|
### 3.1 旧前端页面模式
|
|||
|
|
|
|||
|
|
旧前端每个模块基本采用如下模式:
|
|||
|
|
|
|||
|
|
- `index.vue`
|
|||
|
|
- `data.ts`
|
|||
|
|
- `modules/form.vue`
|
|||
|
|
|
|||
|
|
技术模式为:
|
|||
|
|
|
|||
|
|
- `VXE Grid`
|
|||
|
|
- 手写查询表单
|
|||
|
|
- Drawer Form
|
|||
|
|
- 手写列表请求与弹窗逻辑
|
|||
|
|
|
|||
|
|
不适合直接复制到当前项目。当前插件应改造为:
|
|||
|
|
|
|||
|
|
- `BasicCrud`
|
|||
|
|
- `schemas/index.tsx`
|
|||
|
|
- `api/index.ts`
|
|||
|
|
- 插件模板源目录开发
|
|||
|
|
|
|||
|
|
### 3.2 旧后端路由模式
|
|||
|
|
|
|||
|
|
旧后端集中在:`old/server/app/admin/route/produce.php`
|
|||
|
|
|
|||
|
|
6 个目标模块在旧项目均有独立路由分组,说明旧项目对这 6 个模块是完整拆分的,不是页面层虚拟模块。
|
|||
|
|
|
|||
|
|
### 3.3 旧数据库来源
|
|||
|
|
|
|||
|
|
旧项目这 6 张核心表的建表信息没有体现在 `old/server/scripts/migrations` 目录的独立 PHP migration 中,核心定义主要在 SQL 安装脚本中:
|
|||
|
|
|
|||
|
|
- `old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
因此本次字段与索引参考,优先以:
|
|||
|
|
|
|||
|
|
1. SQL 安装脚本
|
|||
|
|
2. Model fillable / casts / relation
|
|||
|
|
3. DAO / Service 业务逻辑
|
|||
|
|
4. 旧前端页面字段
|
|||
|
|
|
|||
|
|
作为综合依据。
|
|||
|
|
|
|||
|
|
## 4. 六模块真实表与后端入口对照
|
|||
|
|
|
|||
|
|
| 模块 | 表名(Model) | 旧控制器 | 旧服务/DAO | 旧前端目录 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| 工序管理 | `produce_process` | `ProduceProcessController` | `ProduceProcessService` / `ProduceProcessDao` | `old/web/src/views/produce/process` |
|
|||
|
|
| 工序步骤 | `produce_process_step` | `ProduceProcessStepController` | `ProduceProcessStepService` / `ProduceProcessStepDao` | `old/web/src/views/produce/process-step` |
|
|||
|
|
| 步骤状态 | `produce_step_status` | `ProduceStepStatusController` | `ProduceStepStatusService` / `ProduceStepStatusDao` | `old/web/src/views/produce/step-status` |
|
|||
|
|
| 步骤关系 | `produce_step_relation` | `ProduceStepRelationController` | `ProduceStepRelationService` / `ProduceStepRelationDao` | `old/web/src/views/produce/step-relation` |
|
|||
|
|
| 状态转换 | `produce_status_transition` | `ProduceStatusTransitionController` | `ProduceStatusTransitionService` / `ProduceStatusTransitionDao` | `old/web/src/views/produce/status-transition` |
|
|||
|
|
| 转换日志 | `produce_transition_log` | `ProduceTransitionLogController` | `ProduceTransitionLogService` / `ProduceTransitionLogDao` | `old/web/src/views/produce/transition-log` |
|
|||
|
|
|
|||
|
|
## 5. 模块依赖关系
|
|||
|
|
|
|||
|
|
这 6 个模块存在清晰的业务依赖链:
|
|||
|
|
|
|||
|
|
1. `process`
|
|||
|
|
2. `process-step` 依赖 `process`
|
|||
|
|
3. `step-status` 依赖 `process-step`
|
|||
|
|
4. `step-relation` 依赖 `process-step`
|
|||
|
|
5. `status-transition` 依赖:
|
|||
|
|
- `process-step`
|
|||
|
|
- `step-status`
|
|||
|
|
6. `transition-log` 依赖:
|
|||
|
|
- `process-step`
|
|||
|
|
- `step-status`
|
|||
|
|
- `status-transition`
|
|||
|
|
- 生产执行侧产生的数据
|
|||
|
|
|
|||
|
|
推荐开发顺序必须遵循该依赖链。
|
|||
|
|
|
|||
|
|
## 6. 六模块详细分析
|
|||
|
|
|
|||
|
|
### 6.1 工序管理 `process`
|
|||
|
|
|
|||
|
|
#### 6.1.1 旧前端参考
|
|||
|
|
|
|||
|
|
目录:`old/web/src/views/produce/process`
|
|||
|
|
|
|||
|
|
查询字段:
|
|||
|
|
|
|||
|
|
- `LIKE_process_code`
|
|||
|
|
- `LIKE_process_name`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
列表字段:
|
|||
|
|
|
|||
|
|
- `process_code`
|
|||
|
|
- `process_name`
|
|||
|
|
- `description`
|
|||
|
|
- `step_count`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `created_date`
|
|||
|
|
|
|||
|
|
表单字段:
|
|||
|
|
|
|||
|
|
- `process_code`
|
|||
|
|
- `process_name`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `description`
|
|||
|
|
|
|||
|
|
#### 6.1.2 旧后端模型字段
|
|||
|
|
|
|||
|
|
模型:`old/server/app/common/model/produce/ProduceProcess.php`
|
|||
|
|
|
|||
|
|
真实字段:
|
|||
|
|
|
|||
|
|
- `id`
|
|||
|
|
- `tenant_id`
|
|||
|
|
- `process_code`
|
|||
|
|
- `process_name`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `step_count`
|
|||
|
|
- `created_by`
|
|||
|
|
- `updated_by`
|
|||
|
|
- `created_at`
|
|||
|
|
- `updated_at`
|
|||
|
|
- `deleted_at`
|
|||
|
|
|
|||
|
|
关系:
|
|||
|
|
|
|||
|
|
- `steps()` -> `hasMany(ProduceProcessStep::class)`
|
|||
|
|
|
|||
|
|
特殊点:
|
|||
|
|
|
|||
|
|
- `step_count` 在模型中带有自动统计能力,不只是纯存储字段。
|
|||
|
|
|
|||
|
|
#### 6.1.3 SQL 参考
|
|||
|
|
|
|||
|
|
来源:`old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
表:`ma_produce_process`
|
|||
|
|
|
|||
|
|
关键约束:
|
|||
|
|
|
|||
|
|
- 唯一索引:`uk_process_code(process_code, tenant_id, deleted_at)`
|
|||
|
|
- 常规索引:`tenant_id`、`status`、`sort`
|
|||
|
|
|
|||
|
|
#### 6.1.4 复杂度评估
|
|||
|
|
|
|||
|
|
- 复杂度:低
|
|||
|
|
- 适合作为第一个落地模块
|
|||
|
|
|
|||
|
|
#### 6.1.5 新插件建议
|
|||
|
|
|
|||
|
|
模块名建议:`process`
|
|||
|
|
|
|||
|
|
后端应提供:
|
|||
|
|
|
|||
|
|
- 标准 CRUD
|
|||
|
|
- 下拉接口 `select/options`
|
|||
|
|
|
|||
|
|
前端建议:
|
|||
|
|
|
|||
|
|
- 标准 `BasicCrud`
|
|||
|
|
- 保留查询项与排序、状态字段
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 6.2 工序步骤 `process-step`
|
|||
|
|
|
|||
|
|
#### 6.2.1 旧前端参考
|
|||
|
|
|
|||
|
|
目录:`old/web/src/views/produce/process-step`
|
|||
|
|
|
|||
|
|
查询字段:
|
|||
|
|
|
|||
|
|
- `process_id`
|
|||
|
|
- `LIKE_step_code`
|
|||
|
|
- `LIKE_step_name`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
列表字段:
|
|||
|
|
|
|||
|
|
- `process_id`(实际显示工序名称)
|
|||
|
|
- `step_code`
|
|||
|
|
- `step_name`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `created_date`
|
|||
|
|
|
|||
|
|
表单字段:
|
|||
|
|
|
|||
|
|
- `process_id`
|
|||
|
|
- `step_code`
|
|||
|
|
- `step_name`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `description`
|
|||
|
|
|
|||
|
|
#### 6.2.2 旧后端模型字段
|
|||
|
|
|
|||
|
|
模型:`old/server/app/common/model/produce/ProduceProcessStep.php`
|
|||
|
|
|
|||
|
|
真实字段:
|
|||
|
|
|
|||
|
|
- `id`
|
|||
|
|
- `tenant_id`
|
|||
|
|
- `process_id`
|
|||
|
|
- `step_code`
|
|||
|
|
- `step_name`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `prerequisite_steps`
|
|||
|
|
- `prerequisite_mode`
|
|||
|
|
- `prerequisite_require_final`
|
|||
|
|
- `allow_repeat_scan`
|
|||
|
|
- `repeat_scan_statuses`
|
|||
|
|
- `created_by`
|
|||
|
|
- `updated_by`
|
|||
|
|
- `created_at`
|
|||
|
|
- `updated_at`
|
|||
|
|
- `deleted_at`
|
|||
|
|
|
|||
|
|
casts:
|
|||
|
|
|
|||
|
|
- `prerequisite_steps` => `array`
|
|||
|
|
- `repeat_scan_statuses` => `array`
|
|||
|
|
- `allow_repeat_scan` => `integer`
|
|||
|
|
- `prerequisite_require_final` => `integer`
|
|||
|
|
|
|||
|
|
关系:
|
|||
|
|
|
|||
|
|
- `process()` -> `belongsTo(ProduceProcess::class)`
|
|||
|
|
|
|||
|
|
#### 6.2.3 旧前端与真实后端差异
|
|||
|
|
|
|||
|
|
旧前端页面只展示了基础字段,但后端模型里还有生产执行相关能力字段:
|
|||
|
|
|
|||
|
|
- 前置必要步骤
|
|||
|
|
- 前置步骤验证模式
|
|||
|
|
- 是否要求前置终态
|
|||
|
|
- 是否允许重复扫码
|
|||
|
|
- 哪些状态允许重复扫码
|
|||
|
|
|
|||
|
|
这说明:
|
|||
|
|
|
|||
|
|
- 如果只按旧页面复刻,会丢失隐藏业务能力
|
|||
|
|
- 新插件应优先保留这些字段,只是可以分阶段决定首版是否全部开放 UI
|
|||
|
|
|
|||
|
|
#### 6.2.4 SQL 参考
|
|||
|
|
|
|||
|
|
来源:`old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
表:`ma_produce_process_step`
|
|||
|
|
|
|||
|
|
关键约束:
|
|||
|
|
|
|||
|
|
- 唯一索引:`uk_step_code(step_code, process_id, tenant_id, deleted_at)`
|
|||
|
|
- 常规索引通常包括:`tenant_id`、`process_id`、`status`、`sort`
|
|||
|
|
|
|||
|
|
#### 6.2.5 复杂度评估
|
|||
|
|
|
|||
|
|
- 复杂度:中
|
|||
|
|
- 依赖 `process`
|
|||
|
|
- 基础 CRUD 不复杂,但完整业务字段不应忽略
|
|||
|
|
|
|||
|
|
#### 6.2.6 新插件建议
|
|||
|
|
|
|||
|
|
模块名建议:`process-step`
|
|||
|
|
|
|||
|
|
建议分两阶段:
|
|||
|
|
|
|||
|
|
第一阶段:
|
|||
|
|
|
|||
|
|
- 工序下拉
|
|||
|
|
- 步骤编码/名称
|
|||
|
|
- 排序/状态/描述
|
|||
|
|
|
|||
|
|
第二阶段:
|
|||
|
|
|
|||
|
|
- 前置步骤配置
|
|||
|
|
- 重复扫码控制
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 6.3 步骤状态 `step-status`
|
|||
|
|
|
|||
|
|
#### 6.3.1 旧前端参考
|
|||
|
|
|
|||
|
|
目录:`old/web/src/views/produce/step-status`
|
|||
|
|
|
|||
|
|
查询字段:
|
|||
|
|
|
|||
|
|
- `step_id`
|
|||
|
|
- `LIKE_status_code`
|
|||
|
|
- `LIKE_status_name`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
列表字段:
|
|||
|
|
|
|||
|
|
- `step_id`(显示步骤名称)
|
|||
|
|
- `status_code`
|
|||
|
|
- `status_name`
|
|||
|
|
- `is_initial`
|
|||
|
|
- `is_final`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `created_date`
|
|||
|
|
|
|||
|
|
表单字段:
|
|||
|
|
|
|||
|
|
- `step_id`
|
|||
|
|
- `status_code`
|
|||
|
|
- `status_name`
|
|||
|
|
- `is_initial`
|
|||
|
|
- `is_final`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `description`
|
|||
|
|
|
|||
|
|
#### 6.3.2 旧后端模型字段
|
|||
|
|
|
|||
|
|
模型:`old/server/app/common/model/produce/ProduceStepStatus.php`
|
|||
|
|
|
|||
|
|
真实字段:
|
|||
|
|
|
|||
|
|
- `id`
|
|||
|
|
- `tenant_id`
|
|||
|
|
- `step_id`
|
|||
|
|
- `status_code`
|
|||
|
|
- `status_name`
|
|||
|
|
- `is_initial`
|
|||
|
|
- `is_final`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `created_by`
|
|||
|
|
- `updated_by`
|
|||
|
|
- `created_at`
|
|||
|
|
- `updated_at`
|
|||
|
|
- `deleted_at`
|
|||
|
|
|
|||
|
|
关系:
|
|||
|
|
|
|||
|
|
- `step()` -> `belongsTo(ProduceProcessStep::class)`
|
|||
|
|
|
|||
|
|
#### 6.3.3 SQL 参考
|
|||
|
|
|
|||
|
|
来源:`old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
表:`ma_produce_step_status`
|
|||
|
|
|
|||
|
|
典型业务含义:
|
|||
|
|
|
|||
|
|
- `is_initial`:步骤初始状态
|
|||
|
|
- `is_final`:步骤终态
|
|||
|
|
|
|||
|
|
这是状态机基础数据,不应简化掉。
|
|||
|
|
|
|||
|
|
#### 6.3.4 复杂度评估
|
|||
|
|
|
|||
|
|
- 复杂度:中
|
|||
|
|
- 依赖 `process-step`
|
|||
|
|
- 是状态转换模块的基础配置表
|
|||
|
|
|
|||
|
|
#### 6.3.5 新插件建议
|
|||
|
|
|
|||
|
|
模块名建议:`step-status`
|
|||
|
|
|
|||
|
|
建议保留:
|
|||
|
|
|
|||
|
|
- 所属步骤联动下拉
|
|||
|
|
- 初始/终态布尔字段
|
|||
|
|
- 基础启停状态
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 6.4 步骤关系 `step-relation`
|
|||
|
|
|
|||
|
|
#### 6.4.1 旧前端参考
|
|||
|
|
|
|||
|
|
目录:`old/web/src/views/produce/step-relation`
|
|||
|
|
|
|||
|
|
查询字段:
|
|||
|
|
|
|||
|
|
- `from_step_id`
|
|||
|
|
- `to_step_id`
|
|||
|
|
- `relation_type`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
列表字段:
|
|||
|
|
|
|||
|
|
- `from_step_id`(显示源步骤名称)
|
|||
|
|
- `to_step_id`(显示目标步骤名称)
|
|||
|
|
- `relation_type`
|
|||
|
|
- `priority`
|
|||
|
|
- `flow_condition`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `created_date`
|
|||
|
|
|
|||
|
|
表单字段:
|
|||
|
|
|
|||
|
|
- `from_step_id`
|
|||
|
|
- `to_step_id`
|
|||
|
|
- `relation_type`
|
|||
|
|
- `priority`
|
|||
|
|
- `flow_condition`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `description`
|
|||
|
|
|
|||
|
|
关系类型枚举:
|
|||
|
|
|
|||
|
|
- `normal` 正常流转
|
|||
|
|
- `exception` 异常流转
|
|||
|
|
|
|||
|
|
#### 6.4.2 旧后端模型 / DAO 参考
|
|||
|
|
|
|||
|
|
模型:`ProduceStepRelation`
|
|||
|
|
|
|||
|
|
真实表:`produce_step_relation`
|
|||
|
|
|
|||
|
|
DAO:`ProduceStepRelationDao`
|
|||
|
|
|
|||
|
|
体现出的真实业务能力:
|
|||
|
|
|
|||
|
|
- 支持按 `from_step_id` / `to_step_id` / `relation_type` 搜索
|
|||
|
|
- 支持按 `priority asc, sort asc` 排序
|
|||
|
|
- 提供 `getPreviousSteps(int $currentStepId)` 能力
|
|||
|
|
|
|||
|
|
这说明该模块不仅是配置关系,还直接用于生产流转路径判断。
|
|||
|
|
|
|||
|
|
#### 6.4.3 SQL 参考
|
|||
|
|
|
|||
|
|
来源:`old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
表:`ma_produce_step_relation`
|
|||
|
|
|
|||
|
|
真实字段:
|
|||
|
|
|
|||
|
|
- `from_step_id`
|
|||
|
|
- `to_step_id`
|
|||
|
|
- `relation_type`
|
|||
|
|
- `flow_condition`(JSON 文本)
|
|||
|
|
- `priority`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
#### 6.4.4 复杂度评估
|
|||
|
|
|
|||
|
|
- 复杂度:中偏高
|
|||
|
|
- 核心复杂点在 `flow_condition`
|
|||
|
|
- 仍可标准 CRUD 化
|
|||
|
|
|
|||
|
|
#### 6.4.5 新插件建议
|
|||
|
|
|
|||
|
|
模块名建议:`step-relation`
|
|||
|
|
|
|||
|
|
前端首版可先:
|
|||
|
|
|
|||
|
|
- 使用多行文本录入 JSON
|
|||
|
|
- 列表中直接字符串展示
|
|||
|
|
|
|||
|
|
后续增强:
|
|||
|
|
|
|||
|
|
- JSON 校验
|
|||
|
|
- 条件构造器 UI
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 6.5 状态转换 `status-transition`
|
|||
|
|
|
|||
|
|
#### 6.5.1 旧前端参考
|
|||
|
|
|
|||
|
|
目录:`old/web/src/views/produce/status-transition`
|
|||
|
|
|
|||
|
|
查询字段:
|
|||
|
|
|
|||
|
|
- `step_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
列表字段:
|
|||
|
|
|
|||
|
|
- `step_id`
|
|||
|
|
- `from_status_id`
|
|||
|
|
- `to_status_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `transition_type`
|
|||
|
|
- `auto_trigger`
|
|||
|
|
- `priority`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `created_date`
|
|||
|
|
|
|||
|
|
表单字段:
|
|||
|
|
|
|||
|
|
- `step_id`
|
|||
|
|
- `from_status_id`
|
|||
|
|
- `to_status_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `transition_type`
|
|||
|
|
- `side_effect_type`
|
|||
|
|
- `side_effect_config`
|
|||
|
|
- `auto_trigger`
|
|||
|
|
- `priority`
|
|||
|
|
- `event_config`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
- `description`
|
|||
|
|
|
|||
|
|
触发事件枚举:
|
|||
|
|
|
|||
|
|
- `next_step_scan`
|
|||
|
|
- `scan_trigger`
|
|||
|
|
- `exception_trigger`
|
|||
|
|
- `manual_trigger`
|
|||
|
|
- `timer_trigger`
|
|||
|
|
- `complete_trigger`
|
|||
|
|
|
|||
|
|
转换类型枚举:
|
|||
|
|
|
|||
|
|
- `primary`
|
|||
|
|
- `side_effect`
|
|||
|
|
|
|||
|
|
副作用类型枚举:
|
|||
|
|
|
|||
|
|
- `log`
|
|||
|
|
- `notify`
|
|||
|
|
- `update_field`
|
|||
|
|
- `trigger_event`
|
|||
|
|
|
|||
|
|
#### 6.5.2 旧后端模型 / DAO 参考
|
|||
|
|
|
|||
|
|
模型:`ProduceStatusTransition`
|
|||
|
|
|
|||
|
|
真实字段:
|
|||
|
|
|
|||
|
|
- `step_id`
|
|||
|
|
- `from_status_id`
|
|||
|
|
- `to_status_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `event_config`
|
|||
|
|
- `auto_trigger`
|
|||
|
|
- `priority`
|
|||
|
|
- `transition_type`
|
|||
|
|
- `side_effect_type`
|
|||
|
|
- `side_effect_config`
|
|||
|
|
- `description`
|
|||
|
|
- `sort`
|
|||
|
|
- `status`
|
|||
|
|
|
|||
|
|
关系:
|
|||
|
|
|
|||
|
|
- `step()`
|
|||
|
|
- `fromStatus()`
|
|||
|
|
- `toStatus()`
|
|||
|
|
|
|||
|
|
JSON 处理:
|
|||
|
|
|
|||
|
|
- `event_config` 自动 JSON 编解码
|
|||
|
|
- `side_effect_config` 自动 JSON 编解码
|
|||
|
|
|
|||
|
|
DAO 体现出的业务能力:
|
|||
|
|
|
|||
|
|
- `getAutoTransitionsByStep(stepId, fromStatusId)`
|
|||
|
|
- `getAutoTransitions(stepId, fromStatusId, triggerEvent)`
|
|||
|
|
|
|||
|
|
排序规则:
|
|||
|
|
|
|||
|
|
- `priority desc` / `sort asc`
|
|||
|
|
|
|||
|
|
说明:
|
|||
|
|
|
|||
|
|
- 该模块不只是配置表,而是生产执行流程中的规则引擎核心
|
|||
|
|
|
|||
|
|
#### 6.5.3 SQL 参考
|
|||
|
|
|
|||
|
|
来源:`old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
表:`ma_produce_status_transition`
|
|||
|
|
|
|||
|
|
真实字段里已经明确包含:
|
|||
|
|
|
|||
|
|
- `transition_type`
|
|||
|
|
- `side_effect_type`
|
|||
|
|
- `side_effect_config`
|
|||
|
|
- `event_config`
|
|||
|
|
|
|||
|
|
#### 6.5.4 复杂度评估
|
|||
|
|
|
|||
|
|
- 复杂度:高
|
|||
|
|
- 是 6 个模块里最复杂的配置模块
|
|||
|
|
|
|||
|
|
复杂来源:
|
|||
|
|
|
|||
|
|
- 依赖步骤与步骤状态双层联动
|
|||
|
|
- 表单中有条件显示字段
|
|||
|
|
- 存在 JSON 配置字段
|
|||
|
|
- 影响实际状态机执行逻辑
|
|||
|
|
|
|||
|
|
#### 6.5.5 新插件建议
|
|||
|
|
|
|||
|
|
模块名建议:`status-transition`
|
|||
|
|
|
|||
|
|
建议实现分两层:
|
|||
|
|
|
|||
|
|
第一层:
|
|||
|
|
|
|||
|
|
- 完整字段 CRUD
|
|||
|
|
- 文本方式维护 JSON
|
|||
|
|
- 步骤切换后刷新状态选项
|
|||
|
|
|
|||
|
|
第二层:
|
|||
|
|
|
|||
|
|
- JSON 结构校验
|
|||
|
|
- 副作用配置器
|
|||
|
|
- 事件配置器
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 6.6 转换日志 `transition-log`
|
|||
|
|
|
|||
|
|
#### 6.6.1 旧前端参考
|
|||
|
|
|
|||
|
|
目录:`old/web/src/views/produce/transition-log`
|
|||
|
|
|
|||
|
|
查询字段:
|
|||
|
|
|
|||
|
|
- `LIKE_work_order_no`
|
|||
|
|
- `step_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `LIKE_trigger_user`
|
|||
|
|
- `is_success`
|
|||
|
|
|
|||
|
|
列表字段:
|
|||
|
|
|
|||
|
|
- `work_order_no`
|
|||
|
|
- `step_id`
|
|||
|
|
- `from_status_id`
|
|||
|
|
- `to_status_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `trigger_user`
|
|||
|
|
- `is_auto`
|
|||
|
|
- `is_success`
|
|||
|
|
- `duration`
|
|||
|
|
- `error_message`
|
|||
|
|
- `created_date`
|
|||
|
|
|
|||
|
|
操作:
|
|||
|
|
|
|||
|
|
- 只有 `detail`
|
|||
|
|
|
|||
|
|
#### 6.6.2 旧后端模型 / Service 参考
|
|||
|
|
|
|||
|
|
模型:`ProduceTransitionLog`
|
|||
|
|
|
|||
|
|
真实字段:
|
|||
|
|
|
|||
|
|
- `work_order_id`
|
|||
|
|
- `work_order_no`
|
|||
|
|
- `step_id`
|
|||
|
|
- `transition_id`
|
|||
|
|
- `from_status_id`
|
|||
|
|
- `to_status_id`
|
|||
|
|
- `trigger_event`
|
|||
|
|
- `trigger_data`
|
|||
|
|
- `trigger_user`
|
|||
|
|
- `trigger_ip`
|
|||
|
|
- `is_auto`
|
|||
|
|
- `is_success`
|
|||
|
|
- `error_message`
|
|||
|
|
- `duration`
|
|||
|
|
- `remark`
|
|||
|
|
- `created_by`
|
|||
|
|
- `created_at`
|
|||
|
|
|
|||
|
|
特征:
|
|||
|
|
|
|||
|
|
- `UPDATED_AT = null`
|
|||
|
|
- `trigger_data` 自动 JSON 解码
|
|||
|
|
- 服务 `read()` 会加载:
|
|||
|
|
- `step`
|
|||
|
|
- `transition`
|
|||
|
|
- `fromStatus`
|
|||
|
|
- `toStatus`
|
|||
|
|
|
|||
|
|
旧路由里还存在额外查询接口:
|
|||
|
|
|
|||
|
|
- `work-order-history`
|
|||
|
|
- `step-statistics`
|
|||
|
|
|
|||
|
|
说明:
|
|||
|
|
|
|||
|
|
- 该模块是典型只读日志模块
|
|||
|
|
- 不适合做标准新增/编辑/删除页面
|
|||
|
|
|
|||
|
|
#### 6.6.3 SQL 参考
|
|||
|
|
|
|||
|
|
来源:`old/server/scripts/sql/install.sql`
|
|||
|
|
|
|||
|
|
表:`ma_produce_transition_log`
|
|||
|
|
|
|||
|
|
关键字段:
|
|||
|
|
|
|||
|
|
- `trigger_data` JSON
|
|||
|
|
- `trigger_ip`
|
|||
|
|
- `duration`
|
|||
|
|
- `error_message`
|
|||
|
|
- `remark`
|
|||
|
|
|
|||
|
|
#### 6.6.4 复杂度评估
|
|||
|
|
|
|||
|
|
- 复杂度:中
|
|||
|
|
- 不是 CRUD 复杂,而是业务只读特征与统计扩展
|
|||
|
|
|
|||
|
|
#### 6.6.5 新插件建议
|
|||
|
|
|
|||
|
|
模块名建议:`transition-log`
|
|||
|
|
|
|||
|
|
实现建议:
|
|||
|
|
|
|||
|
|
- 列表页 + 详情页
|
|||
|
|
- 默认只读
|
|||
|
|
- 不开放新增/编辑/删除
|
|||
|
|
- 后续可补:
|
|||
|
|
- 工单历史
|
|||
|
|
- 步骤统计
|
|||
|
|
|
|||
|
|
## 7. 推荐复刻顺序
|
|||
|
|
|
|||
|
|
必须按依赖顺序推进:
|
|||
|
|
|
|||
|
|
1. `process`
|
|||
|
|
2. `process-step`
|
|||
|
|
3. `step-status`
|
|||
|
|
4. `step-relation`
|
|||
|
|
5. `status-transition`
|
|||
|
|
6. `transition-log`
|
|||
|
|
|
|||
|
|
推荐分阶段:
|
|||
|
|
|
|||
|
|
### 第一阶段:基础主数据
|
|||
|
|
|
|||
|
|
- `process`
|
|||
|
|
- `process-step`
|
|||
|
|
- `step-status`
|
|||
|
|
|
|||
|
|
### 第二阶段:流程规则
|
|||
|
|
|
|||
|
|
- `step-relation`
|
|||
|
|
- `status-transition`
|
|||
|
|
|
|||
|
|
### 第三阶段:只读日志
|
|||
|
|
|
|||
|
|
- `transition-log`
|
|||
|
|
|
|||
|
|
## 8. 新插件目录落点建议
|
|||
|
|
|
|||
|
|
### 8.1 后端
|
|||
|
|
|
|||
|
|
建议新增如下结构:
|
|||
|
|
|
|||
|
|
- `backend/plugin/produce/app/model/Process.php` 等
|
|||
|
|
- `backend/plugin/produce/app/dao/*`
|
|||
|
|
- `backend/plugin/produce/app/service/admin/*`
|
|||
|
|
- `backend/plugin/produce/app/validate/*`
|
|||
|
|
- `backend/plugin/produce/app/schema/request/*`
|
|||
|
|
- `backend/plugin/produce/app/schema/response/*`
|
|||
|
|
- `backend/plugin/produce/app/adminapi/controller/*`
|
|||
|
|
- `backend/plugin/produce/resource/database/migrations/*`
|
|||
|
|
|
|||
|
|
建议 6 模块一一对应生成:
|
|||
|
|
|
|||
|
|
- `Process`
|
|||
|
|
- `ProcessStep`
|
|||
|
|
- `StepStatus`
|
|||
|
|
- `StepRelation`
|
|||
|
|
- `StatusTransition`
|
|||
|
|
- `TransitionLog`
|
|||
|
|
|
|||
|
|
### 8.2 前端模板源
|
|||
|
|
|
|||
|
|
正式维护目录必须放在:
|
|||
|
|
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/api/index.ts`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/process/index.vue`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/process/schemas/index.tsx`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/process-step/index.vue`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/process-step/schemas/index.tsx`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/step-status/index.vue`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/step-status/schemas/index.tsx`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/step-relation/index.vue`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/step-relation/schemas/index.tsx`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/status-transition/index.vue`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/status-transition/schemas/index.tsx`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/transition-log/index.vue`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/views/produce/transition-log/schemas/index.tsx`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/lang/zh-cn/zh.json`
|
|||
|
|
- `backend/plugin/produce/resource/template/admin/lang/en/en.json`
|
|||
|
|
|
|||
|
|
安装后再复制到:
|
|||
|
|
|
|||
|
|
- `frontend/admin/src/apps/produce/*`
|
|||
|
|
|
|||
|
|
## 9. 菜单与权限建议
|
|||
|
|
|
|||
|
|
当前插件菜单 `backend/plugin/produce/resource/menu/admin.php` 只有一个示例菜单项,不能满足这 6 个模块。
|
|||
|
|
|
|||
|
|
建议调整为:
|
|||
|
|
|
|||
|
|
- 根菜单:`生产管理`
|
|||
|
|
- 子菜单:
|
|||
|
|
- `工序管理`
|
|||
|
|
- `工序步骤`
|
|||
|
|
- `步骤状态`
|
|||
|
|
- `步骤关系`
|
|||
|
|
- `状态转换`
|
|||
|
|
- `转换日志`
|
|||
|
|
|
|||
|
|
权限码建议统一前缀:
|
|||
|
|
|
|||
|
|
- `produce:process:*`
|
|||
|
|
- `produce:process-step:*`
|
|||
|
|
- `produce:step-status:*`
|
|||
|
|
- `produce:step-relation:*`
|
|||
|
|
- `produce:status-transition:*`
|
|||
|
|
- `produce:transition-log:*`
|
|||
|
|
|
|||
|
|
注意:
|
|||
|
|
|
|||
|
|
- 日志模块建议只保留 `list/detail` 等只读权限
|
|||
|
|
- 不建议给 `create/edit/delete`
|
|||
|
|
|
|||
|
|
## 10. 接口风格迁移建议
|
|||
|
|
|
|||
|
|
旧项目接口风格:
|
|||
|
|
|
|||
|
|
- `/admin/produce/process/list`
|
|||
|
|
- `/admin/produce/process/get/{id}`
|
|||
|
|
- `/admin/produce/process/create`
|
|||
|
|
- `/admin/produce/process/update/{id}`
|
|||
|
|
- `/admin/produce/process/delete/{id}`
|
|||
|
|
|
|||
|
|
新插件建议按当前项目标准 CRUD 控制器收敛,避免继续沿用旧式 `list/get/create/update/delete` 命名。
|
|||
|
|
|
|||
|
|
建议资源路径:
|
|||
|
|
|
|||
|
|
- `/adminapi/produce/process`
|
|||
|
|
- `/adminapi/produce/process-step`
|
|||
|
|
- `/adminapi/produce/step-status`
|
|||
|
|
- `/adminapi/produce/step-relation`
|
|||
|
|
- `/adminapi/produce/status-transition`
|
|||
|
|
- `/adminapi/produce/transition-log`
|
|||
|
|
|
|||
|
|
附加只读接口可补:
|
|||
|
|
|
|||
|
|
- 下拉选项接口
|
|||
|
|
- 状态联动接口
|
|||
|
|
- 日志统计接口
|
|||
|
|
|
|||
|
|
## 11. 风险与注意事项
|
|||
|
|
|
|||
|
|
### 11.1 旧前端不等于真实后端能力
|
|||
|
|
|
|||
|
|
最典型的是 `process-step`:
|
|||
|
|
|
|||
|
|
旧页面未暴露:
|
|||
|
|
|
|||
|
|
- 前置步骤数组
|
|||
|
|
- 前置验证模式
|
|||
|
|
- 重复扫码控制
|
|||
|
|
|
|||
|
|
但后端模型与 SQL 已经存在这些字段。
|
|||
|
|
|
|||
|
|
结论:
|
|||
|
|
|
|||
|
|
- 不能只按旧页面抄字段
|
|||
|
|
- 应优先以 SQL + Model 为准
|
|||
|
|
|
|||
|
|
### 11.2 `status-transition` 是规则引擎核心
|
|||
|
|
|
|||
|
|
该模块不是普通配置表,DAO 已体现真实执行用途:
|
|||
|
|
|
|||
|
|
- 获取自动转换规则
|
|||
|
|
- 按优先级执行
|
|||
|
|
- 依赖事件与状态
|
|||
|
|
|
|||
|
|
因此该模块开发时应把:
|
|||
|
|
|
|||
|
|
- 数据正确性
|
|||
|
|
- JSON 配置合法性
|
|||
|
|
- 联动逻辑
|
|||
|
|
|
|||
|
|
放在比页面美化更高的优先级。
|
|||
|
|
|
|||
|
|
### 11.3 `transition-log` 是只读模块
|
|||
|
|
|
|||
|
|
不要把它误做成标准增删改查。
|
|||
|
|
|
|||
|
|
推荐:
|
|||
|
|
|
|||
|
|
- 列表
|
|||
|
|
- 详情
|
|||
|
|
- 历史/统计扩展
|
|||
|
|
|
|||
|
|
### 11.4 迁移来源差异
|
|||
|
|
|
|||
|
|
旧项目这几张表的核心定义主要在 SQL 安装脚本,不在当前已检索到的 PHP migration 单文件中。
|
|||
|
|
|
|||
|
|
因此新插件开发时:
|
|||
|
|
|
|||
|
|
- 迁移文件需要重新按当前项目规范补建
|
|||
|
|
- 不能直接依赖旧 `scripts/migrations` 目录复用
|
|||
|
|
- 但可以严格参考 `install.sql` 的字段与索引
|
|||
|
|
|
|||
|
|
## 12. 推荐实施计划
|
|||
|
|
|
|||
|
|
### 12.1 第一批落地
|
|||
|
|
|
|||
|
|
先完成:
|
|||
|
|
|
|||
|
|
1. `process`
|
|||
|
|
2. `process-step`
|
|||
|
|
3. `step-status`
|
|||
|
|
|
|||
|
|
交付标准:
|
|||
|
|
|
|||
|
|
- 后端 CRUD 可运行
|
|||
|
|
- 菜单可访问
|
|||
|
|
- 模板源前端完成
|
|||
|
|
- 运行目录联调通过
|
|||
|
|
|
|||
|
|
### 12.2 第二批落地
|
|||
|
|
|
|||
|
|
再完成:
|
|||
|
|
|
|||
|
|
4. `step-relation`
|
|||
|
|
5. `status-transition`
|
|||
|
|
|
|||
|
|
重点:
|
|||
|
|
|
|||
|
|
- 规则字段
|
|||
|
|
- JSON 输入
|
|||
|
|
- 状态联动
|
|||
|
|
|
|||
|
|
### 12.3 第三批落地
|
|||
|
|
|
|||
|
|
最后完成:
|
|||
|
|
|
|||
|
|
6. `transition-log`
|
|||
|
|
|
|||
|
|
重点:
|
|||
|
|
|
|||
|
|
- 列表
|
|||
|
|
- 详情
|
|||
|
|
- 历史/统计接口是否保留
|
|||
|
|
|
|||
|
|
## 13. 待确认事项
|
|||
|
|
|
|||
|
|
正式开始开发前,建议你确认以下内容:
|
|||
|
|
|
|||
|
|
1. 插件显示名称是否确定为“生产管理”
|
|||
|
|
2. 这 6 个模块是否全部进入一期
|
|||
|
|
3. `process-step` 的隐藏字段是否一期就开放 UI
|
|||
|
|
4. `status-transition` 的 JSON 字段是否先用文本方式维护
|
|||
|
|
5. `transition-log` 是否确认只读
|
|||
|
|
6. 是否要把旧路由里的 `select`、`statistics`、`work-order-history` 一并纳入一期
|
|||
|
|
7. 数据库主键是否统一按当前项目雪花 ID 规范重建,而不是继续使用旧 AUTO_INCREMENT 风格
|
|||
|
|
|
|||
|
|
## 14. 结论
|
|||
|
|
|
|||
|
|
结论如下:
|
|||
|
|
|
|||
|
|
1. `produce` 插件当前只是骨架,无法直接承接旧功能。
|
|||
|
|
2. 旧项目这 6 个模块具备完整前后端参考,可复刻。
|
|||
|
|
3. 复刻时应以 `install.sql + Model + DAO/Service` 为准,不能只照搬旧页面字段。
|
|||
|
|
4. 最推荐的首批实现是:
|
|||
|
|
- `process`
|
|||
|
|
- `process-step`
|
|||
|
|
- `step-status`
|
|||
|
|
5. `status-transition` 是业务核心,复杂度最高,应在基础模块稳定后实现。
|
|||
|
|
6. `transition-log` 应按只读日志模块实现,而不是标准 CRUD。
|