Генерация счета - PullRequest
       20

Генерация счета

0 голосов
/ 11 июня 2011

Я хочу создавать счет каждые 2 недели.Счет может иметь 1 или более заказов от 1 до 15 и от 16 до 31 order_date.Как это делается?

Предположим, что дизайн таблицы:

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

Первое решение:

Выполнение через задание Crob каждые 2неделю.Он просматривает таблицу заказов (найдите order_date от 1 до 15 или от 16 до 31 и status = 1), затем добавьте в таблицу счетов и обновите order.invoice_id

Если сегодняшняя дата - 11 июня 2010 года, тогда онавставит строку в таблицу счетов-фактур, а invoice_date будет 01 июня 2010 года. PHP проверит invoice_date перед добавлением строки, если она уже существует, вместо этого она обновит order.invoice_id.

SecondРешение:

Измените order.status на 1 вручную из бэкэнда, после чего он будет выполнять те же функции, что и «Первое решение» (кроме задания Cron)

Псевдокод:

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)

Что будет лучше или у вас есть другое лучшее решение?

1 Ответ

2 голосов
/ 11 июня 2011

Мне очень нравится cron для планирования. Он делает одну вещь и делает это хорошо.

Другим аспектом разработки, который очень желателен для запланированных задач, является идемпотент , что означает, что вы можете запустить его снова, не нанося никакого ущерба.

В вашем случае это означает, что ваши обновления / вставки должны обрабатываться уже запущенными в течение определенного периода времени. Причина, по которой вы хотите это, в первую очередь оборонительная (в случае ее случайного повторного запуска) и надежная (в случае, если вам нужно для ее повторного запуска)

...