西藏巴青项目

交易订单管理功能需求.md 21KB

交易订单管理 — 功能需求

1. 文档说明

说明
模块名称 交易订单管理(交易市场平台)
目标 登记供应商向承销商出售牲畜的交易订单,完成订单支付自动生成供应商结算单,形成「交易 → 订单支付 → 结算付款」业务闭环
依据 同目录 交易订单管理-草稿.md、原型 Snipaste_2026-05-22_13-54-54.jpg;关联 ../供应商结算管理/供应商结算管理-草稿.md、原型 Snipaste_2026-05-22_13-55-35.jpg
范围 仅功能与业务规则;不含库表、接口、报文、技术栈

1.1 使用角色与入口

角色 场景
交易市场运营人员 录入订单、完成订单支付、查询、打印小票/凭证
财务/结算人员 供应商结算管理 中处理待结算单(本模块不完成结算)
系统管理员 菜单与权限配置

默认进入 交易订单列表

1.2 模块关系(业务视角)

供应商管理 ──────► 选供应商;收费方式/费率(结算计费依据)
承销商管理 ──────► 选承销商
市场进栏登记 ────► 采购明细耳标候选(已进栏牲畜)
交易订单管理 ────► 主单 + 采购明细;待支付 → 已完成
       │ 完成支付(支付凭证)
       ▼
供应商结算管理 ► 自动生成结算单;待结算 → 已完成(结算凭证)
关联模块 本模块依赖 约束
供应商管理 有效供应商 完成支付时须能读取收费规则
承销商管理 有效承销商
市场进栏登记 按供应商汇总已进栏耳标 无进栏耳标则无法建明细
隔离巡查登记 病死/病害耳标剔除(§4.2) 与「未病死、未病害」业务一致
供应商结算管理 支付成功后生成一条结算单 一对一;不可在本模块手工建结算单

2. 核心业务概念

2.1 一条交易订单

某供应商某承销商出售多行牲畜(每行:耳标、重量 kg、金额 元),汇总为交易总头数交易总金额

信息项 说明
订单编号 系统生成,业务唯一
采购明细 至少 1 行
交易总头数 = 明细行数
交易总金额 = 明细金额之和(元,保留 2 位小数展示)
订单状态 待支付 / 已完成
支付凭证 完成支付时上传的图片
订单创建时间 首次保存成功时写入
订单完成时间 完成支付成功时写入;此前为空

2.2 状态与流转

状态 含义 允许操作(见 §8.9)
待支付 已保存,未上传支付凭证 编辑、删除、完成支付、打印小票、查看
已完成 已支付并已生成结算单 查看、打印凭证
  • 流转: 待支付 → 已完成,不可逆
  • 已完成不可改业务字段、不可删除、不可再次完成支付。

2.3 删除

  • 待支付逻辑删除,列表不展示,数据保留。
  • 已完成禁止删除(已关联结算单)。
  • 本期无回收站

3. 字段与录入规则

3.1 订单编号

  • 用户不可录入;新增时系统生成;修改不可改
  • 规则:YYYYMMDD + 3 位当日序号001999,左补零),如 20260520001
  • 序号按自然日递增,仅统计未逻辑删除订单。
  • 保存时须唯一;冲突则拒绝并提示。

3.2 供应商

  • 必填;表单单选,支持名称模糊搜索后选定。
  • 仅能选 供应商管理 中有效供应商。
  • 列表筛选:选定后精确匹配该供应商订单。
  • 更换供应商:清空全部采购明细,重新加载耳标候选。

3.3 承销商

  • 必填;表单单选,支持名称模糊搜索后选定。
  • 仅能选 承销商管理 中有效承销商。
  • 列表筛选:选定后精确匹配。

3.4 采购明细

至少 1 行;可增删行(保存时至少保留 1 行)。

