Admin:档口入库码支持勾选部分记录匹配 #235

Open
opened 2026-08-15 09:33:35 +08:00 by ila · 2 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#224
  • 阶段:阶段 2:数据导入与确定性匹配

要解决什么

档口入库码导入后,当前“匹配顺运宝商品”只按业务日期处理当日全部可重匹配记录。列表复选框只允许选择“可回写”记录,采购员不能勾选部分导入记录先匹配;状态筛选、关键词和当前页也不会限制实际匹配范围,容易误解操作范围。

做什么 / 不做什么

  • 做:允许勾选当前页部分记录,按钮改为“匹配已选 N 条”,未勾选时禁用;服务端只更新选中且状态允许重匹配的记录。
  • 做:同一订单的未选记录仍作为匹配上下文,保留已规划明细占用,避免同一个顺运宝商品被重复分配。
  • 做:保留“回写已选”现有入口,并按动作分别统计可匹配、可回写的选中数量。
  • 不做:不增加“匹配全部”等其他按钮,不增加跨页选择,不修改数据库结构,不改变顺运宝远端回写流程。

怎么做

  • admin/templates/inner_code/list.html:复选框表达通用“选择记录”,按状态声明匹配/回写动作能力;匹配按钮提交选中记录并显示选中数量。
  • admin/static/js/app.js:按动作统计选中数量,在提交匹配或回写前只复制该动作可处理的 ID;提供提交中的禁用反馈。
  • admin/handler/web/inner_code.go:解析、去重并校验选中 ID;空选择不执行匹配。
  • admin/service/inner_code_page.go:分别暴露 CanMatch 与 CanApply。
  • admin/service/inner_code_match.go、admin/repository/inner_code.go:按选中 ID 加载目标,读取同订单上下文并预留未选记录已占用的远端明细,只保存选中记录的规划结果。
  • 补充页面、服务和匹配测试;不新增迁移。

验收标准

  • 待匹配、可回写、已跳过、失败记录可勾选用于匹配;其他状态不可用于匹配。
  • “匹配已选 N 条”准确显示可匹配选中数,未选中时禁用,提交空 ID 时服务端不执行匹配。
  • 表头全选仅选择当前页可操作记录,不存在隐式“匹配当日全部”。
  • 服务端只修改选中记录,未选记录状态和规划结果保持不变。
  • 分批匹配同一订单时,不会把已被未选记录占用的顺运宝明细再次分配。
  • “回写已选”只提交已选且当前可回写的记录,原有安全回写、需核对和单次请求门禁不变。
  • 固定 Go 1.23.0 下 go build ./...、go test ./... -count=1 和 go vet ./... 通过。

怎么验证

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go build ./...
go test ./... -count=1
go vet ./...
Remove-Item Env:GOTOOLCHAIN

浏览器在 1366×768 下验证:导入多条记录后只勾选部分进行匹配,确认未选记录不变;再分批匹配同一订单,确认远端明细不会重复占用。

