Skip to content

15 v1 data model draft

技术老胡 edited this page Jul 29, 2026 · 2 revisions

V1 业务数据模型草案

本文档把已确认的业务规则转换为数据库实体、关键字段和约束,供后续技术评审使用。它不是建表 SQL,不会直接修改数据库;最终表名、字段类型和索引需结合 CRMEB 现有模型、命名规范和数据量再次确认。

一、设计原则

  • 复用 CRMEB 的用户、商户、商品、SKU、订单、支付、退款、物流、余额和基础财务能力。
  • 农业资产、生产批次、云仓批次和用户持仓使用独立业务表,不硬塞进普通商品表。
  • 云仓扩展优先通过独立表关联 eb_store_ordereb_store_order_product,避免直接扩大现有 product_typeactivity_type 对全系统的影响。
  • 配置与历史快照分开保存。配置修改不影响已付款订单。
  • 汇总字段用于查询,流水表用于证明事实;汇总可重算,流水不可物理删除。
  • 金额、数量、比例、时间和状态均使用明确字段,不把核心结算事实只存在 JSON 中。
  • JSON 只用于低频扩展快照、展示材料或第三方原始回执。
  • 所有支付回调、库存变化、节点结算、回购和冲正都有业务唯一键,支持幂等。
  • 法律、税务和会计科目不在本轮建模范围;支付、退款、结算和账本技术事实仍需完整记录。

二、复用的 CRMEB 主对象

CRMEB 对象 复用目的 智慧农业关联方式
用户 购买人、租地/认养参与者、云仓持仓人 保存 user_id
商户 普通商品与云仓商品供货方 保存 merchant_id
商品/SPU 普通销售和活动商品来源 保存 product_id
SKU/规格 库存和活动批次最小商品粒度 保存来源 SKU 当前主键和 unique 快照;业务使用独立 activity_sku_id
eb_store_order 支付、订单汇总、退款、物流入口 通过业务扩展表一对一/一对多关联
eb_store_order_product 订单明细和商品金额 通过订单明细扩展表一对一关联
退款/售后单 首次交易、二次零售、农业履约售后 保存退款单 ID 和影响金额
地址/物流 邮寄到家与普通商品履约 复用地址快照、发货和物流轨迹
用户余额/账单 用户本金、收益和回购款入账 账本审核后调用,不替代业务账本
商户财务 商户供货货款结算和提现 关联独立供货账本

三、公共字段约定

除纯关联流水外,新增主表建议统一包含:

字段 建议 说明
<entity>_id bigint unsigned 领域主键,沿用 CRMEB 显式主键命名
status 小整数或稳定字符串码 业务状态
is_del / delete_time 布尔/时间 仅业务主数据软删除;流水表不设删除入口
create_time datetime 创建时间,沿用现有 CRMEB 字段名
update_time datetime 更新时间;现有 BaseModel 默认关闭自动更新时间,写服务需显式维护
create_admin_id bigint 可空 后台创建人;用户/商户对象使用对应操作者字段
update_admin_id bigint 可空 最后后台修改人
version 整数 乐观锁或规则版本

金额建议数据库使用 decimal(14,2) 或统一按分存储;收益计算中间值至少保留 6 位小数。数量根据商品单位使用 decimal(14,3),不可一律假定整数。

业务发生时间继续使用语义明确的 *_at,如 paid_atmaturity_at。正式字段字典需为每个时间字段统一确认 datetime、时区和空值规则,不能在同一业务域混用 Unix 秒和日期字符串。

四、云仓活动与供货

1. eb_farm_cloud_activity

一条记录表示一场云仓秒杀活动。

关键字段 说明
activity_no 业务唯一编号
name 活动名称
preview_at 预热时间
start_at / end_at 抢购开始与结束时间
payment_timeout_minutes 支付超时
choice_days_default 默认去向选择天数
status 草稿、待发布、未开始、进行中、已结束、已关闭
publish_at 发布时间
closed_at 关闭时间

