请教一笔订单分两次或多次支付,应该怎么设计?

一笔商城订单,用户先支付一部分预付款,然后等到活动开始后再支付剩余尾款,请问这种情况应该怎么分订单?

1. 一个订单号只可以支付一次,那尾款怎么支付呢?再分一笔订单出来吗?
2. 那以哪个订单号为准呢?
3. 如果以第一个订单号为准,是否需要告知用户第二笔尾款支付的订单号?
4. 如果涉及到退款的话要分批次退吗?

如果分订单的话,是不是要设计一个 尾款 的从表,订单表 与它是一对多关系?

第一次做这种需求,希望大家能给个思路,感谢 :heart:

悲观者永远正确,乐观者永远前行。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

我们之前也是这样, 同一个订单可以分多笔不同渠道,不同支付方式。当时的表设计是: 订单,订单收款单,收款流水。关系:订单 1 v 1 订单收款单 1 v N 流水。 当 收款流水金额 === 订单收款单金额时, 确认收完,更新收款单,订单。调用第三方发起支付使用流水的(id/uuid/snowflake), 创建流水根据收款单剩余最大金额创建。

3年前 评论
MArtian (楼主) 3年前
讨论数量: 12

我们之前也是这样, 同一个订单可以分多笔不同渠道,不同支付方式。当时的表设计是: 订单,订单收款单,收款流水。关系:订单 1 v 1 订单收款单 1 v N 流水。 当 收款流水金额 === 订单收款单金额时, 确认收完,更新收款单,订单。调用第三方发起支付使用流水的(id/uuid/snowflake), 创建流水根据收款单剩余最大金额创建。

3年前 评论
MArtian (楼主) 3年前

如果是我,我会把预付款订单和正常订单分开表。 预付款订单两个价格,一个是预付款价格,一个是尾款,然后status控制订单状态

3年前 评论
MArtian (楼主) 3年前
channel (作者) 3年前
sunny123456 3年前
颠倒的玉石

简单看成个分期,分两期

3年前 评论

支付订单号和订单的订单号分开

3年前 评论

这种突然想到,这种该一个订单号里放两个子订单号吧

3年前 评论

我们之前也是这样, 同一个订单可以分多笔不同渠道,不同支付方式。当时的表设计是: 订单,订单收款单,收款流水。关系:订单 1 v 1 订单收款单 1 v N 流水。 当 收款流水金额 === 订单收款单金额时, 确认收完,更新收款单,订单。调用第三方发起支付使用流水的(id/uuid/snowflake), 创建流水根据收款单剩余最大金额创建。

3年前 评论
MArtian (楼主) 3年前

感觉大家的做法都一样,只是表的名称有点区别吧,有的叫子母表, 有的叫分期,我们叫流水 :joy:

3年前 评论
sanders

一般分为订单表和流水表;如果再考虑售后,还得有售后单表,流水表中的金额还可以为负数。

3年前 评论
hhhhkkk 3年前

@22 @hhhhkkk @sanders 请教一下,分订单表和流水表,那么在发起支付的时候(支付宝,微信创建的订单)订单号就填的是流水号吗?就是把流水号作为订单号创建支付宝,微信的订单,是这样吗?

3年前 评论
hhhhkkk 3年前
sanders 3年前

支付表叫商户订单,面向支付平台,商户订单号和平台订单号是对应的。 而商城订单是业务订单,面向的是客户,是通过查支付订单来判断业务订单的支付状态。 所以 “一个订单号只可以支付一次” 是混了概念。

3年前 评论
MArtian (楼主) 3年前

分两个订单号?
1 -> 1.1,1.2,1.3

3年前 评论

是不是可以把预付款看成,购买了一张只能购买响应成品的优惠券,优惠券中有一种类型叫预付款,这样不就可以了吗?

3年前 评论

之前公司也有这个业务,当时是订单是一个表(可以存每次订单的总价格,当前价格),建一个子订单表(真正支付的订单表)。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!