Files
MrleeAdmin/backend/plugin/produce/produce-replication-plan.md
T

21 KiB
Raw Blame History

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 第二批落地

再完成:

  1. step-relation
  2. status-transition

重点:

  • 规则字段
  • JSON 输入
  • 状态联动

12.3 第三批落地

最后完成:

  1. 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。