# -*- 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, site_id, tenant_id, order_settle_id, order_trade_no, relate_type, relate_id, create_time, pay_time, pay_amount, fee_amount, discount_amount, payment_method, online_pay_channel, pay_terminal, pay_status, raw_data ) VALUES ( %(store_id)s, %(pay_id)s, %(site_id)s, %(tenant_id)s, %(order_settle_id)s, %(order_trade_no)s, %(relate_type)s, %(relate_id)s, %(create_time)s, %(pay_time)s, %(pay_amount)s, %(fee_amount)s, %(discount_amount)s, %(payment_method)s, %(online_pay_channel)s, %(pay_terminal)s, %(pay_status)s, %(raw_data)s ) ON CONFLICT (store_id, pay_id) DO UPDATE SET order_settle_id = EXCLUDED.order_settle_id, order_trade_no = EXCLUDED.order_trade_no, relate_type = EXCLUDED.relate_type, relate_id = EXCLUDED.relate_id, site_id = EXCLUDED.site_id, tenant_id = EXCLUDED.tenant_id, create_time = EXCLUDED.create_time, pay_time = EXCLUDED.pay_time, pay_amount = EXCLUDED.pay_amount, fee_amount = EXCLUDED.fee_amount, discount_amount = EXCLUDED.discount_amount, payment_method = EXCLUDED.payment_method, online_pay_channel = EXCLUDED.online_pay_channel, pay_terminal = EXCLUDED.pay_terminal, pay_status = EXCLUDED.pay_status, 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)