字段 规则
耳标号 下拉单选必填;须先选供应商;下拉候选见 §4.4;保存校验见 §4.4 / §5 R3本单内不可重复
重量 必填> 0;单位 kg;建议最多 2 位小数;库字段 weight
金额 必填> 0;单位 ;建议最多 2 位小数;库字段 amount
品质等级 只读;库字段 grade_codegrade_name保存/修改订单时由服务端根据本行重量匹配 biz_grade_weight_config(闭区间 [min_weight, max_weight])后同时写入编码与名称;前端无需传、不可手工改
  • 子表 biz_trade_order_line 冗余 supplier_id(与主表一致),由服务端写入,前端 Body 无需传。
  • 等级重量配置见 sql/biz_grade_weight_config.sql(如 A 一级 ≥140 kg、B 二级 120~139.99 kg 等);重量落在任一档外时保存失败并提示。
  • 耳标字符规则与 入场隔离 / 市场进栏 一致(单段 1~32 字符等)。

3.5 交易总头数 / 交易总金额

字段 规则
交易总头数 只读联动;= 明细行数;正整数
交易总金额 只读联动;= 明细金额之和;与手工合计不一致时以系统汇总为准

3.6 支付凭证

阶段 规则
待支付
完成支付 必填单张图片;jpg / jpeg / png≤ 10MB
已完成 列表/详情可查看;打印凭证须能展示

3.7 时间字段

字段 写入时机 规则
订单创建时间 首次保存成功 系统当前时间;用户不可改
订单完成时间 完成支付成功 系统当前时间

4. 采购明细耳标候选(已确认口径)

草稿要求从 市场进栏登记 按供应商筛选,且牲畜须未病死、未病害。与 市场进栏登记隔离巡查 对齐后的规则如下。

4.1 集合 M:市场进栏耳标(按供应商)

  1. 市场进栏登记 中:del_flag 有效、供应商 = 当前所选供应商;
  2. 汇总所有进栏记录中的耳标(子表或聚合字段,逗号拆分、去重)→ M

M 为空:提示「该供应商暂无进栏耳标,请先维护市场进栏登记」。

说明:订单使用「入场隔离已结束」耳标池;仅以已进栏耳标为准。

4.2 集合 B:病死 / 病害耳标(全表巡查)

  1. 隔离巡查登记 中:del_flag 有效、病死病害数量 > 0、耳标号非空;
  2. 不按供应商过滤;耳标逗号拆分、去重B

4.3 集合 C:他单已成交占用(已确认:不允许跨单重复使用)

其他有效交易订单(待支付已完成、未逻辑删除)的采购明细中已出现的耳标 → C

  • 不允许同一耳标同时出现在两笔有效订单中(含两笔待支付)。
  • 修改本单时:本单当前已选耳标不计入 C(可保留、可调整)。

4.4 下拉与保存可选集(实现口径)

场景 集合 / 规则
加载下拉 GET /supplierEarTags 仅查 biz_market_entry_ear_tagsupplier_id = 当前供应商,distinct ear_tag 升序;剔 B、剔 C;可展示他单待支付已占用的耳标
保存校验(R3) 每行耳标 ∈ (M − B)− C;M 为 §4.1(有效进栏主表关联子表);编辑时 C 排除本单 order_id
完成支付成功后 按本单每行 supplier_id + ear_tag 删除 biz_market_entry_ear_tag 对应记录,释放进栏耳标池(与下拉数据源一致)

下拉宽松、保存严格:用户可能选到保存时被 R3 拒绝的耳标(如病死 B、他单占用 C),须提示 §11 示例文案。

4.5 联动

时机 行为
选供应商 重载 /supplierEarTags(§4.4 下拉口径)
换供应商 清空明细
增删行 更新头数、金额
保存 执行 §5

5. 保存规则(R1~R8)

待支付订单新增/修改点「确定」时全部满足:

编号 规则
R1 供应商、承销商、至少 1 行明细均已填
R2 供应商、承销商在各自主数据中仍有效
R3 每行耳标 ∈ §4.4 保存校验集合 (M − B)− C;重量、金额 > 0;服务端按重量写入 grade_codegrade_name(§3.4)
R4 本单耳标不重复
R5 交易总头数 = 明细行数
R6 交易总金额 = 明细金额之和(按 2 位小数汇总)
R7 已完成订单不可保存修改
R8 订单编号唯一(系统生成冲突时拒绝)

6. 完成支付

6.1 入口

待支付 显示「完成支付」→ 弹窗 「完成订单支付」

6.2 弹窗

  • 支付凭证:必填,§3.6。
  • 确定 / 取消(取消不改变订单)。

6.3 确定后(须同一业务事务,全部成功或全部回滚)

序号 动作
1 订单状态 → 已完成
2 写入 订单完成时间
3 保存 支付凭证
4 生成一条供应商结算单(§7)
5 按明细 supplier_id + ear_tag 删除 biz_market_entry_ear_tag 中对应行(§4.4)

任一步失败:订单保持 待支付,提示原因;不得出现「已完成但无结算单」或「已完成但未释放进栏耳标」等半成品状态(同一事务回滚)。

6.4 重试与幂等(已确认)

情况 处理
用户再次点击「完成支付」且仍为待支付 允许重试上传凭证
订单已完成 不显示完成支付
订单已完成且结算单已存在 不得再次生成结算单

6.5 前置校验(完成支付时)

除支付凭证外,须满足:

  • 供应商仍有效,且已配置 收费方式(否则无法计算结算金额);
  • 订单仍为 待支付
  • 采购明细、头数、金额仍满足 R3~R6(防止长时间挂单后数据失真)。

7. 与供应商结算管理的衔接

7.1 生成时机与数量

  • 唯一触发:本模块 完成支付 成功。
  • 一对一:一笔订单 → 一条结算单;不可在订单界面手工新建。
  • 结算单不可由用户选择「关联多订单」。

7.2 带入结算单的信息

结算单展示项 来源
关联订单编号 本订单编号
供应商 本订单供应商
交易总头数 本订单
交易总金额(元) 本订单
结算创建时间 生成时刻

结算单编号、结算状态、服务费、实际应付、结算凭证等按 §7.3~§7.4 及结算模块自身规则处理。

7.3 结算单编号

  • 系统自动生成:JSD + YYYYMMDD + 3 位当日序号(001999)。
  • 与订单编号独立;通过 关联订单编号 关联。

7.4 服务费与实际应付(生成时计算并固化)

读取生成结算单时刻该供应商在 供应商管理 中的收费配置,计算后写入结算单并不再随主数据变更自动重算(快照)。

收费方式 服务费金额(元)
按户计费 0
按头计费 交易总头数 × 收费标准(元/头)
按额计费 交易总金额 ×(交易费率 + 管理费率)÷ 100

实际应付结算金额(元) = 交易总金额 − 服务费金额。

金额精度(已确认)

  • 服务费、实际应付均保留 2 位小数
  • 四舍五入 至分;
  • 按额计费时:先求(交易费率 + 管理费率)之和(%),再乘以交易总金额。

7.5 结算单初始状态

  • 结算状态待结算
  • 结算凭证结算完成时间:空。
  • 后续在 供应商结算管理 中「完成结算」、上传结算凭证。

7.6 订单与结算状态对照

订单:  (无)─保存─► 待支付 ──完成支付──► 已完成
结算:  (无)          (无)  ──生成──► 待结算 ──完成结算──► 已完成
  • 订单 待支付:无结算单。
  • 订单 已完成:必有 待结算已完成 的结算单。
  • 结算完成后,订单状态仍为已完成(不回退)。

8. 功能清单

8.1 新增

入口:列表「新增」。确定后:生成编号、待支付、订单创建时间。取消不保存。

8.2 列表查询

筛选项 匹配方式
订单编号 模糊
供应商 下拉选定后 精确(支持输入模糊搜索后选定)
承销商 同上 精确
组合 条件 同时 生效
  • 仅未逻辑删除记录;默认按 订单创建时间 降序;默认每页 20 条。
  • 工具栏:搜索、重置、新增。