索引建议:activity_no 唯一索引,status + start_at + end_at 组合索引。

2. eb_farm_cloud_supply

商户或平台提交的云仓供货关系。

关键字段 说明
supply_no 供货申请编号
source_type 平台自营、商户供货
merchant_id 商户供货时必填
product_id / source_sku_value_id 来源商品与 CRMEB 当前规格值主键
source_sku_unique_snapshot 申请时的规格唯一值快照
source_sku_snapshot 规格名称、图片、编码和单位快照
supply_price 商户供货价
available_qty 可供货数量
accepted_qty 已验收数量
allocated_activity_qty 已分配给未结束云仓活动的验收数量
fulfillment_type 预入云仓、平台仓、其他已确认方式
after_sale_days 首次交易售后观察期
audit_status 待审、通过、驳回
audit_by / audit_at / audit_remark 审核信息
accepted_at 入库/供货验收完成时间

3. eb_farm_cloud_activity_product

一条记录表示某来源商品参加某场活动的 SPU 级展示和公共去向配置,不直接承担 SKU 价格、库存和结算事实。

关键字段 说明
activity_id 云仓活动
supply_id 供货关系
product_id CRMEB 商品
source_type / merchant_id 来源快照
display_title / cover_image 活动展示快照
supports_shipping 是否支持邮寄
supports_pickup 是否支持自提
supports_consign V1 必须为是
choice_days 选择期限
pickup_days 开放自提时的核销期限
rule_version 规则版本
status 草稿、已发布、已下架

唯一约束建议:同一 activity_id + product_id + supply_id 不重复。

4. eb_farm_cloud_activity_sku

一条记录是用户可抢购的最小活动商品,也是规则冻结和生成批次的稳定来源。CRMEB 商品编辑可能重建规格值,因此历史订单、批次和账本统一关联本表主键,不把来源 value_id 当永久业务主键。

关键字段 说明
activity_product_id / supply_id 活动商品与供货来源
product_id / source_sku_value_id 来源商品和当时 CRMEB 规格值主键
source_sku_unique_snapshot 来源规格唯一值快照
sku_snapshot 规格、编码、图片、单位和来源价格快照
activity_unit_price 用户首次抢购单价
supply_unit_price 商户供货价快照
activity_qty 本活动 SKU 可抢购数量
per_user_limit 每人限购数量
expected_sale_days 预计代销周期
settlement_mode final_allprofit_periodic_principal_finalprincipal_profit_periodic
user_profit_rate / platform_profit_rate 利润分成基点,合计 10000
buyback_rate 到期回购基点
primary_after_sale_days 首次交易观察期
secondary_after_sale_days 二次零售观察期
resale_product_id / resale_sku_value_id 二次普通商城销售映射,发布前可为空
rule_version 规则版本
status 草稿、可发布、已发布、已关闭

唯一约束建议:activity_product_id + source_sku_unique_snapshot。发布后影响订单金额、周期、分成和回购的字段不得原地修改。

5. eb_farm_cloud_batch

每场活动的每个 SKU 一条记录,是云仓经营核心表。

关键字段 说明
batch_no 批次唯一编号
activity_id / activity_product_id / activity_sku_id 来源活动与稳定活动 SKU
product_id / source_sku_value_id CRMEB 来源商品和当时规格值
source_sku_unique_snapshot / sku_snapshot 来源规格与展示快照
supply_id / merchant_id 供货来源
resale_stock_id 批次开始后关联的二次销售库存桥接
purchase_unit_price 用户云仓抢购单价快照
supply_unit_price 商户供货价快照
activity_qty 活动预占数量
locked_unpaid_qty 未付款锁定数量汇总
paid_qty 已付款数量汇总
refunded_primary_qty 首次退款数量
shipping_qty 邮寄去向数量
pickup_qty 自提去向数量
consign_qty 冻结代销数量
secondary_locked_qty 二次零售锁定数量
effective_sold_qty 有效代销售出数量
secondary_refund_qty 二次退款数量
buyback_qty 到期回购数量
remaining_qty 可售剩余数量
confirmed_sales_amount 累计确认销售收入
distributable_profit 累计可分配销售利润
choice_deadline_at 去向选择截止
consign_start_at 代销开始
maturity_at 到期时间
closed_at 批次关闭时间
current_milestone 0、25、50、75、100
settlement_mode / user_profit_rate / buyback_rate 批次快照
status 批次状态

