92 lines
2.9 KiB
Python
92 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""券核销事实表"""
|
|
|
|
from ..base_loader import BaseLoader
|
|
|
|
|
|
class CouponUsageLoader(BaseLoader):
|
|
"""写入 fact_coupon_usage"""
|
|
|
|
def upsert_coupon_usage(self, records: list) -> tuple:
|
|
if not records:
|
|
return (0, 0, 0)
|
|
|
|
sql = """
|
|
INSERT INTO billiards.fact_coupon_usage (
|
|
store_id,
|
|
usage_id,
|
|
coupon_code,
|
|
coupon_channel,
|
|
coupon_name,
|
|
sale_price,
|
|
coupon_money,
|
|
coupon_free_time,
|
|
use_status,
|
|
create_time,
|
|
consume_time,
|
|
operator_id,
|
|
operator_name,
|
|
table_id,
|
|
site_order_id,
|
|
group_package_id,
|
|
coupon_remark,
|
|
deal_id,
|
|
certificate_id,
|
|
verify_id,
|
|
is_delete,
|
|
raw_data
|
|
)
|
|
VALUES (
|
|
%(store_id)s,
|
|
%(usage_id)s,
|
|
%(coupon_code)s,
|
|
%(coupon_channel)s,
|
|
%(coupon_name)s,
|
|
%(sale_price)s,
|
|
%(coupon_money)s,
|
|
%(coupon_free_time)s,
|
|
%(use_status)s,
|
|
%(create_time)s,
|
|
%(consume_time)s,
|
|
%(operator_id)s,
|
|
%(operator_name)s,
|
|
%(table_id)s,
|
|
%(site_order_id)s,
|
|
%(group_package_id)s,
|
|
%(coupon_remark)s,
|
|
%(deal_id)s,
|
|
%(certificate_id)s,
|
|
%(verify_id)s,
|
|
%(is_delete)s,
|
|
%(raw_data)s
|
|
)
|
|
ON CONFLICT (store_id, usage_id) DO UPDATE SET
|
|
coupon_code = EXCLUDED.coupon_code,
|
|
coupon_channel = EXCLUDED.coupon_channel,
|
|
coupon_name = EXCLUDED.coupon_name,
|
|
sale_price = EXCLUDED.sale_price,
|
|
coupon_money = EXCLUDED.coupon_money,
|
|
coupon_free_time = EXCLUDED.coupon_free_time,
|
|
use_status = EXCLUDED.use_status,
|
|
create_time = EXCLUDED.create_time,
|
|
consume_time = EXCLUDED.consume_time,
|
|
operator_id = EXCLUDED.operator_id,
|
|
operator_name = EXCLUDED.operator_name,
|
|
table_id = EXCLUDED.table_id,
|
|
site_order_id = EXCLUDED.site_order_id,
|
|
group_package_id = EXCLUDED.group_package_id,
|
|
coupon_remark = EXCLUDED.coupon_remark,
|
|
deal_id = EXCLUDED.deal_id,
|
|
certificate_id = EXCLUDED.certificate_id,
|
|
verify_id = EXCLUDED.verify_id,
|
|
is_delete = EXCLUDED.is_delete,
|
|
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)
|