# 物料供应商、制造商与重复检查实施计划 > **执行说明:** 按任务逐项实施;本次在当前会话中直接执行。 **目标:** 为物料新增/编辑及 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 文档。 ## 完成检查 - [ ] 检查差异,确认工作区既有的无关修改仍保留。 - [ ] 不运行测试或构建,遵循本会话要求。