Admin:支持顺运宝多订单号精确搜索 #217

Closed
opened 2026-08-13 14:47:28 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / Admin MVP 后续优化
  • 阶段:顺运宝采购工作台筛选优化

要解决什么

顺运宝页面当前把 order_no 整段作为一个模糊关键词,查询 order_no LIKE '%...%' OR title LIKE '%...%'。粘贴多个订单号会被当成一整段文字而无法命中,前导 % 也不能有效利用已有 idx_syb_orders_order 索引。采购员需要从 Excel 或聊天内容一次粘贴多个订单号,并明确知道哪些订单在当前组合筛选下没有命中。

做什么 / 不做什么

  • 做:现有订单号输入框支持中英文逗号、分号、空格、Tab、换行分隔;去空去重后最多 100 个、原始输入最多 4000 字符、单号最多 191 字符。
  • 做:订单号统一精确匹配,多单号使用参数化 IN,继续与店铺、处理阶段组合并保持分页及返回条件。
  • 做:显示输入订单数、当前筛选命中订单数、商品明细数和未命中订单号;错误显示在订单号输入附近。
  • 做:使用已有 idx_syb_orders_order,同步覆盖普通阶段与需要 Service 推导的高级阶段。
  • 不做:不修改数据库结构,不保留原“订单号或商品标题”模糊搜索,不增加跨页勾选或对全部搜索结果批量建任务。

怎么做

  • admin/service/syb.go:增加订单号查询解析和值对象,校验长度、数量并把归一化列表传入 Repository;列表结果返回输入、命中和未命中统计。
  • admin/repository/syb.go:SybOrderFilter 改为订单号集合,生成参数化 IN (?,...);增加按当前 SQL 可表达筛选读取已命中订单号的查询,复用已有索引。
  • admin/handler/web/others.go:区分可展示的筛选校验错误,保留原始输入和其他筛选条件;状态栏及页面反馈显示批量命中信息。
  • admin/templates/syb/list.html、admin/static/css/app.css:更新可粘贴提示、无障碍说明、行内错误和未命中反馈。
  • 更新 Repository、Service、Handler/模板测试及 Admin 需求、界面规范。

验收标准

  • 单个完整订单号按精确值查询,不再误命中商品标题或相似订单号。
  • 中英文逗号、分号、空格、Tab、换行均可分隔多个订单号,重复值只查询一次。
  • 多订单号查询生成参数化 IN,可与店铺和全部处理阶段组合,分页链接及页面写操作返回时保留查询。
  • ���面显示输入订单数、当前筛选命中订单数、明细数及未命中订单号。
  • 超过 100 个、原始输入超过 4000 字符或单号超过 191 字符时在订单号输入附近显示可读错误,不返回 500。
  • 现有 idx_syb_orders_order 被复用,无数据库迁移。
  • Go 1.23.0 下 build、test、vet 全部通过。

怎么验证

从 admin/ 执行:

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

补充自动化用例覆盖单个精确、多分隔符、去重、限制、未命中、店铺/普通阶段/高级阶段组合与模板状态保留。

风险和回退

  • 风险:原实现允许按订单号片段或商品标题模糊命中;本工单按已确认需求收敛为订单号精确搜索。回退时可恢复旧 Keyword 分支,不涉及数据回退。
  • 风险:GET 查询过长可能受浏览器/Nginx 请求行限制;通过 4000 字符和 100 个订单号双重限制控制。
  • 风险:一个订单对应多条商品明细,命中订单数和明细数必须分别统计,不能把行数冒充订单数。

实施结果

  • 状态:已完成,待用户验收
  • 最终实现:多分隔符解析、去重及三类上限校验;参数化 IN 精确查询;店铺和全部处理阶段组合;输入、命中、明细和未命中反馈。
  • 交互补充:搜索控件可靠接收 Excel 多行粘贴;Enter 搜索,Shift+Enter 换行。
  • 数据库:无 schema 变更,继续使用 idx_syb_orders_order。
  • 实现提交:8f2b3f7
  • 归档提交:5bf6764
  • 归档文档:docs/task/217-顺运宝多订单号搜索.md

