# -*- coding: utf-8 -*- """订单事实表加载器""" from ..base_loader import BaseLoader class OrderLoader(BaseLoader): """订单数据加载器""" def upsert_orders(self, records: list, store_id: int) -> tuple: """加载订单数据""" if not records: return (0, 0, 0) sql = """ INSERT INTO billiards.fact_order ( store_id, order_id, order_no, member_id, table_id, order_time, end_time, total_amount, discount_amount, final_amount, pay_status, order_status, remark, raw_data ) VALUES ( %(store_id)s, %(order_id)s, %(order_no)s, %(member_id)s, %(table_id)s, %(order_time)s, %(end_time)s, %(total_amount)s, %(discount_amount)s, %(final_amount)s, %(pay_status)s, %(order_status)s, %(remark)s, %(raw_data)s ) ON CONFLICT (store_id, order_id) DO UPDATE SET order_no = EXCLUDED.order_no, member_id = EXCLUDED.member_id, table_id = EXCLUDED.table_id, order_time = EXCLUDED.order_time, end_time = EXCLUDED.end_time, total_amount = EXCLUDED.total_amount, discount_amount = EXCLUDED.discount_amount, final_amount = EXCLUDED.final_amount, pay_status = EXCLUDED.pay_status, order_status = EXCLUDED.order_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)