列表列:订单编号、订单创建时间、供应商、承销商、采购明细(入口)、交易总头数(头)、交易总金额(元)、订单状态、支付凭证、订单完成时间、操作。

采购明细列:点击打开 采购明细表 弹窗(只读展示该单全部行:耳标、重量、金额、品质等级名称);列表行内可摘要展示(如首耳标+「等 N 头」)。

8.3 修改

  • 仅待支付全部业务字段可改(含明细);编号、创建时间不可改。
  • 规则同 §4、§5。

8.4 查看

全字段只读;明细完整;支付凭证可查看;含审计信息(与项目惯例一致)。

8.5 删除

  • 仅待支付;二次确认(宜含编号、供应商、金额或头数);逻辑删除。

8.6 打印

功能 范围 内容
打印小票 仅待支付 编号、双方、明细、头数、金额、创建时间;不含支付凭证、完成时间
打印凭证 仅已完成 含 §3 交易信息 + 订单完成时间 + 支付凭证 + 订单状态

待支付不提供「打印凭证」;已完成不提供「打印小票」。

8.7 按状态操作矩阵

状态 操作
待支付 打印小票、完成支付、查看、编辑、删除
已完成 打印凭证、查看

无权限不显示按钮。

8.8 本期不做

部分支付/退款、拆单、批量导入导出、订单侧完成结算、改已完成订单、物理删除、承销商结算。


9. 业务流程图

9.1 订单主流程

flowchart TD
    L[订单列表] --> N[新增/编辑]
    N --> V{R1-R8?}
    V -->|否| N
    V -->|是| P[待支付]
    P --> E[编辑/删除/打小票]
    P --> Pay[完成支付+凭证]
    Pay --> OK{成功?}
    OK -->|否| P
    OK -->|是| D[已完成+生成结算单]
    D --> L

9.2 与结算衔接

sequenceDiagram
    participant O as 交易订单
    participant S as 供应商结算
    O->>O: 完成支付
    O->>S: 生成结算单(待结算,费用快照)
    S->>S: 完成结算(结算凭证)

9.3 耳标候选

flowchart LR
    M[进栏耳标 M] --> X[M-B]
    X --> Y[减他单 C]
    Y --> Z[下拉/保存校验]

10. 权限(业务层)

查询列表、查看详情、新增、修改、删除、完成支付、打印(小票/凭证)— 实施配置,本文不列编码。


11. 提示语(示例)

情况 示例
缺供应商/承销商/明细 请选择供应商 / 承销商 / 请至少添加一行采购明细
请先选供应商 请先选择供应商
无进栏耳标 该供应商暂无进栏耳标,请先维护市场进栏登记
耳标重复 存在重复耳标:{耳标号}
耳标不可用 耳标 {耳标号} 不可选或已被其他订单占用
已完成不可改删 已完成订单不可修改 / 不可删除
支付凭证 请上传支付凭证 / 文件格式或大小不符合要求
完成支付失败 完成支付失败:{原因}
供应商收费未配置 供应商收费方式未配置,无法生成结算单
编号冲突 订单编号生成冲突,请重试

12. 关联需求分析(供应商结算管理)

依据 ../供应商结算管理/供应商结算管理功能需求.md(及草稿、原型),明确两模块分工与一致性。

12.1 职责边界

能力 交易订单管理 供应商结算管理
交易与采购明细
订单支付凭证
触发创建结算单 ✓(自动) 被动接收
服务费/实际应付计算 生成时计算并快照 展示、打印
结算凭证与结算完成
按结算单号/订单号查询

12.2 关键字段对照

概念 订单 结算 一致性
编号 日期+3位 JSD+日期+3位 独立;用关联订单编号串联
交易总头数 生成时一致
交易总金额 生成时一致
服务费 §7.4
实际应付 总金额−服务费
支付凭证 vs 结算凭证 订单支付 结算付款 两阶段、两种凭证