验证结果

  • Go 1.23.0 go build ./...:通过
  • Go 1.23.0 go test ./... -count=1:通过
  • Go 1.23.0 go vet ./...:通过
  • 未验证:未设置 CMAUTOBUY_MYSQL_TEST=1,真实 MySQL 8 路由集成用例按项目规则跳过;未做真实浏览器 Excel 粘贴验收,未部署生产。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 / Admin MVP 后续优化 - 阶段:顺运宝采购工作台筛选优化 ## 要解决什么 顺运宝页面当前把 `order_no` 整段作为一个模糊关键词,查询 `order_no LIKE '%...%' OR title LIKE '%...%'`。粘贴多个订单号会被当成一整段文字而无法命中,前导 `%` 也不能有效利用已有 `idx_syb_orders_order` 索引。采购员需要从 Excel 或聊天内容一次粘贴多个订单号,并明确知道哪些订单在当前组合筛选下没有命中。 ## 做什么 / 不做什么 - 做:现有订单号输入框支持中英文逗号、分号、空格、Tab、换行分隔;去空去重后最多 100 个、原始输入最多 4000 字符、单号最多 191 字符。 - 做:订单号统一精确匹配,多单号使用参数化 `IN`,继续与店铺、处理阶段组合并保持分页及返回条件。 - 做:显示输入订单数、当前筛选命中订单数、商品明细数和未命中订单号;错误显示在订单号输入附近。 - 做:使用已有 `idx_syb_orders_order`,同步覆盖普通阶段与需要 Service 推导的高级阶段。 - 不做:不修改数据库结构,不保留原“订单号或商品标题”模糊搜索,不增加跨页勾选或对全部搜索结果批量建任务。 ## 怎么做 - `admin/service/syb.go`:增加订单号查询解析和值对象,校验长度、数量并把归一化列表传入 Repository;列表结果返回输入、命中和未命中统计。 - `admin/repository/syb.go`:`SybOrderFilter` 改为订单号集合,生成参数化 `IN (?,...)`;增加按当前 SQL 可表达筛选读取已命中订单号的查询,复用已有索引。 - `admin/handler/web/others.go`:区分可展示的筛选校验错误,保留原始输入和其他筛选条件;状态栏及页面反馈显示批量命中信息。 - `admin/templates/syb/list.html`、`admin/static/css/app.css`:更新可粘贴提示、无障碍说明、行内错误和未命中反馈。 - 更新 Repository、Service、Handler/模板测试及 Admin 需求、界面规范。 ## 验收标准 - [x] 单个完整订单号按精确值查询,不再误命中商品标题或相似订单号。 - [x] 中英文逗号、分号、空格、Tab、换行均可分隔多个订单号,重复值只查询一次。 - [x] 多订单号查询生成参数化 `IN`,可与店铺和全部处理阶段组合,分页链接及页面写操作返回时保留查询。 - [x] ���面显示输入订单数、当前筛选命中订单数、明细数及未命中订单号。 - [x] 超过 100 个、原始输入超过 4000 字符或单号超过 191 字符时在订单号输入附近显示可读错误,不返回 500。 - [x] 现有 `idx_syb_orders_order` 被复用,无数据库迁移。 - [x] Go 1.23.0 下 build、test、vet 全部通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 补充自动化用例覆盖单个精确、多分隔符、去重、限制、未命中、店铺/普通阶段/高级阶段组合与模板状态保留。 ## 风险和回退 - 风险:原实现允许按订单号片段或商品标题模糊命中;本工单按已确认需求收敛为订单号精确搜索。回退时可恢复旧 Keyword 分支,不涉及数据回退。 - 风险:GET 查询过长可能受浏览器/Nginx 请求行限制;通过 4000 字符和 100 个订单号双重限制控制。 - 风险:一个订单对应多条商品明细,命中订单数和明细数必须分别统计,不能把行数冒充订单数。 ## 实施结果 - 状态:已完成,待用户验收 - 最终实现:多分隔符解析、去重及三类上限校验;参数化 `IN` 精确查询;店铺和全部处理阶段组合;输入、命中、明细和未命中反馈。 - 交互补充:搜索控件可靠接收 Excel 多行粘贴;Enter 搜索,Shift+Enter 换行。 - 数据库:无 schema 变更,继续使用 `idx_syb_orders_order`。 - 实现提交:`8f2b3f7` - 归档提交:`5bf6764` - 归档文档:`docs/task/217-顺运宝多订单号搜索.md` ## 验证结果 - Go 1.23.0 `go build ./...`:通过 - Go 1.23.0 `go test ./... -count=1`:通过 - Go 1.23.0 `go vet ./...`:通过 - 未验证:未设置 `CMAUTOBUY_MYSQL_TEST=1`,真实 MySQL 8 路由集成用例按项目规则跳过;未做真实浏览器 Excel 粘贴验收,未部署生产。
Author
Owner

已创建并开始实施:支持多分隔符粘贴订单号、最多 100 个、参数化精确 IN 查询、组合筛选和未命中反馈;不含跨页批量选择。

已创建并开始实施:支持多分隔符粘贴订单号、最多 100 个、参数化精确 `IN` 查询、组合筛选和未命中反馈;不含跨页批量选择。
Author
Owner

生产部署已由 #218 完成:当前 release 为 5bf6764,systemd active/enabled,schema v19,本机和公网 HTTPS 健康检查通过,公网 CSS 已包含多订单号搜索新样式。保留 #217 开启等待用户功能验收。

生产部署已由 #218 完成:当前 release 为 `5bf6764`,systemd active/enabled,schema v19,本机和公网 HTTPS 健康检查通过,公网 CSS 已包含多订单号搜索新样式。保留 #217 开启等待用户功能验收。
Author
Owner

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。
ila closed this issue 2026-08-13 15:57:00 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#217