Date: 2026-07-24
DDL 写入
updatesql/sql.md,由开发者手动执行(项目规范)。用户级数据用info_前缀(与info_address/info_user一致),区别于订单级pos_order_invoice。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | BIGINT PK AUTO | 主键 |
| user_id | BIGINT NOT NULL | 用户id(JWT 隔离;写库前强制以 token 解析值覆盖) |
| title_name | VARCHAR(50) NOT NULL | 抬头备注名(如「公司-美食達」「个人-手机条码」),客户端列表展示用 |
| category | VARCHAR(8) NOT NULL | 类型:B2C=个人 / B2B=公司 |
| buyer_name | VARCHAR(100) NOT NULL | 买方名称:B2C=个人姓名 / B2B=公司全名 |
| buyer_ubn | VARCHAR(16) | 统一编号(统编,8 位数字,含前导零须字符串);仅 B2B |
| buyer_email | VARCHAR(200) | 接收邮箱;B2B 必填 / B2C 仅 ezPay 会员载具(2) 时必填 |
| carrier_type | VARCHAR(8) | 载具类型 0手机条码 / 1自然人凭证 / 2ezPay 会员;仅 B2C |
| carrier_num | VARCHAR(64) | 载具号码(随 carrier_type) |
| create_time | DATETIME DEFAULT CURRENT_TIMESTAMP | 创建时间(DB 自动) |
| update_time | DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间(DB 自动) |
不设
create_by/update_by:App 端走 JWT(非 ruoyi 登录用户名),无意义字段,从简。create_time/update_time由 DBDEFAULT/ON UPDATE自动维护,代码不手动赋值。
索引:KEY idx_user (user_id)(用户隔离查询)。
约束约定(应用层校验,非 DB 约束):
info_address 一致)。carrier_type / carrier_num 必空;B2C 时 buyer_ubn 必空。contracts/api.md。info_user):提供 userId(JWT claim id → JwtUtil.getusid)。ApplyInvoiceDto / PosOrderInvoice:不改。开票时客户端从选中抬头取字段填入 ApplyInvoiceDto,开票链路完全不动。