数据库 Schema · 酒库管理系统

MySQL 8.0+ · 多租户(所有业务表含 shop_id 隔离)· 启动时 GORM AutoMigrate
31 张表
365 个字段
来源:backend/schema/schema.sql + model AutoMigrate
PK 主键 UNIQUE 唯一键 INDEX 普通索引 FULLTEXT 全文索引 租户 多租户隔离列

租户 · 用户 · 安全

多租户根表与登录/会话/审计。所有业务表的 shop_id 都指向 shops。

shops 门店(租户)

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
nameVARCHAR(100)门店名称
codeVARCHAR(50)门店编号(唯一)
addressVARCHAR(255)NULL
phoneVARCHAR(30)NULL
manager_nameVARCHAR(50)NULL负责人
descriptionTEXTNULL店铺简介
logo_urlVARCHAR(500)门店 logo URL
business_licenseVARCHAR(500)NULL营业执照照片URL
shop_photosJSONNULL门店照片URL数组
custom_fieldsJSONNULL扩展字段
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
UNIQUE uk_code (`code`)
INDEX idx_deleted_at (`deleted_at`)

users 用户

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
usernameVARCHAR(50)
password_hashVARCHAR(255)bcrypt
real_nameVARCHAR(50)NULL
phoneVARCHAR(30)NULL
roleENUM('admin','operator','readonly','superadmin')operator
is_activeTINYINT(1)1
last_login_atDATETIMENULL最近登录时间
custom_fieldsJSONNULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
UNIQUE uk_shop_username (`shop_id`, `username`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_deleted_at (`deleted_at`)

user_sessions 登录会话

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
user_idBIGINT UNSIGNED
sidVARCHAR(64)嵌入 JWT 的会话标识
device_idVARCHAR(255)NULL
device_nameVARCHAR(255)NULL
platformVARCHAR(50)NULLwindows|macos|linux|android|ios|web
platform_classVARCHAR(20)NULLdesktop|mobile|web
ipVARCHAR(64)NULL
user_agentVARCHAR(512)NULL
refresh_jtiVARCHAR(64)NULL当前有效 refresh token 的 jti,用于轮换+重用检测
created_atDATETIMECURRENT_TIMESTAMP
last_seen_atDATETIMECURRENT_TIMESTAMP
revoked_atDATETIMENULL
revoked_reasonVARCHAR(30)NULLkicked|logout|admin|disabled|reuse|pwd_reset
revoked_byBIGINT UNSIGNEDNULL吊销操作人 user_id;系统/自助吊销为 NULL
refresh_exp_atDATETIMENULL
PRIMARY (`id`)
UNIQUE uk_session_sid (`sid`)
INDEX idx_session_shop_user (`shop_id`, `user_id`)
INDEX idx_session_class (`platform_class`)
INDEX idx_session_revoked (`revoked_at`)

login_attempts 登录尝试审计

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_codeVARCHAR(64)NULL
usernameVARCHAR(50)NULL
ipVARCHAR(64)NULL
user_agentVARCHAR(512)NULL
successTINYINT(1)0
reasonVARCHAR(40)NULLinvalid_shop|invalid_user|bad_password|locked|inactive|platform_not_allowed
created_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
INDEX idx_attempt_user (`username`, `created_at`)
INDEX idx_attempt_ip (`ip`, `created_at`)

授权 · 兑换券

门店授权与时长兑换券码池(ed25519/HMAC 已退役,改时长兑换券模型)。

licenses 许可证

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
license_keyVARCHAR(768)Ed25519 signed token
device_idVARCHAR(255)NULLdeprecated: use license_devices
typeENUM('trial','monthly','annual','lifetime')trial
tierVARCHAR(32)standard权益档位钩子(pro/max-like),当前默认 standard
expires_atDATETIMENULLNULL=永久
is_activeTINYINT(1)1
max_devicesINT3最大绑定设备数
featuresJSONNULL功能开关 {"finance":true}
activated_atDATETIMENULLdeprecated
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
UNIQUE uk_license_key (`license_key`)
INDEX idx_shop_id (`shop_id`)

license_devices 许可证设备绑定

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
license_idBIGINT UNSIGNED
shop_id 租户BIGINT UNSIGNED
device_idVARCHAR(255)
device_nameVARCHAR(255)NULL
platformVARCHAR(50)NULLwindows|macos|android|ios|web
activated_atDATETIMECURRENT_TIMESTAMP
last_seen_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
UNIQUE uk_license_device (`license_id`, `device_id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_license_id (`license_id`)

license_codes 兑换券码池

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
codeVARCHAR(32)归一化大写无连字符
typeENUM('trial','monthly','annual','lifetime')annual计费/时长标签
tierVARCHAR(32)standard档位钩子(pro/max-like),当前默认 standard
duration_daysINT0授予时长;0=永久(lifetime)
max_devicesINT0授予设备上限;0=不改变现值
statusENUM('unused','redeemed','void')unused
redeemed_shop_idBIGINT UNSIGNEDNULL被哪个门店兑换
redeemed_atDATETIMENULL
redeemed_device_idVARCHAR(255)NULL兑换设备(审计)
batchVARCHAR(64)NULL发放批次/活动名
noteVARCHAR(255)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
UNIQUE uk_code (`code`)
INDEX idx_status (`status`)
INDEX idx_redeemed_shop (`redeemed_shop_id`)

license_purchases 在线购买/续费记录

pay 收款中枢:契约见 ~/code/pay-contract(v1.0.0)。out_trade_no = pay 订单号,兼作对账键与幂等键(同一单只续期一次);amount 为 pay 下单响应回传的权威金额,webhook 回调时逐分核对。
列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
user_idBIGINT UNSIGNED下单管理员
product_biz_codeVARCHAR(64)套餐稳定码:monthly_standard / annual_standard / monthly_pro / annual_pro
amountVARCHAR(16)NULLpay 下单回传金额,如 2999.00
out_trade_noVARCHAR(64)NULLpay 订单号(对账+幂等键)
statusENUM('pending','paid','failed')pending
trade_noVARCHAR(64)NULL渠道交易号(支付宝/微信)
channelVARCHAR(16)NULL
paid_atDATETIMENULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL软删除
PRIMARY (`id`)
UNIQUE uk_out_trade_no (`out_trade_no`)
INDEX idx_shop (`shop_id`)
INDEX idx_status (`status`)

商品主数据

products 每行 = 一个特有产品/序列号(非 SKU),是商品信息的单一来源。基础数据字典为入库选文本服务。

products 商品

单一来源铁律:批次号 batch_no、生产日期 production_date、进价、图片、public_id 均以此表为准。每行 = 一个序列号(uk_product_code 同店唯一)。
列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
codeVARCHAR(50)NULL商品编号
barcodeVARCHAR(100)NULL条码
nameVARCHAR(200)商品名称
seriesVARCHAR(100)NULL系列
specVARCHAR(100)NULL规格
unitVARCHAR(20)NULL单位
category_idBIGINT UNSIGNEDNULL
brandVARCHAR(100)NULL品牌
purchase_priceDECIMAL(16,2)NULL参考进价
sale_priceDECIMAL(16,2)NULL参考售价
public_idCHAR(36)UUID,公开URL使用
min_stockINT0库存预警值
descriptionTEXTNULL商品描述
custom_fieldsJSONNULL动态扩展字段
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_category (`category_id`)
INDEX idx_deleted_at (`deleted_at`)
UNIQUE uk_product_code (`shop_id`, `code`)
UNIQUE uk_public_id (`public_id`)
FULLTEXT ft_name (`name`)

product_categories 商品分类

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
nameVARCHAR(100)
parent_idBIGINT UNSIGNEDNULL父分类,支持二级
sort_orderINT0
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)

product_images 商品图片

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
product_idBIGINT UNSIGNED
shop_id 租户BIGINT UNSIGNED
urlVARCHAR(500)相对路径,如 /images/products/1/xxx.jpg
sort_orderINT0
created_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
INDEX idx_product_id (`product_id`)
INDEX idx_shop_id (`shop_id`)

product_name_options 商品名称选项

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
codeVARCHAR(50)NULL选项编号
nameVARCHAR(200)名称
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_deleted_at (`deleted_at`)

product_series_options 商品系列选项

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
codeVARCHAR(50)NULL选项编号
nameVARCHAR(200)系列名称
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_deleted_at (`deleted_at`)

product_spec_options 商品规格选项

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
codeVARCHAR(50)NULL选项编号
nameVARCHAR(200)规格名称
quantityINT0单品数量
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_deleted_at (`deleted_at`)

product_origin_options 商品产地选项(基础数据·AutoMigrate)

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED租户隔离
codeVARCHAR(50)选项编号
nameVARCHAR(200)名称
remarkVARCHAR(500)
created_at / updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL软删除

product_shelf_life_options 商品保质期选项(如「24个月」「无限期」·AutoMigrate)

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED租户隔离
codeVARCHAR(50)选项编号
nameVARCHAR(200)名称
remarkVARCHAR(500)
created_at / updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL软删除

product_storage_options 商品储存条件选项(如「阴凉避光」·AutoMigrate)

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED租户隔离
codeVARCHAR(50)选项编号
nameVARCHAR(200)名称
remarkVARCHAR(500)
created_at / updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL软删除

product_description_docs 商品介绍文档(富文本·AutoMigrate)

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED租户隔离
titleVARCHAR(200)标题
contentTEXT正文
remarkVARCHAR(500)
created_at / updated_at / deleted_atDATETIME

仓库 · 往来单位

warehouses 仓库

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
nameVARCHAR(100)
locationVARCHAR(200)NULL
is_defaultTINYINT(1)0
custom_fieldsJSONNULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)

partners 往来单位

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
codeVARCHAR(50)NULL
nameVARCHAR(200)
typeSET('supplier','customer')supplier可同时是供应商和客户
contactVARCHAR(50)NULL联系人
phoneVARCHAR(30)NULL
addressVARCHAR(255)NULL
bank_accountVARCHAR(100)NULL银行账号
statusENUM('enabled','disabled')enabled正常/禁用
custom_fieldsJSONNULL
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_deleted_at (`deleted_at`)

出入库单据

单据明细含「快照列」(product_code/name/series/spec/batch_no/production_date):导入/审核时拷贝,作历史保真+显示兜底。

stock_in_orders 入库单

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
order_noVARCHAR(50)入库单号
typeVARCHAR(30)purchase入库类型: purchase采购/return退货/other其他
warehouse_idBIGINT UNSIGNED
partner_idBIGINT UNSIGNEDNULL供应商
operator_idBIGINT UNSIGNED经办人
creator_idBIGINT UNSIGNEDNULL制单人
reviewer_idBIGINT UNSIGNEDNULL审核人
statusENUM('draft','pending','approved','rejected')draft
order_dateDATE
cost_totalDECIMAL(16,2)0应付合计=Σ总进价(2026-07 消歧,旧列 total_amount 弃用待删)
reviewed_atDATETIMENULL
custom_fieldsJSONNULL
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
UNIQUE uk_order_no (`shop_id`, `order_no`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_warehouse (`warehouse_id`)
INDEX idx_order_date (`order_date`)
INDEX idx_status (`status`)

stock_in_items 入库单明细

快照列:product_code/product_name/series/spec/batch_no/production_date 在导入/录入时拷贝,product_id 可为 0(历史导入占位)。库存页的批次/生产日期实际从这里取(见 inventories 说明)。
列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
order_idBIGINT UNSIGNED
shop_id 租户BIGINT UNSIGNED
product_idBIGINT UNSIGNED
product_codeVARCHAR(50)NULL商品编号(源流水号,历史导入)
product_nameVARCHAR(255)NULL商品名称(历史导入快照)
seriesVARCHAR(100)NULL系列(历史导入快照)
specVARCHAR(100)NULL规格(历史导入快照)
quantityDECIMAL(12,3)数量
cost_priceDECIMAL(16,2)0进价·单瓶(旧列 unit_price 弃用待删)
cost_amountDECIMAL(16,2)0总进价=quantity×cost_price(旧列 total_price 弃用待删)
batch_noVARCHAR(50)NULL批次号
production_dateDATENULL生产日期
expire_dateDATENULL有效期
custom_fieldsJSONNULL
remarkVARCHAR(255)NULL
PRIMARY (`id`)
INDEX idx_order_id (`order_id`)
INDEX idx_shop_product (`shop_id`, `product_id`)

stock_out_orders 出库单

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
order_noVARCHAR(50)
typeVARCHAR(30)salesale销售/return退货/other其他
warehouse_idBIGINT UNSIGNED
partner_idBIGINT UNSIGNEDNULL客户
operator_idBIGINT UNSIGNED
creator_idBIGINT UNSIGNEDNULL制单人
reviewer_idBIGINT UNSIGNEDNULL
statusENUM('draft','pending','approved','rejected')draft
order_dateDATE
sale_totalDECIMAL(16,2)0应收合计=Σ售价小计(旧列 total_amount 弃用待删)
profit_totalDECIMAL(16,2)0总利润=Σ(售价>0?(售价-成本)×数量:0),建单落库、确认售价/进价联动重算;仅管理员可见(operator 响应抹零)
reviewed_atDATETIMENULL
custom_fieldsJSONNULL
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
deleted_atDATETIMENULL
PRIMARY (`id`)
UNIQUE uk_order_no (`shop_id`, `order_no`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_warehouse (`warehouse_id`)
INDEX idx_order_date (`order_date`)
INDEX idx_status (`status`)

stock_out_items 出库单明细

当前问题相关:出库行快照 batch_no/production_date 在 App 建单时常为空(选货按 product 聚合、未带批次)。打印回退到 products 主记录——若该 product 也没填,就显示空白,但库存页仍能显示(取自入库明细)。cost_price=成本、sale_price=售价(2026-07 已消歧改名)。
列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
order_idBIGINT UNSIGNED
shop_id 租户BIGINT UNSIGNED
product_idBIGINT UNSIGNED
product_codeVARCHAR(50)NULL商品编号(源流水号,历史导入)
product_nameVARCHAR(255)NULL商品名称(历史导入快照)
seriesVARCHAR(100)NULL系列(历史导入快照)
specVARCHAR(100)NULL规格(历史导入快照)
quantityDECIMAL(12,3)
cost_priceDECIMAL(16,2)0成本单价·入库成本快照(旧列 unit_price 弃用待删;仅管理员可见)
sale_priceDECIMAL(16,2)0售价(出库实际销售单价,应收按售价×数量)
cost_amountDECIMAL(16,2)0成本小计=quantity×cost_price(旧列弃用待删;仅管理员可见)
sale_amountDECIMAL(16,2)0售价小计=quantity×sale_price(待定价=0)
batch_noVARCHAR(50)NULL批次号
production_dateDATENULL生产日期
custom_fieldsJSONNULL
remarkVARCHAR(255)NULL
PRIMARY (`id`)
INDEX idx_order_id (`order_id`)
INDEX idx_shop_product (`shop_id`, `product_id`)
INDEX idx_so_items_shop_code (`shop_id`, `product_code`)

库存 · 流水 · 盘点

库存为批次模式:每条 inventories 记录 = 一个入库批次,经 stock_in_item_id 关联其入库明细。

inventories 库存批次记录

批次模式 + 显示口径:每行 = 一个入库批次。列表查询的批次/生产日期取 COALESCE(DATE(sii.production_date), DATE(inv.production_date))COALESCE(NULLIF(sii.batch_no,''), inv.batch_no)——优先关联入库明细 sii不读 products。本表 batch_no/production_date 为快照兜底。
列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC主键
shop_id 租户BIGINT UNSIGNED所属门店(多租户隔离,所有查询必带)
warehouse_idBIGINT UNSIGNEDNULL所在仓库;NULL 表示历史导入未指定仓
product_idBIGINT UNSIGNEDNULL指向 products 的特有产品/序列号;历史导入占位单据可为 NULL/0
stock_in_item_idBIGINT UNSIGNEDNULL来源入库明细行。批次/生产日期显示优先从此关联取(sii),是本表的「真值上游」
inventory_check_idBIGINT UNSIGNEDNULL若由盘点调整产生,指向盘点单 inventory_checks
quantityDECIMAL(12,3)0当前批次结存数量(出入库审核时在事务内增减)
statusENUM('stock','on_sale','sold')'stock'库存三态(2026-07-07):stock=库存(在库不公开,默认)/ on_sale=在售(公开酒单展示,抽屉 switch 手动挂售)/ sold=已售(出库审核扣光自动置入,留痕不软删;列表默认排除,点已售卡才显示)。公开店铺页只列 on_sale;索引 idx_inv_status
product_codeVARCHAR(50)NULL商品编号快照(拷贝自入库时),product 缺失时兜底显示
product_nameVARCHAR(200)NULL商品名称快照,兜底显示
seriesVARCHAR(100)NULL系列快照(语义=型号),兜底显示
specVARCHAR(100)NULL规格快照(语义=版本),兜底显示
unitVARCHAR(20)NULL单位快照
warehouse_nameVARCHAR(100)NULL仓库名快照,warehouse 关联缺失时兜底
unit_priceDECIMAL(16,2)NULL入库成本单价快照
production_dateDATENULL生产日期快照兜底(显示口径见上方:优先取 stock_in_item)
batch_noVARCHAR(50)NULL批次号快照兜底(显示口径见上方:优先取 stock_in_item)
supplier_nameVARCHAR(200)NULL供应商名快照(入库来源)
remarkVARCHAR(500)NULL备注
created_atDATETIMECURRENT_TIMESTAMP创建时间(FIFO 排序依据 idx_fifo 用到)
updated_atDATETIMECURRENT_TIMESTAMP更新时间
deleted_atDATETIMENULL软删除标记,NULL=有效
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_fifo (`shop_id`, `warehouse_id`, `product_id`, `created_at`)
INDEX idx_shop_wh_product (`shop_id`, `warehouse_id`, `product_id`)
INDEX idx_stock_in_item (`stock_in_item_id`)
INDEX idx_inventory_check (`inventory_check_id`)
INDEX idx_deleted_at (`deleted_at`)

inventory_logs 库存流水

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
warehouse_idBIGINT UNSIGNED
product_idBIGINT UNSIGNED
directionENUM('in','out')
quantityDECIMAL(12,3)
qty_beforeDECIMAL(12,3)变动前数量
qty_afterDECIMAL(12,3)变动后数量
ref_typeVARCHAR(30)stock_in/stock_out/check
ref_idBIGINT UNSIGNED关联单据ID
operator_idBIGINT UNSIGNEDNULL
created_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
INDEX idx_shop_product (`shop_id`, `product_id`)
INDEX idx_ref (`ref_type`, `ref_id`)

inventory_checks 库存盘点单

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
check_noVARCHAR(50)
warehouse_idBIGINT UNSIGNED
operator_idBIGINT UNSIGNED
statusENUM('draft','completed')draft
check_dateDATE
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
updated_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
UNIQUE uk_check_no (`shop_id`, `check_no`)
INDEX idx_shop_id (`shop_id`)

inventory_check_items 盘点明细

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
check_idBIGINT UNSIGNED
shop_id 租户BIGINT UNSIGNED
product_idBIGINT UNSIGNED
system_qtyDECIMAL(12,3)系统数量
actual_qtyDECIMAL(12,3)实际盘点数量
diff_qtyDECIMAL(12,3)计算列差异
remarkVARCHAR(255)NULL
PRIMARY (`id`)
INDEX idx_check_id (`check_id`)

财务

finance_records 财务流水

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
partner_idBIGINT UNSIGNEDNULL
typeENUM('receivable','payable','receipt','payment')应收/应付/收款/付款
amountDECIMAL(16,2)
balanceDECIMAL(16,2)操作后余额
statusENUM('open','closed')open结清状态(payable/receivable 有效)
ref_typeVARCHAR(30)NULL关联单据类型
ref_idBIGINT UNSIGNEDNULL
operator_idBIGINT UNSIGNED
record_dateDATE
custom_fieldsJSONNULL
remarkVARCHAR(500)NULL
created_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_partner (`partner_id`)
INDEX idx_record_date (`record_date`)

配置 · 运维 · 反馈

number_rules 单号规则

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
shop_id 租户BIGINT UNSIGNED
typeVARCHAR(30)stock_in/stock_out/check
prefixVARCHAR(20)前缀
current_noINT0当前序号
date_formatVARCHAR(20)YYYYMMDD日期格式
updated_atDATETIMECURRENT_TIMESTAMP
PRIMARY (`id`)
UNIQUE uk_shop_type (`shop_id`, `type`)

feedbacks 用户意见反馈

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
created_atDATETIMECURRENT_TIMESTAMP
shop_id 租户BIGINT UNSIGNED
shop_codeVARCHAR(50)NULL
user_idBIGINT UNSIGNEDNULL
usernameVARCHAR(50)NULL
roleVARCHAR(20)NULL
typeVARCHAR(20)bug / suggestion
contentTEXT
imagesJSON
app_versionVARCHAR(30)NULL
platformVARCHAR(20)NULL
client_ipVARCHAR(60)NULL
statusVARCHAR(20)new
PRIMARY (`id`)
INDEX idx_shop_id (`shop_id`)
INDEX idx_user_id (`user_id`)
INDEX idx_type (`type`)
INDEX idx_status (`status`)

error_reports 客户端异常上报(AutoMigrate,无 shop 软删除)

列名类型可空默认说明
id PKBIGINT UNSIGNEDAUTO_INC
error_typeVARCHAR(30)flutter_error / zone_error / caught_exception
app_versionVARCHAR(30)
platformVARCHAR(20)ios/android/web/windows/macos
usernameVARCHAR(50)
shop_id 租户BIGINT UNSIGNED
shop_noVARCHAR(50)
roleVARCHAR(20)
product_infoVARCHAR(200)设备/系统信息
client_ipVARCHAR(60)
error_msgTEXT错误信息
stack_traceTEXT堆栈
occurred_atDATETIME发生时间
created_atDATETIME上报时间

生成时间:2026-06-26 · 字段以 schema.sql 为准;产地/保质期/储存/介绍文档/异常上报等表由 GORM AutoMigrate 建,列信息取自 backend/internal/model/