2010-12-15 40 views
6

我們正處於一個Web應用程序的規劃階段,該應用程序向我們的客戶提供訂閱。訂閱期限不同,可由客戶無限期延長,但始終至少爲一個月(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天(或我們客戶選擇的時間段)。

我們是通過增加日期來向前還是向後來處理未付費客戶和延長訂閱來解決頭痛問題?隨着客戶擴展其訂閱,增加新的訂閱是否會更好?

回答

5

我工作的一個應用程序出現了這個問題,我們通過跟蹤用戶的訂閱來解決這個問題,但是不是跟蹤到期日期。然後,我們會跟蹤他們的帳戶應該記入的日期 - 因此,如果我們想要查看某人的訂閱情況,我們可以檢索其帳戶的最新訂閱記錄,並且如果我們想要查看下次他們會被計費時,我們只需檢查他們的next_bill_date

通過這樣做,您可以跟蹤用戶的訂閱並查看他們升級/降級的時間,但您的結算代碼很簡單 - 而且您不必擔心重疊(因爲訂閱沒有結束日期處理)。

2

爲了跟蹤單個客戶的訂閱歷史記錄,我認爲最好添加新的訂閱。

您還可以省去一些頭痛的問題,爲什麼在1月30日訂購的訂閱在3月份會到期(您知道,2月份是最短的月份......)。

+1

難道你不認爲會有新/舊訂閱之間的重疊問題嗎? – Industrial 2010-12-16 22:13:58

5

我不認爲有必要爲單個客戶創建多個訂閱記錄,只要您只有一個訂閱類型即可。如果結算週期總是按固定價格每月進行一次,則更改訂購end_date就足夠了。所有你需要知道的是當他的訂閱用完時,所以你可以停止開票。因此,如果他延長了訂閱時間,則只需更新一條記錄,以便下個月恢復記帳。

此外,我認爲這是一個更好的主意,可以標記未付費訂閱而不是刪除它們。如果客戶錯過每月付款,請將訂閱標記爲未付款,以便將來的發票(和服務)停止。如果他們確實付款,您將退訂訂閱,以便恢復服務/下個月的發票。

3

我會使用訂閱表來跟蹤訂閱。 這意味着,當客戶延長其訂閱時,會插入新記錄。

此外,我會在客戶表中添加一個subscription_end日期列,以通過插入新訂閱時的觸發器進行更新。

雖然這是一種反規範化,但這種方法將允許您的Web應用程序在沒有任何聯接(減少數據庫服務器負載)的情況下檢查客戶對服務的訪問權限。 事實上,只有批次才需要查詢訂閱的表。

此外,保持訂閱歷史可能是有用的

  • 在有爭議的情況下,與客戶
  • 在企業的業務邏輯(其他城市例如給予最好的客戶折扣的情況下,基於他們的忠誠度)
  • 爲今後統計

當你的用戶羣和訂閱歷史將成爲極大的十個分量,你可以決定PERIODICA通過以一種方便的格式導出來備份(我總是使用xml,但是我使用的一些企業首選csv)。