PHP - 银行就像月度交易一样

时间:2011-06-08 09:47:22

标签: php mysql calendar cron banking

我不确定要输入哪些搜索字词。

我正在建立一个让代理商记录租金的基本系统,我这样做没问题。

下一步是做租金到期时的可重复交易,是他们的任何教程或建议我应该如何完成这项专长?

例如:

租客1需要在每个月的第一天支付2英镑的租金。

租户2需要每四周支付1英镑的租金。

3 个答案:

答案 0 :(得分:1)

在表格中,您将拥有

T1:
Tenant_id | repeatable | next_due

在另一张表中,你将有

T2:
Tenant_id | Rent_date

使用如下查询:

SELECT 
  *
FROM
T1 JOIN
  (SELECT
    tenant_id, MAX(Rent_date) LastRent
  FROM
    T2
  GROUP BY 
    tenant_id
  ) MaxT2 on T1.tenant_id = MaxT2.tenant_id
WHERE
  MaxT2.LastRent + repeatable > T1.next_due

当您在此SELECT中找到某些内容时,将当前费率的交易插入T2,并使用Rent_date + repeatable插入T1更新next_due

将此脚本放入文件并使用cron - 使其每天运行(最好在早上)。

这只是一个快速的答案。您将需要处理可重复的字段(以表示例如天数,周数或每月的第10天)。

答案 1 :(得分:0)

你应该使用crontabs来完成这项任务,

# m h dom mon dow user  command
17 *    * * *   root    php /path/to/hourly.php
25 6    * * *   root    php daily.php
47 6    * * 7   root    php weekly.php
52 6    1 * *   root    php monthly.php
像这样......

答案 2 :(得分:0)

您可以为每个付款记录保留四个字段 - payment_daterecurring_days_intervaloweprice。 然后,在每天运行的cronjob上,检查我们是否达到了天数间隔,如果是,则将price添加到当前owe。一旦该人支付了部分或全部账单,您就可以将其从owe减去。

您应该每天运行的查询应该是:

UPDATE payments SET owe=COALESCE(owe, 0)+COALESCE(price, 0) WHERE recurring_days_interval IS NOT NULL AND DATE_ADD(payment_date, INTERVAL recurring_days_interval DAY) > NOW()

如果您想停止重复发生,只需将recurring_days_interval设为NULL