我们正处于向客户提供订阅的网络应用的计划阶段。订阅期各不相同,并且可以由我们的客户无限期延长,但始终至少为一个月(30天)。
当客户注册时,客户信息(账单地址,电话号码等)存储在customers
表中,并在subscriptions
表中创建预订:
id | start_date | end_date | customer_id
--------------------------------------------------------
1 | 2010-12-31 | 2011-01-31 | 1
每个月,我们都会遍历
subscriptions
表(最好是cronjob),并为过去的订阅期创建发票,这些发票存放在自己的表invoices
中。根据客户的不同,发票可以手动打印出来并通过邮件发送,也可以仅通过电子邮件发送给客户。由于客户和产品的性质,我们需要提供多种不同的付款方式,包括电汇和卡付款,因此某些发票可能需要由我们的员工手动处理并注册为已付款。
每月的15日,循环
invoices
表,如果没有为实际发票标记付款,则相应的订阅将被删除。如果已注册付款,则end_date
表中的subscriptions
会再增加30天(或客户现在选择的期间)。我们是否在通过增加前后日期来处理非付费客户并扩展订阅来解决头痛问题?在客户扩展其订阅时添加新的订阅会是一个更好的主意吗?
最佳答案
我处理过的一个应用程序遇到了这个问题,我们通过跟踪用户拥有什么订阅来解决此问题,但没有跟踪到期日期。然后,我们会跟踪他们应该在其帐户上计费的日期-因此,如果我们想查看某人的订阅状态,我们可以检索他们帐户的最新订阅记录,以及是否要查看该帐户的最新订阅记录下次向他们收取费用时,我们只需检查其next_bill_date
即可。
通过这种方式,您可以跟踪用户的订阅并查看他们何时升级/降级,但是您的帐单代码保持简单-无需担心重叠(因为订阅没有结束日期要处理) 。
关于mysql - 发票和订阅的应用逻辑?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4453854/