风险和回退

  • 风险:只按选中行计算会忽略同订单其他记录,造成远端明细重复占用;实现必须加载同订单上下文并预留已有 detail_id。
  • 风险:勾选后记录状态并发变化;保存时继续使用状态条件更新,任一目标状态变化则整体不保存。
  • 回退:本任务无数据库迁移,可回退对应代码与模板提交;既有规划和回写审计数据不受影响。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#224 - 阶段:阶段 2:数据导入与确定性匹配 ## 要解决什么 档口入库码导入后,当前“匹配顺运宝商品”只按业务日期处理当日全部可重匹配记录。列表复选框只允许选择“可回写”记录,采购员不能勾选部分导入记录先匹配;状态筛选、关键词和当前页也不会限制实际匹配范围,容易误解操作范围。 ## 做什么 / 不做什么 - 做:允许勾选当前页部分记录,按钮改为“匹配已选 N 条”,未勾选时禁用;服务端只更新选中且状态允许重匹配的记录。 - 做:同一订单的未选记录仍作为匹配上下文,保留已规划明细占用,避免同一个顺运宝商品被重复分配。 - 做:保留“回写已选”现有入口,并按动作分别统计可匹配、可回写的选中数量。 - 不做:不增加“匹配全部”等其他按钮,不增加跨页选择,不修改数据库结构,不改变顺运宝远端回写流程。 ## 怎么做 - `admin/templates/inner_code/list.html`:复选框表达通用“选择记录”,按状态声明匹配/回写动作能力;匹配按钮提交选中记录并显示选中数量。 - `admin/static/js/app.js`:按动作统计选中数量,在提交匹配或回写前只复制该动作可处理的 ID;提供提交中的禁用反馈。 - `admin/handler/web/inner_code.go`:解析、去重并校验选中 ID;空选择不执行匹配。 - `admin/service/inner_code_page.go`:分别暴露 `CanMatch` 与 `CanApply`。 - `admin/service/inner_code_match.go`、`admin/repository/inner_code.go`:按选中 ID 加载目标,读取同订单上下文并预留未选记录已占用的远端明细,只保存选中记录的规划结果。 - 补充页面、服务和匹配测试;不新增迁移。 ## 验收标准 - [ ] 待匹配、可回写、已跳过、失败记录可勾选用于匹配;其他状态不可用于匹配。 - [ ] “匹配已选 N 条”准确显示可匹配选中数,未选中时禁用,提交空 ID 时服务端不执行匹配。 - [ ] 表头全选仅选择当前页可操作记录,不存在隐式“匹配当日全部”。 - [ ] 服务端只修改选中记录,未选记录状态和规划结果保持不变。 - [ ] 分批匹配同一订单时,不会把已被未选记录占用的顺运宝明细再次分配。 - [ ] “回写已选”只提交已选且当前可回写的记录,原有安全回写、需核对和单次请求门禁不变。 - [ ] 固定 Go 1.23.0 下 `go build ./...`、`go test ./... -count=1` 和 `go vet ./...` 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 浏览器在 1366×768 下验证:导入多条记录后只勾选部分进行匹配,确认未选记录不变;再分批匹配同一订单,确认远端明细不会重复占用。 ## 风险和回退 - 风险:只按选中行计算会忽略同订单其他记录,造成远端明细重复占用;实现必须加载同订单上下文并预留已有 `detail_id`。 - 风险:勾选后记录状态并发变化;保存时继续使用状态条件更新,任一目标状态变化则整体不保存。 - 回退:本任务无数据库迁移,可回退对应代码与模板提交;既有规划和回写审计数据不受影响。
Author
Owner

状态:进行中。开始实现按动作勾选、选中 ID 服务端校验,以及同订单未选记录的远端明细占用保护。

状态:进行中。开始实现按动作勾选、选中 ID 服务端校验,以及同订单未选记录的远端明细占用保护。
Author
Owner

状态:已实现,待用户验收。

实现结果:

  • 页面只保留“匹配已选 N 条”,空选择禁用,不再隐式匹配当日全部记录。
  • 待匹配、可回写、已跳过、失败可参与匹配;回写仍只提交可回写记录。
  • 服务端按选中 ID、业务日期、状态和当前页最多 20 条进行校验,只保存选中记录。
  • 部分匹配仍加载同订单上下文,并在保存事务中锁定订单记录、复核未选记录的 detail_id 占用,避免分批或并发匹配重复分配同一顺运宝明细。
  • 未修改数据库结构、顺运宝远端写接口或既有安全回写门禁。

验证:

  • 固定 GOTOOLCHAIN=go1.23.0:go build ./...、go test ./... -count=1、go vet ./... 全部通过。
  • git diff --check 通过。
  • 未验证:真实顺运宝选择匹配、真实 MySQL 8.4 交叉并发、浏览器 1366×768 人工视觉验收。

提交:

  • 63f8407 feat: 支持勾选部分档口入库码匹配 (#235)
  • 3665f73 docs: 归档任务 #235

归档:docs/task/235-档口入库码支持部分匹配.md

状态:已实现,待用户验收。 实现结果: - 页面只保留“匹配已选 N 条”,空选择禁用,不再隐式匹配当日全部记录。 - 待匹配、可回写、已跳过、失败可参与匹配;回写仍只提交可回写记录。 - 服务端按选中 ID、业务日期、状态和当前页最多 20 条进行校验,只保存选中记录。 - 部分匹配仍加载同订单上下文,并在保存事务中锁定订单记录、复核未选记录的 `detail_id` 占用,避免分批或并发匹配重复分配同一顺运宝明细。 - 未修改数据库结构、顺运宝远端写接口或既有安全回写门禁。 验证: - 固定 `GOTOOLCHAIN=go1.23.0`:`go build ./...`、`go test ./... -count=1`、`go vet ./...` 全部通过。 - `git diff --check` 通过。 - 未验证:真实顺运宝选择匹配、真实 MySQL 8.4 交叉并发、浏览器 1366×768 人工视觉验收。 提交: - `63f8407` feat: 支持勾选部分档口入库码匹配 (#235) - `3665f73` docs: 归档任务 #235 归档:`docs/task/235-档口入库码支持部分匹配.md`
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#235