如何解决生成发票
| 我想每2周创建一张发票。发票可以在1到15到16到31order_date
之间有1个或多个订单。这是怎么做的?
假设表设计为:
order table
- order_id (PK)
- user_id (FK)
- total
- status
- order_date
- invoice_id (FK,default is 0)
invoice table
- invoice_id (PK)
- invoice_date
- total (total of all orders that is linked to order.invoice_id)
- status (Paid,Unpaid,etc)
//order.invoice_id can have multiple same invoice id
第一个解决方案:
每2周通过Crob Job运行一次。它扫描订单表(在1到15或16到31之间查找order_date且状态= 1),然后添加到发票表中,然后更新订单.invoice_id
如果今天是2010年6月11日,则它将在发票表中插入一行,invoice_date将是2010年6月1日。PHP将在添加行之前检查invoice_date,如果该行已经存在,则将更新order.invoice_id。
第二种解决方案:
从后端手动将order.status更改为1,然后它将执行与\“ First Solution \”类似的功能(除了Cron Job)
伪代码:
NowDate = Date();
//Invoice Date can be 01 or 16 date current month
InvoiceDate = InvoiceDate(NowDate)
if (there is invoice for InvoiceDate) {
invoiceNumber = getNumber(invoice)
} else {
invoiceNumber = new Invoice(InvoiceDate)
}
new Order(invoiceNumber,orderitems)
哪个会更好,或者您还有其他更好的解决方案?
解决方法
我真的很喜欢cron进行计划。它做一件事,并且做得很好。
预定任务非常需要的其他设计方面是幂等的,这意味着您可以再次运行它而不会造成任何损坏。
就您而言,这意味着您的更新/插入必须处理该时间段内已经运行的更新/插入。您想要这样做的原因首先是防御性的(以防意外重新运行)和健壮的(以防您需要重新运行)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。