索引建议:

  • batch_no 唯一索引。
  • resale_stock_id + status + maturity_at 用于最早到期分配。
  • activity_id + activity_product_id 用于活动汇总。
  • 汇总数量更新使用版本号或数据库原子条件,防止超卖。

6. eb_farm_cloud_inventory_flow

记录每次库存事实变化。

关键字段 说明
flow_no 流水唯一编号
batch_id 云仓批次
pool_from / pool_to 来源库存池和目标库存池
change_qty 变化数量,正数
business_type 活动预占、下单锁定、支付确认、超时释放、去向冻结、二次锁定、有效售出、退款、回购等
business_id 对应订单、明细、退款或回购 ID
idempotency_key 幂等唯一键
occurred_at 业务发生时间

idempotency_key 必须唯一。

五、首次订单与用户持仓

1. eb_farm_cloud_order_item

eb_store_order_product 一对一,保存云仓首次购买快照和去向状态。

关键字段 说明
order_id / order_product_id CRMEB 订单和明细
user_id 首次购买用户
activity_id / activity_product_id / activity_sku_id / batch_id 云仓来源
product_id / source_sku_value_id 来源商品与规格值关联
sku_snapshot 下单时规格、编码、图片和单位快照
purchase_unit_price 抢购单价
purchase_qty 本明细购买数量
goods_paid_amount 用户商品实付,不含后补运费
disposition 未选择、邮寄、自提、代销
choice_status 待选择、用户已选、系统自动选择
choice_deadline_at 选择截止
choice_at / choice_operator_type 选择时间和操作者
freight_status / freight_amount 补运费状态和金额
pickup_deadline_at 自提截止时间
primary_completed_at 按邮寄收货、自提核销或代销入批次认定
primary_settlement_eligible_at 首次售后观察期到期时间
primary_refund_status / primary_refund_qty 首次退款状态与数量
fulfillment_order_id 邮寄/自提履约关联
holding_id 代销时关联用户持仓
rule_snapshot 页面展示所需完整规则 JSON 快照
status 首次明细状态

唯一约束:order_product_id 唯一。数据库约束或服务校验确保 disposition 只能有一个值。

2. eb_farm_cloud_freight_order

邮寄到家时的补运费支付单。

关键字段 说明
freight_order_no 唯一编号
cloud_order_item_id 云仓首次明细
user_id 付款用户
address_snapshot 地址快照
freight_template_id CRMEB 运费模板
freight_amount 应付运费
paid_amount 实付运费
pay_status / pay_time 支付状态
expired_at 补运费支付超时时间
refund_status / refund_amount 运费退款

3. eb_farm_cloud_holding

用户在一个云仓批次中的代销持仓。一个订单明细对应一条持仓;不建议把同批次多订单强行合并,以保留各自规则快照和退款来源。

关键字段 说明
holding_no 持仓编号
user_id 持仓用户
batch_id 云仓批次
cloud_order_item_id 来源首次订单明细
initial_qty 初始代销数量
active_qty 当前有效参与分摊数量
effective_sold_qty 累计分摊有效售出数量
remaining_qty 最终未售/待售数量
buyback_qty 回购数量
unit_principal 单位本金
total_principal 初始本金
returned_principal 累计已返本金
recognized_profit 累计已确认用户收益
settled_profit 累计已结算收益
buyback_amount 累计回购款
settlement_mode / user_profit_rate / buyback_rate 规则快照
status 待入批次、代销中、结算中、已完成、冻结