12.3 结算模块功能摘要(便于联调)

完整规则见 ../供应商结算管理/供应商结算管理功能需求.md。摘要如下:

规则
列表筛选 结算单编号模糊;关联订单编号模糊
列表列 结算单编号、结算创建时间、关联订单编号、供应商、交易总头数、交易总金额、服务费、实际应付、结算状态、结算凭证、结算完成时间
待结算操作 完成结算、查看
已完成操作 打印凭证、查看
完成结算 弹窗上传结算凭证(规则同订单支付凭证 §3.6);确定后状态已完成、写入结算完成时间
流程终点 完成结算为平台业务链终点;结算模块内无后续必办
跨模块导航 不提供从结算列表/详情跳转至订单详情;关联订单编号仅展示与筛选

12.4 端到端业务链

市场进栏(耳标子表) → 交易订单(待支付) → 完成支付(删子表耳标+结算单) → 结算单(待结算) → 完成结算 → 闭环

12.5 异常场景(两模块协同)

场景 处理原则
完成支付时供应商已删或收费未配 拒绝完成支付
支付成功但结算生成失败 订单保持待支付(§6.3);用户可重试
订单待支付被删 无结算单;耳标占用释放
订单已完成 不可删;结算单待结算/已完成均不回写订单状态
结算单已完成 订单仍已完成;不可作废订单
进栏登记删除某耳标 待支付订单保存时 R3 可能失败;已完成订单保留历史明细
完成支付成功 biz_market_entry_ear_tag 删除本单耳标;下拉池不再展示

12.6 对市场进栏登记的依赖

  • 交易成交对象必须是 已进栏 耳标(§4.1,保存校验)。
  • 下拉展示来自进栏耳标子表(§4.4),与保存可选集口径不同。
  • 病死耳标通过 §4.2 与巡查模块联动,保存时剔除(下拉仍可能展示,由 R3 拦截)。
  • 运营顺序建议:进栏 → 建单 → 支付 → 结算。

13. 非功能建议

建议
权限 操作分权
审计 增删改、完成支付留痕
校验 保存、完成支付须服务端执行 R1~R8 与 §6.5
事务 完成支付与生成结算单原子性
易用性 删除、完成支付二次确认

14. 已确认业务决策(评审纪要)

序号 决策
1 耳标候选来自 市场进栏登记,不使用入场隔离池
2 剔除 全表巡查病死/病害耳标(§4.2)
3 禁止同一耳标出现在多笔有效订单(§4.3)
4 结算费用以生成结算单时 快照 为准
5 金额 2 位小数、四舍五入
6 完成支付失败可重试;已成功不得重复生成结算单
7 打印:待支付仅小票;已完成仅凭证
8 下拉耳标:仅 biz_market_entry_ear_tagsupplier_id保存(M−B)−C
9 完成支付后删除进栏子表已成交耳标(supplier_id + ear_tag
10 采购明细子表冗余 supplier_id,与主表一致

15. 草稿对照

草稿条目 章节
交易订单 1~7 §3、§4、§5、§8
交易订单 5、13~14 §6、§7、§8.7
交易订单 8~12 §8.3~§8.6
结算 2~11 §7、§12
技术栈、异常报文格式 不纳入

16. 修订记录

版本 说明
1.0 初稿:订单与结算衔接、耳标与状态
1.1 优化:拍板耳标/费用/快照/重试/打印边界;§4 与进栏/巡查对齐;§12 关联分析;§14 决策纪要;对齐草稿列表精确筛选
1.2 对齐实现:§4.4 拆「下拉子表 / 保存 M−B−C / 支付后删进栏耳标」;§3.4 子表 supplier_id;§6.3 步骤 5;§14 决策 8~10
1.3 对齐结算需求 v1.1:§12.3 补充「完成结算为流程终点、不跳转订单」