【问题标题】:Application logic for invoicing and subscriptions?发票和订阅的应用逻辑?
【发布时间】:2010-12-15 19:11:54
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: mysql logic subscription invoices


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

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

        【讨论】:

          【解决方案4】:

          对于跟踪单个客户的订阅历史,我认为最好添加新订阅。

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

          【讨论】:

          • 您不认为新旧订阅之间存在重叠问题吗?
          猜你喜欢
          • 2012-01-26
          • 2021-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-09
          • 1970-01-01
          • 2020-09-03
          相关资源
          最近更新 更多