索引建议:user_id + statusbatch_id + statuscloud_order_item_id 唯一。

六、二次零售与批次进度

1. eb_farm_cloud_resale_stock

连接 CRMEB 普通商品 SKU 与一个或多个云仓批次的二次可售库存桥接表。它只提供普通商城销售入口和库存汇总,不能代替批次库存流水。

关键字段 说明
resale_stock_no 业务唯一编号
resale_product_id / resale_sku_value_id 普通商城二次代销商品与规格值
resale_sku_unique_snapshot 映射时规格唯一值快照
stock_source V1 固定为 cloud_only
published_qty 已从代销批次发布到普通商城的累计数量
available_qty 当前可供普通订单锁定的云仓数量
locked_qty 已创建普通订单但尚未释放/生效的数量
effective_sold_qty 已过二次售后观察期的有效数量
returned_qty 退款、释放或回购后退出二次销售的数量
is_visible / is_saleable 普通商城展示与下单开关
last_reconciled_at 与 CRMEB SKU 库存最近对账时间
version 并发版本
status 草稿、可售、暂停、到期清理、关闭

唯一约束建议:resale_product_id + resale_sku_value_id。V1 禁止同一映射 SKU 同时销售普通库存和云仓库存;普通商城展示库存与本表 available_qty 必须可对账。

2. eb_farm_cloud_resale_allocation

把普通 CRMEB 二次零售订单明细分配到云仓批次。

关键字段 说明
secondary_order_id / secondary_order_product_id 二次零售订单与明细
batch_id 被分配的云仓批次
allocated_qty 分配数量
goods_paid_amount 该分配对应商品实付金额
platform_subsidy_amount 平台券/补贴加回金额
recognized_sales_amount 售后观察期结束后确认的销售收入
refund_qty / refund_amount 二次退款影响
effective_at 转为有效代销售出的时间
status 已锁定、履约中、观察期、有效、退款、已释放

一个二次订单明细可拆分到多个批次,因此唯一键建议使用 secondary_order_product_id + batch_id

3. eb_farm_cloud_batch_progress

记录每次累计进度快照,便于审计和重算对比。

关键字段 说明
batch_id 云仓批次
trigger_type / trigger_id 二次订单生效、退款、回购、人工复核等
effective_sold_qty 当时累计有效销售数量
consign_qty 冻结代销数量
progress_rate 累计进度
confirmed_sales_amount 累计确认销售收入
sold_principal_amount 累计已售本金
distributable_profit 累计可分配利润
reached_milestone 本次达到的最高节点
calculation_version 计算规则版本
idempotency_key 唯一幂等键

七、云仓结算与回购

1. eb_farm_cloud_user_ledger

用户云仓业务账本,不直接等同于 CRMEB 用户余额流水。

关键字段 说明
ledger_no 账本编号
user_id / holding_id / batch_id 结算主体和来源
ledger_type 本金返还、收益、回购款、冲正、冻结、解冻
milestone 0、25、50、75、100、最终
principal_amount 本次本金金额
profit_amount 本次收益金额
buyback_amount 本次回购金额
adjustment_amount 冲正/调整金额
total_amount 本次合计
calculation_snapshot 输入、公式结果和版本
status 待入账、待审核、待结算、结算中、已结算、冻结、冲正、作废
settlement_statement_id 结算单
balance_bill_id 实际入用户余额后的 CRMEB 流水
idempotency_key 批次+持仓+节点+账本类型唯一
settled_at 完成时间

2. eb_farm_cloud_buyback

关键字段 说明
buyback_no 回购单号
batch_id / holding_id / user_id 来源
remaining_qty 用户最终未售数量
unit_principal 用户抢购单价
buyback_rate 快照比例
buyback_amount 回购金额
platform_stock_flow_id 转入平台库存流水
ledger_id 用户回购账本
status 待计算、待审核、待入账、已完成、冻结、作废
completed_at 完成时间

