21 KiB
Produce 插件六模块复刻方案
1. 文档目的
本文档用于梳理 backend/plugin/produce 插件需要优先复刻的 6 个模块,并结合旧项目的前端、后端、SQL 安装脚本,整理出一份可以直接执行的开发方案。
目标模块:
- 工序管理
process - 工序步骤
process-step - 步骤状态
step-status - 步骤关系
step-relation - 状态转换
status-transition - 转换日志
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.phpconfig/app.phpconfig/info.phpconfig/route.phpresource/menu/admin.phpresource/template/admin/apiresource/template/admin/views/produce/indexresource/template/admin/lang
2.2 缺失结构
以下目录当前基本为空,尚不足以承载 6 个业务模块:
app/modelapp/daoapp/serviceapp/validateapp/schemaresource/database/migrations
结论:当前 produce 插件仍是示例骨架,复刻这 6 个模块时需要按插件标准完整补齐后端数据层、控制器、菜单、模板源前端。
3. 旧项目总体结构结论
3.1 旧前端页面模式
旧前端每个模块基本采用如下模式:
index.vuedata.tsmodules/form.vue
技术模式为:
VXE Grid- 手写查询表单
- Drawer Form
- 手写列表请求与弹窗逻辑
不适合直接复制到当前项目。当前插件应改造为:
BasicCrudschemas/index.tsxapi/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
因此本次字段与索引参考,优先以:
- SQL 安装脚本
- Model fillable / casts / relation
- DAO / Service 业务逻辑
- 旧前端页面字段
作为综合依据。
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 个模块存在清晰的业务依赖链:
processprocess-step依赖processstep-status依赖process-stepstep-relation依赖process-stepstatus-transition依赖:process-stepstep-status
transition-log依赖:process-stepstep-statusstatus-transition- 生产执行侧产生的数据
推荐开发顺序必须遵循该依赖链。
6. 六模块详细分析
6.1 工序管理 process
6.1.1 旧前端参考
目录:old/web/src/views/produce/process
查询字段:
LIKE_process_codeLIKE_process_namestatus
列表字段:
process_codeprocess_namedescriptionstep_countsortstatuscreated_date
表单字段:
process_codeprocess_namesortstatusdescription
6.1.2 旧后端模型字段
模型:old/server/app/common/model/produce/ProduceProcess.php
真实字段:
idtenant_idprocess_codeprocess_namedescriptionsortstatusstep_countcreated_byupdated_bycreated_atupdated_atdeleted_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_idLIKE_step_codeLIKE_step_namestatus
列表字段:
process_id(实际显示工序名称)step_codestep_namedescriptionsortstatuscreated_date
表单字段:
process_idstep_codestep_namesortstatusdescription
6.2.2 旧后端模型字段
模型:old/server/app/common/model/produce/ProduceProcessStep.php
真实字段:
idtenant_idprocess_idstep_codestep_namedescriptionsortstatusprerequisite_stepsprerequisite_modeprerequisite_require_finalallow_repeat_scanrepeat_scan_statusescreated_byupdated_bycreated_atupdated_atdeleted_at
casts:
prerequisite_steps=>arrayrepeat_scan_statuses=>arrayallow_repeat_scan=>integerprerequisite_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_idLIKE_status_codeLIKE_status_namestatus
列表字段:
step_id(显示步骤名称)status_codestatus_nameis_initialis_finaldescriptionsortstatuscreated_date
表单字段:
step_idstatus_codestatus_nameis_initialis_finalsortstatusdescription
6.3.2 旧后端模型字段
模型:old/server/app/common/model/produce/ProduceStepStatus.php
真实字段:
idtenant_idstep_idstatus_codestatus_nameis_initialis_finaldescriptionsortstatuscreated_byupdated_bycreated_atupdated_atdeleted_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_idto_step_idrelation_typestatus
列表字段:
from_step_id(显示源步骤名称)to_step_id(显示目标步骤名称)relation_typepriorityflow_conditiondescriptionsortstatuscreated_date
表单字段:
from_step_idto_step_idrelation_typepriorityflow_conditionsortstatusdescription
关系类型枚举:
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_idto_step_idrelation_typeflow_condition(JSON 文本)prioritydescriptionsortstatus
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_idtrigger_eventstatus
列表字段:
step_idfrom_status_idto_status_idtrigger_eventtransition_typeauto_triggerprioritydescriptionsortstatuscreated_date
表单字段:
step_idfrom_status_idto_status_idtrigger_eventtransition_typeside_effect_typeside_effect_configauto_triggerpriorityevent_configsortstatusdescription
触发事件枚举:
next_step_scanscan_triggerexception_triggermanual_triggertimer_triggercomplete_trigger
转换类型枚举:
primaryside_effect
副作用类型枚举:
lognotifyupdate_fieldtrigger_event
6.5.2 旧后端模型 / DAO 参考
模型:ProduceStatusTransition
真实字段:
step_idfrom_status_idto_status_idtrigger_eventevent_configauto_triggerprioritytransition_typeside_effect_typeside_effect_configdescriptionsortstatus
关系:
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_typeside_effect_typeside_effect_configevent_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_nostep_idtrigger_eventLIKE_trigger_useris_success
列表字段:
work_order_nostep_idfrom_status_idto_status_idtrigger_eventtrigger_useris_autois_successdurationerror_messagecreated_date
操作:
- 只有
detail
6.6.2 旧后端模型 / Service 参考
模型:ProduceTransitionLog
真实字段:
work_order_idwork_order_nostep_idtransition_idfrom_status_idto_status_idtrigger_eventtrigger_datatrigger_usertrigger_ipis_autois_successerror_messagedurationremarkcreated_bycreated_at
特征:
UPDATED_AT = nulltrigger_data自动 JSON 解码- 服务
read()会加载:steptransitionfromStatustoStatus
旧路由里还存在额外查询接口:
work-order-historystep-statistics
说明:
- 该模块是典型只读日志模块
- 不适合做标准新增/编辑/删除页面
6.6.3 SQL 参考
来源:old/server/scripts/sql/install.sql
表:ma_produce_transition_log
关键字段:
trigger_dataJSONtrigger_ipdurationerror_messageremark
6.6.4 复杂度评估
- 复杂度:中
- 不是 CRUD 复杂,而是业务只读特征与统计扩展
6.6.5 新插件建议
模块名建议:transition-log
实现建议:
- 列表页 + 详情页
- 默认只读
- 不开放新增/编辑/删除
- 后续可补:
- 工单历史
- 步骤统计
7. 推荐复刻顺序
必须按依赖顺序推进:
processprocess-stepstep-statusstep-relationstatus-transitiontransition-log
推荐分阶段:
第一阶段:基础主数据
processprocess-stepstep-status
第二阶段:流程规则
step-relationstatus-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 模块一一对应生成:
ProcessProcessStepStepStatusStepRelationStatusTransitionTransitionLog
8.2 前端模板源
正式维护目录必须放在:
backend/plugin/produce/resource/template/admin/api/index.tsbackend/plugin/produce/resource/template/admin/views/produce/process/index.vuebackend/plugin/produce/resource/template/admin/views/produce/process/schemas/index.tsxbackend/plugin/produce/resource/template/admin/views/produce/process-step/index.vuebackend/plugin/produce/resource/template/admin/views/produce/process-step/schemas/index.tsxbackend/plugin/produce/resource/template/admin/views/produce/step-status/index.vuebackend/plugin/produce/resource/template/admin/views/produce/step-status/schemas/index.tsxbackend/plugin/produce/resource/template/admin/views/produce/step-relation/index.vuebackend/plugin/produce/resource/template/admin/views/produce/step-relation/schemas/index.tsxbackend/plugin/produce/resource/template/admin/views/produce/status-transition/index.vuebackend/plugin/produce/resource/template/admin/views/produce/status-transition/schemas/index.tsxbackend/plugin/produce/resource/template/admin/views/produce/transition-log/index.vuebackend/plugin/produce/resource/template/admin/views/produce/transition-log/schemas/index.tsxbackend/plugin/produce/resource/template/admin/lang/zh-cn/zh.jsonbackend/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 第一批落地
先完成:
processprocess-stepstep-status
交付标准:
- 后端 CRUD 可运行
- 菜单可访问
- 模板源前端完成
- 运行目录联调通过
12.2 第二批落地
再完成:
step-relationstatus-transition
重点:
- 规则字段
- JSON 输入
- 状态联动
12.3 第三批落地
最后完成:
transition-log
重点:
- 列表
- 详情
- 历史/统计接口是否保留
13. 待确认事项
正式开始开发前,建议你确认以下内容:
- 插件显示名称是否确定为“生产管理”
- 这 6 个模块是否全部进入一期
process-step的隐藏字段是否一期就开放 UIstatus-transition的 JSON 字段是否先用文本方式维护transition-log是否确认只读- 是否要把旧路由里的
select、statistics、work-order-history一并纳入一期 - 数据库主键是否统一按当前项目雪花 ID 规范重建,而不是继续使用旧 AUTO_INCREMENT 风格
14. 结论
结论如下:
produce插件当前只是骨架,无法直接承接旧功能。- 旧项目这 6 个模块具备完整前后端参考,可复刻。
- 复刻时应以
install.sql + Model + DAO/Service为准,不能只照搬旧页面字段。 - 最推荐的首批实现是:
processprocess-stepstep-status
status-transition是业务核心,复杂度最高,应在基础模块稳定后实现。transition-log应按只读日志模块实现,而不是标准 CRUD。