我正在编写一个应用程序,该应用程序将涉及每月(或每周)固定金额的定期计费,并且它可以持续到订阅被取消。客户可以提前几个时期付款。他可以取消订阅,然后在某些未付费期后回来。我需要系统让我知道某个时期何时过期。
所以我正在思考如何设计数据库(也许不是数据库问题,而是编程问题),
有人来过这种应用吗?采取了什么方法?
我正在编写一个应用程序,该应用程序将涉及每月(或每周)固定金额的定期计费,并且它可以持续到订阅被取消。客户可以提前几个时期付款。他可以取消订阅,然后在某些未付费期后回来。我需要系统让我知道某个时期何时过期。
所以我正在思考如何设计数据库(也许不是数据库问题,而是编程问题),
有人来过这种应用吗?采取了什么方法?
我认为你可能试图在设计上变得过于聪明并过度思考它。如果您考虑业务问题,则每个付款间隔实际上都是一张发票。为什么不直接创建一个发票表,并让计划作业根据每个帐户的周期以及在该间隔内是否处于活动状态,以特定间隔插入发票。
通过拥有一个实际的发票行,您将获得一个 InvoiceID,您可以在向客户寻求付款时参考该 ID,并单独跟踪每个帐单的付款状态。
有时简单是最好的。
我认为你把它复杂化了。
创建表用户:
pk id_user
nm_user
fl_status (active, canceled, pendent, etc)
创建一个用户对多个订阅的表订阅:
pk id_subscription
fk id_user
fl_type (maybe there are different subscriptions, with different prices)
dt_in
dt_out
创建一个表支付一个订阅多个支付:
pk id_payment
fk id_subscription
fl_type (card, payment order, something else)
fl_status (generated, sent, confirmed, canceled because of subscription canceled, canceled because of something else, etc)
dt_generated
dt_sent
dt_confirmed
dt_canceled
[I think you will need another fields to follow and confirm the payment, but it depends of your payment model)
现在您将需要构建一些每天在特定时间运行的机器人。
如果您获得所有活跃客户以及每个客户的最后一次付款,您将知道如果最后一次确认的付款与实际日期相比超过 x 天,是否需要生成新的付款(这取决于它是预付的、后付的, ETC)。如果是,则生成新的付款订单。
机器人将发送一封电子邮件或其他带有订单的东西(然后标记为)。
另一个机器人将使用您的付款模式确认付款。
当然,你需要很好地定义你的模型,因为每个用户状态都需要一个机器人来保持一切,直到它被取消或因为缺乏付款而被发送给法官。有很多工作要做,但没什么大不了的。
ps:如果涉及到一个更复杂的系统,数据库将持续存在,您将拥有您需要的所有信息,您有每个订单的日志,您知道每个订单发生了什么,因为它们有日期和状态。您可以估计每月有多少个到期日,一天后支付多少,两天后支付,依此类推。