3. eb_farm_merchant_supply_ledger

商户云仓供货货款账本。

关键字段 说明
ledger_no 账本编号
merchant_id / supply_id / batch_id 结算主体和来源
cloud_order_item_id 首次购买明细
effective_qty 有效首次购买数量
supply_unit_price 供货价快照
gross_supply_amount 供货价 × 有效数量
refund_deduction 首次退款扣减
merchant_charge_amount 约定由商户承担的履约扣减
settle_amount 应结算货款
warehouse_accepted_at 入库/验收时间
eligible_at 满足观察期的时间
status 待条件、待结算、结算中、已结算、冻结、冲正、作废
merchant_statement_id 商户结算单
idempotency_key 唯一

4. eb_farm_cloud_ledger_adjustment

账本冲正、补记和人工差异修复申请。它保存“申请与审核事实”,最终金额由后端基于目标账本和当前数据重算,不能由前端直接指定后落账。

关键字段 说明
adjustment_no 唯一申请编号
target_type / target_id 用户账本、商户账本、回购单等
adjustment_type 冲正、补记、解冻、作废
reason / evidence 原因和证据
preview_snapshot 申请时差异和公式预览
requested_by / requested_at 申请人和时间
audited_by / audited_at 审核人和时间
audit_remark 审核意见
executed_ledger_id 实际生成的差额/冲正账本
version 乐观锁
status 待审核、通过、驳回、执行中、已执行、失败、作废

同一申请只能执行一次;申请人与审核人应按高风险权限矩阵分离。

八、农业资产与租地

1. eb_farm_farmeb_farm_zoneeb_farm_plot

核心字段
eb_farm_farm 名称、地址、经纬度、介绍、封面、负责人、状态
eb_farm_zone 农场 ID、名称、用途、面积、地图/示意图、状态
eb_farm_plot 农场 ID、区域 ID、地块编号、面积、可租面积、土壤/用途、位置、状态

地块编号在同一农场内唯一。

2. eb_farm_plot_occupancy

物理地块的一次占用周期。

关键字段 说明
plot_id 真实地块
land_order_id 租地业务订单
planting_batch_id 种植批次
allocation_type 整块、面积份额
occupied_area 占用面积
start_at / end_at 计划占用时间
actual_end_at 实际释放时间
status 已锁定、使用中、已释放、冻结、取消

需要通过事务和容量校验保证同一时间有效占用面积不超过地块可租面积。

3. eb_farm_cropeb_farm_land_plan

核心字段
eb_farm_crop 作物名称、品种、预计周期、单位、图片、状态
eb_farm_land_plan 套餐名称、农场/区域范围、分配方式、面积、周期、价格、交付数量/最低数量、交付单位、邮寄和异常规则、状态、版本

套餐与可选作物建议使用关联表 eb_farm_land_plan_crop

4. eb_farm_land_order

与 CRMEB 订单/订单明细关联的租地业务扩展。

关键字段 说明
land_order_no 业务编号
order_id / order_product_id CRMEB 交易关联
user_id / plan_id / crop_id 用户选择
promised_qty / promised_unit 交付承诺快照
delivered_qty / refunded_unfulfilled_qty 已履约与未履约退款
allocated_at 地块分配时间
expected_harvest_at 预计采收
status 租地订单状态
rule_snapshot 套餐完整快照

九、认养资产与订单

1. 基础表

核心字段
eb_farm_adoption_category 分类名称、分配模式建议、状态
eb_farm_breed 分类、品种、预计周期、预计产出、状态
eb_farm_enclosure 农场、区域、栏舍/蜂场编号、容量、状态
eb_farm_animal_asset 品种、唯一资产编号、耳标、出生/入场日期、栏舍、健康状态、当前状态
eb_farm_breeding_batch 品种、栏舍、总数量、可分配份额、开始/结束时间、状态
eb_farm_adoption_plan 套餐、分配模式、周期、价格、交付数量/最低数量、单位、邮寄和异常规则、版本

