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

81 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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