6

我们只是在为我们的客户提供订阅的网络应用程序的规划阶段。订阅期各不相同,我们的客户可以无限期延长,但始终至少为一个月(30 天)。

当客户注册时,客户信息(帐单地址、电话号码等)存储在一个customers表中,并在该表中创建订阅subscriptions

id    |    start_date    |     end_date    | customer_id
--------------------------------------------------------
1     |    2010-12-31    |     2011-01-31  | 1

每个月我们都会遍历subscriptions表(最好是 cronjob)并为过去的订阅期创建发票,这些发票存放在他们自己的表中 - invoices. 根据客户的不同,发票是手动打印出来并通过邮件发送的,或者只是通过电子邮件发送给客户。

由于我们客户和产品的性质,我们需要提供多种不同的付款方式,包括电汇和卡付款,因此某些发票可能需要由我们的员工手动处理并登记为已付款。

每月15号,invoices循环表格,如果实际发票没有标注付款,则相应的订阅将被删除。如果已注册付款,end_datesubscriptions表中的 30 天会再增加 30 天(或者现在我们的客户选择的时间段)。

我们是否正在通过向前和向后增加日期来处理非付费客户和扩展订阅来解决问题?随着客户扩展订阅,添加新订阅会更好吗?

4

4 回答 4

5

只要您只有一个订阅类型,我认为没有必要为单个客户创建多个订阅记录。如果计费周期始终以固定价格按月计费,则更改订阅 end_date 就足够了。您只需要知道他的订阅何时用完,您就可以停止开发票。因此,如果他延长订阅期限,您只需更新一条记录,下个​​月即可恢复计费。

另外,我认为标记未付费订阅而不是删除它们会更好。如果客户错过了每月付款,请将订阅标记为未付款,以便停止未来的发票(和服务)。当/如果他们付款时,您取消标记订阅,以便恢复服务/下个月的发票。

于 2010-12-17T22:41:27.917 回答
5

我处理的其中一个应用程序有这个问题,我们通过跟踪用户的订阅来解决这个问题,但跟踪到期日期。然后,我们跟踪他们应该在他们的帐户上计费的日期 - 因此,如果我们想查看某人正在进行的订阅,我们可以检索他们帐户的最新订阅记录,如果我们想查看下次他们被收费时,我们只需检查他们的next_bill_date.

通过这种方式,您可以跟踪用户的订阅并查看他们何时升级/降级,但您的计费代码保持简单 - 您永远不必担心重叠(因为订阅没有结束日期要处理) .

于 2010-12-24T16:26:36.563 回答
3

我会使用订阅表来跟踪订阅。这意味着,当客户延长其订阅时,将插入一条新记录。

此外,我会在客户表中添加一个订阅结束日期列,以便在插入新订阅时通过触发器进行更新。

虽然这是一种非规范化,但这种方法将允许您的 Web 应用程序在没有任何连接的情况下检查客户对服务的访问(减少数据库服务器负载)。实际上,只有批处理必须查询订阅的表。

此外,保留订阅历史记录可能很有用

  • 如果与客户发生争议
  • 如果企业的业务逻辑发生变化(例如根据客户的忠诚度给予最佳客户折扣)
  • 用于未来统计

当您的用户群和订阅历史变得庞大而难以维护时,您可以决定定期备份,通过以方便的格式导出(我总是使用 xml,但我使用的一些企业更喜欢 csv)。

于 2010-12-24T13:50:02.263 回答
2

为了跟踪单个客户的订阅历史,我会说最好添加新订阅。

您还可以省去弄清楚为什么在 1 月 30 日订购的订阅会在 3 月到期(您知道,2 月是最短的月份……)。

于 2010-12-15T19:28:24.287 回答