2. eb_farm_adoption_order

关键字段 说明
adoption_order_no 业务编号
order_id / order_product_id CRMEB 交易关联
user_id / plan_id 用户与套餐
allocation_mode 单体、批次份额
animal_asset_id 单体认养时使用
breeding_batch_id / share_qty 批次份额认养时使用
promised_qty / promised_unit 交付承诺
delivered_qty / refunded_unfulfilled_qty 履约汇总
allocated_at / expected_output_at 分配与预计产出
status 认养订单状态
rule_snapshot 套餐完整快照

单体认养需对有效分配关系建立排他约束;批次份额需使用事务校验总份额。

十、生产、产出、履约与溯源

1. eb_farm_production_batch

统一承载种植或养殖生产批次,或在技术评审后拆成两张表。

关键字段 说明
batch_no 生产批次编号
production_type 种植、养殖
farm_id / zone_id 农场与区域
plot_occupancy_id 种植使用
enclosure_id / breeding_batch_id 养殖使用
crop_id / breed_id 作物或品种
plan_start_at / plan_end_at 计划周期
actual_start_at / actual_end_at 实际周期
expected_output_qty / actual_output_qty 预计与实际产出
manager_id 负责人
status 计划、进行中、采收/产出中、完成、异常

2. eb_farm_production_event

关键字段 说明
production_batch_id 生产批次
animal_asset_id 个体事件可选
event_type 播种、浇水、施肥、饲喂、防疫、采收等
occurred_at 发生时间
operator_id 现场操作人
material_snapshot 物料/用量扩展
content 记录内容
media 图片/视频
visibility 内部、用户可见
publish_status 草稿、待审核、已发布、已撤回
approved_by / approved_at 审核信息
version 发布版本

3. eb_farm_output_batch

关键字段 说明
output_no 采收/产出批次编号
production_batch_id 来源生产批次
output_type / product_name / spec 产出信息
total_qty / qualified_qty / loss_qty 数量
available_qty / allocated_qty 可履约与已分配
produced_at / expire_at 生产与保质期
quality_status 待检、合格、不合格
warehouse_location 入库位置
status 待检、可分配、已分配完、冻结、关闭

4. eb_farm_output_allocation

把实际产出分配到租地/认养订单和普通商品。

关键字段 说明
output_batch_id 产出批次
business_type / business_id 租地订单、认养订单、商品批次等
allocated_qty 分配数量
fulfillment_id 邮寄履约关联
status 已分配、已出库、已取消

5. eb_farm_fulfillment

关键字段 说明
fulfillment_no 履约编号
business_type / business_id 租地、认养、云仓邮寄等
user_id 收件用户
sequence_no 第几次分批履约
planned_qty / shipped_qty 本次计划和实际数量
address_snapshot 地址
freight_rule_snapshot 运费规则
delivery_type 快递、自提
delivery_id / tracking_no CRMEB 物流关联
status 待分配、待出库、已发货、已签收、售后、完成

6. 溯源表

核心字段
eb_farm_trace_archive 档案编号、档案类型、生产/产出批次、当前发布版本、二维码内容、状态
eb_farm_trace_version 档案 ID、版本号、标题、展示快照、发布状态、审核人与时间
eb_farm_trace_material 档案/版本、材料类型、报告/证书编号、文件、出具机构、有效期
eb_farm_trace_link 档案与商品、SKU、云仓批次、订单明细、履约单之间的关联

十一、农业异常事件

eb_farm_exception_event

关键字段 说明
event_no 异常编号
event_type 减产、绝收、疾病、死亡、延期、品质、包裹、物流等
farm_id / production_batch_id 生产关联
asset_type / asset_id 地块、动物、批次等
business_type / business_id 受影响订单或履约
affected_qty 影响数量
reason / evidence 原因和证据
resolution_type 补足、替换、延期、补发、退款
resolution_detail 方案
approved_by / approved_at 审批
notified_at 用户通知
resolved_at 实际处理完成
status 待处理、待审核、处理中、已解决、已关闭

