36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""支付记录加载器"""
|
|
from ..base_loader import BaseLoader
|
|
|
|
class PaymentLoader(BaseLoader):
|
|
"""支付记录加载器"""
|
|
|
|
def upsert_payments(self, records: list, store_id: int) -> tuple:
|
|
"""加载支付记录"""
|
|
if not records:
|
|
return (0, 0, 0)
|
|
|
|
sql = """
|
|
INSERT INTO billiards.fact_payment (
|
|
store_id, pay_id, order_id, pay_time, pay_amount,
|
|
pay_type, pay_status, remark, raw_data
|
|
)
|
|
VALUES (
|
|
%(store_id)s, %(pay_id)s, %(order_id)s, %(pay_time)s, %(pay_amount)s,
|
|
%(pay_type)s, %(pay_status)s, %(remark)s, %(raw_data)s
|
|
)
|
|
ON CONFLICT (store_id, pay_id) DO UPDATE SET
|
|
order_id = EXCLUDED.order_id,
|
|
pay_time = EXCLUDED.pay_time,
|
|
pay_amount = EXCLUDED.pay_amount,
|
|
pay_type = EXCLUDED.pay_type,
|
|
pay_status = EXCLUDED.pay_status,
|
|
remark = EXCLUDED.remark,
|
|
raw_data = EXCLUDED.raw_data,
|
|
updated_at = now()
|
|
RETURNING (xmax = 0) AS inserted
|
|
"""
|
|
|
|
inserted, updated = self.db.batch_upsert_with_returning(sql, records, page_size=self._batch_size())
|
|
return (inserted, updated, 0)
|