material_manage_system/docs/superpowers/plans/2026-10-13-material-duplicate-check.md

3.7 KiB
Raw Blame History

物料供应商、制造商与重复检查实施计划

执行说明: 按任务逐项实施;本次在当前会话中直接执行。

目标: 为物料新增/编辑及 Excel 导入增加可选供应商和制造商,并检查物料名称、规格、单位、供应商、制造商五项完全相同的记录。

实现方式: 复用 materials.supplier_id 和 materials.manufacturer_id 关联当前公司的伙伴记录。扩展物料请求、读取和保存流程,并在服务端校验伙伴所属公司和角色。单条新增发现重复时由界面提示确认;批量导入发现数据库或同一文件中的重复行时,按现有整批校验规则返回行号并取消整批写入。

技术栈: Go、MySQL、Vue 3、Element Plus、Excelize。

需求依据: 2026-10-13 会话中用户确认的规则和字段范围。

全局约束

  • 供应商和制造商均为选填。
  • 仅当名称、规格、单位、供应商、制造商全部相同时,判定为重复。
  • 伙伴必须属于当前公司,并具有对应的供应商或制造商身份。
  • 保留工作区中已有的未提交修改,不覆盖无关内容。
  • 按本会话要求,不新增或运行测试。

任务一:保存并返回物料伙伴关联

文件:

  • 修改:internal/model/model.go
  • 修改:internal/service/material.go
  • 修改:internal/repository/material.go
  • 修改:internal/handler/api.go

接口约定:

  • 物料 JSON 使用可空的 supplier_id 和 manufacturer_id 伙伴 ID。

  • 新增与更新时,服务端校验伙伴属于当前公司且具备相应身份。

  • 在物料实体和新增/更新请求中加入两个可选 ID。

  • 在新增、查询、列表、更新 SQL 中读写数据库已有的两个字段。

  • 增加公司范围和伙伴身份校验,并将无效选择作为请求错误返回。

任务二:完善单条物料表单和重复提示

文件:

  • 修改:frontend/src/views/materialForm.js
  • 修改:frontend/src/views/Materials.vue
  • 修改:frontend/src/api/materials.js
  • 修改:frontend/src/api/partners.js
  • 修改:internal/repository/material.go
  • 修改:internal/service/material.go
  • 修改:internal/handler/api.go

接口约定:

  • 判重请求传入名称、规格、单位及供应商/制造商 ID,返回当前公司的匹配物料。

  • 新增表单显示匹配记录,并允许用户取消或确认继续新增。

  • 增加供应商、制造商选择框,从当前公司按伙伴身份加载选项。

  • 增加重复检查接口,并按确认的五项字段匹配。

  • 新增物料前检查重复项;命中时展示确认提示。

任务三:完善 Excel 模板和批量重复校验

文件:

  • 修改:internal/model/material_import.go
  • 修改:internal/service/material_import_excel.go
  • 修改:internal/service/material_import.go
  • 修改:internal/repository/material.go
  • 修改:frontend/src/components/business/MaterialImportResult.vue
  • 修改:docs/api.md

接口约定:

  • 模板中的 供应商、制造商 列均为选填;按当前公司伙伴名称或编码解析。

  • 与已有物料或本文件较早行完全重复时,返回对应行号;任一行出错则整批不写入。

  • 更新模板表头、填写说明、示例行、解析器和错误数据。

  • 将伙伴名称或编码解析为当前公司的伙伴 ID,并报告无效或身份不符的输入。

  • 批量读取已有物料判重,并检查本文件内前序行。

  • 更新错误明细页面和 API 文档。

完成检查

  • 检查差异,确认工作区既有的无关修改仍保留。
  • 不运行测试或构建,遵循本会话要求。