资产替换另建关系表或在事件扩展中明确 original_asset_idreplacement_asset_id,不能直接覆盖原资产。

十二、幂等、事件、任务、通知与权限支撑

这些表不替代云仓、订单、账本或农业业务表,只保障跨事务流程可恢复、可审计和可对账。

1. eb_farm_idempotency_record

关键字段 说明
scope / actor_type / actor_id 接口或命令作用域及操作者
request_id 客户端/调用方幂等键
request_hash 规范化请求摘要
response_status / response_snapshot 首次处理结果
business_type / business_id 产生的业务对象
locked_until / expired_at 执行租约与记录有效期
status 处理中、成功、失败、冲突

唯一约束:scope + actor_type + actor_id + request_id。相同键但请求摘要不同必须返回幂等冲突。

2. eb_farm_domain_outbox

关键字段 说明
event_id 全局唯一事件 ID
event_type / event_version 事件名和版本
aggregate_type / aggregate_id 聚合定位
trace_id / source 链路和来源
payload 最小事件载荷
occurred_at 业务事实发生时间
published_at / retry_count / next_retry_at 投递状态
last_error 最后失败摘要
status 待投递、投递中、已投递、失败、作废

唯一约束:event_id

3. eb_farm_event_consume_log

关键字段 说明
event_id / consumer_name 事件和消费者
event_type / event_version 消费版本
started_at / finished_at / duration_ms 执行时间
retry_count / next_retry_at 重试
result_business_key 业务结果幂等键
last_error 错误摘要
status 处理中、成功、待重试、失败、忽略

唯一约束:event_id + consumer_name

4. eb_farm_job_run

关键字段 说明
job_name / run_key 任务和本次运行键
cursor_value 本次/下次游标
lease_owner / lease_until 并发租约
scanned_count / success_count / failed_count 处理汇总
started_at / finished_at 运行时间
last_error 失败摘要
status 运行中、成功、部分失败、失败、取消

唯一约束:job_name + run_key

5. eb_farm_notification_log

关键字段 说明
template_code / channel 通知模板和渠道
receiver_type / receiver_id 接收人
business_type / business_id / business_key 业务来源
content_snapshot 实际发送内容快照
provider_message_id 第三方消息 ID
scheduled_at / sent_at 计划和发送时间
retry_count / last_error 重试与错误
status 待发、发送中、成功、失败、取消

唯一约束建议:template_code + channel + receiver_type + receiver_id + business_key

6. eb_farm_audit_log

关键字段 说明
operator_type / operator_id 平台、商户、服务人员或系统
action_code 稳定操作码
target_type / target_id 操作对象
before_snapshot / after_snapshot 关键字段前后值
reason / request_id / trace_id 原因和链路
ip / user_agent 操作来源
occurred_at 发生时间

审计日志不可物理删除,不允许通过普通 CRUD 接口修改。

7. eb_farm_service_scope

服务端客服、现场人员和仓库人员的数据范围。

关键字段 说明
service_id / merchant_id 现有服务人员及所属商户/平台
duty_code 平台客服、现场、仓库等职责
scope_type / scope_id 农场、区域、仓库、生产批次或商户
valid_from / valid_to 授权有效期
created_by 授权人
status 有效、停用

唯一约束建议:service_id + duty_code + scope_type + scope_id。写接口每次根据当前有效关系校验,不把长期范围只存入 Token。

十三、状态与字典管理

稳定的业务状态码应在代码常量/枚举和文档中维护,不建议让运营随意新增。以下内容可使用系统字典:

  • 作物、认养分类和品种。
  • 农事/养殖事件类型。
  • 异常事件类型和处理方式。
  • 产出单位和规格。
  • 报告/证书类型。

