商城 0.1.377 起,采购价和售价支持最多八位有效小数,例如 0.0000825 元。商品、货源资料、会员报价、订单单价及调价记录显示精确价格;余额、支付、退款及账本继续以整数分结算。历史整分商品和已生成订单保持原价,旧六位价格的模板计算规则保持。
计价规则
精确单价先乘数量,再将整单各行相加,最后向上取到分,不先把单价取到一分。
| 购买内容 | 精确合计 | 实收 |
|---|---|---|
| 0.000300 元 × 101 件 | 0.030300 元 | 0.04 元 |
| 两行各 0.000300 元 × 101 件 | 0.060600 元 | 0.07 元 |
| 0.000201 元 × 1000000 件 | 201 元 | 201.00 元 |
| 0.0000825 元 × 10000000 | 825 元 | 825.00 元 |
整单的分按各行小数余数分配,相同余数按订单行序分配。因此两行的小计可能相差一分,极低金额行也可能是零分。以服务端行小计和总金额为准。分配在下单时冻结,付款、重复回调及退款使用同一快照,不重新按当前售价计价。
上游支持普通小数、数字字符串及科学计数法。易客、亿乐及新版卡速腾同系统采购保留最多八位有效小数;超出支持精度时拒绝导入并提示处理,不自动改变成本。原始价格保留在货源快照中,不换算商品计量单位。其他渠道继续按各自既有协议解释单位和取整规则;整数分字段不会被解释成元。余额不足一分时不会向上增加可用额度。
数量限制
易客、亿乐商品详情的最低购买量、最高购买量及购买倍数随规则导入,在货源详情、商品购买页、购物车和确认订单页显示。前后端均校验,采购前还会按上游当前合同复核。
- 每行及整单数量硬上限为 1000000000,但只有明确的有效商品规则允许使用大数量;未设置上限的旧商品仍按默认 1000000。易客最大数量
-1表示上游不限量,本地仍执行硬上限。亿乐及其他渠道按各自协议上限处理,上游更低的限制优先。 - 本地卡密一次交付上限仍为 1023,不突破交付容量。
- 数量必须符合上游倍数,端点按合法倍数收敛。例如最低 11、最高 99、倍数 10,实际可选 20~90。
- 规则矛盾、无合法数量或关键字段缺失时明确报错,不能擅自取消限制;详情完整后才允许导入。
- 商户改过的资料按跟随策略保护;上游采购限制仍需满足,不能用旧合同盲目采购。
模板和持续维护
固定加价、最低毛利及人工覆盖价的配置仍以整分为单位,超两位输入会拒绝,避免静默丢精度。商品单价可直接填写最多八位有效小数,也可通过百分比加价/折扣派生。
含不足一分单价的商品,模板默认取整单位 0.01 表示保留精确单价。六位单价仍按原六位计算;七、八位单价使用八位计算精度。大于 0.01 的显式取整单位按原值向上取整。原本整分商品保持原规则,保存前核对真实价格预览。
已关联商品成本变化按精确单价识别,例如 0.000201 → 0.000202 不会因同为一分投影而漏报。仍跟随上游的内容自动更新,商户改过的内容默认保留。价格关系不合法时更新整体拒绝,避免留下部分修改。
API 兼容与升级
旧 *Cents 字段始终是整数分;精确商品另有十进制字符串,旧单价分字段仅是向上取分的兼容投影,不能拿它乘数量。第三方读取新字段并采用服务端总金额,见开放 API 文档。同系统双方应升级到支持精确价格的版本;旧客户端只读整数分字段不能正确表达不足一分商品。
迁移 124_precise_unit_prices.sql 只增加可空精确价格列,旧 SKU 保持 NULL,旧分字段不改单位。更新前备份程序和数据库;回退必须使用配套程序及数据库备份,不能让不识别新价格的旧程序继续处理更新后生成的精确商品和订单。
易客库存 -1 按其不限库存合同处理,其他负数按不可售处理。真实采购仍受上游账户、库存、销售状态和网络约束。