以下内容不得仅依赖可删除字典:

  • 订单状态。
  • 批次状态。
  • 账本状态。
  • 结算模式。
  • 库存池类型。
  • 去向类型。

十四、约束与一致性检查

  • 首次云仓订单明细只能存在一个最终去向。
  • 每个已发布活动 SKU 只能生成一个对应活动批次。
  • 活动 SKU、历史订单和批次以独立 activity_sku_id 关联,来源规格重建不得改变历史关系。
  • 需要补运费的邮寄选择只有在补运费成功后才能成为最终去向。
  • 代销批次开始后的持仓不得退回普通首次退款状态。
  • 用户收益分成率与平台收益分成率之和必须等于 100%,回购比例必须在 (0, 100%]
  • 代销持仓数量必须等于来源订单明细全部有效数量。
  • 批次各库存池数量之和必须与批次总量闭合。
  • 二次销售桥接 SKU 的 V1 库存来源必须为 cloud_only,不得与普通库存混合。
  • 二次桥接表、批次二次库存和 CRMEB 对外展示库存必须可对账。
  • 有效代销售出数量不得超过代销冻结数量。
  • 用户持仓累计分摊有效售出数量之和等于批次有效售出数量,允许最后一笔尾差调整。
  • 已返本金不得超过已售可返本金与回购款允许范围。
  • 用户已结算收益不得超过累计应得收益。
  • 回购完成数量不得超过最终未售数量。
  • 商户有效首次购买数量不依赖二次零售数量。
  • 地块有效占用容量不得超过物理地块可用容量。
  • 单体认养资产有效周期内不得重复分配。
  • 批次认养有效份额不得超过可分配份额。
  • 产出分配数量不得超过合格可用数量。
  • 租地/认养累计履约数量、未履约退款数量和剩余权益必须闭合。
  • 已发布溯源内容修改时必须新增版本。
  • 每个领域事件的同一消费者最多产生一次同业务结果。
  • 账本、库存和回购的历史流水不得通过更新原金额代替冲正。

十五、事务与幂等边界

后续技术设计至少为以下操作定义事务和幂等键:

  • 抢购下单锁定库存。
  • 支付成功转有效付款库存。
  • 未付款超时释放库存。
  • 用户确认去向。
  • 截止时间自动转代销。
  • 冻结批次代销数量并创建持仓。
  • 发布云仓二次可售库存并同步普通商城映射 SKU。
  • 二次零售按最早到期批次锁定库存。
  • 二次订单转有效销售。
  • 二次退款释放/冲减批次。
  • 进度节点生成累计差额账本。
  • 到期回购、库存转平台和用户回购款入账。
  • 商户首次购买货款生成与冲正。
  • 地块/认养资产分配。
  • 产出批次向订单分配。
  • Outbox 事件与引发事件的业务写入。
  • 用户/商户业务账本与 CRMEB 财务映射。

十六、下一轮技术评审问题

以下问题不改变业务口径,但需要在接口和代码改造设计前确认:

  • 活动 SKU 使用独立主键已经明确;仍需验证来源 value_idunique 在商品编辑、复制、删除后的具体变化,用于同步告警而非历史主键。
  • 云仓首次购买是否使用独立订单创建服务,还是在现有订单上增加业务扩展编排。
  • 邮寄补运费使用 CRMEB 哪类支付订单与退款能力。
  • 二次零售已确定在普通订单明细创建事务中锁定批次,支付只推进状态;仍需确定 cloud_only 映射 SKU 的建立和上下架流程。
  • 用户账本最终进入现有余额还是新增可提现余额子账户。
  • 商户供货账本与现有商户结算单如何关联,哪些字段可直接复用。
  • 生产批次采用种植/养殖两张表还是统一表加扩展表。
  • 当前项目的数据库升级脚本规范、回滚方案和历史数据初始化方式。
  • 大数据量下批次进度、用户持仓分摊采用实时计算还是汇总任务。

十七、关联文档

Clone this wiki locally