61 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from pricing.pricing import (
PricingProgram,
test_pricing,
get_pricing_program
)
from ahserver.serverenv import ServerEnv
from sqlor.dbpools import DBPools
def _get_pricing_dbname():
env = ServerEnv()
return env.get_module_dbname('pricing')
async def on_pricing_program_event(data):
"""pricing_program 表变更,全量失效定价缓存"""
PricingProgram.pricing_data.clear()
async def on_pricing_program_timing_update(data):
"""pricing_program_timing UPDATE精确失效该 ppid 的缓存"""
ns = data.get('ns', {})
ppid = ns.get('id') or ns.get('ppid')
if ppid:
keys_to_del = [k for k in PricingProgram.pricing_data if k.startswith(f'{ppid}.')]
for k in keys_to_del:
del PricingProgram.pricing_data[k]
else:
PricingProgram.pricing_data.clear()
async def on_pricing_program_timing_cdel(data):
"""pricing_program_timing C/D全量失效"""
PricingProgram.pricing_data.clear()
def register_pricing_event_listeners():
db = DBPools()
dbname = _get_pricing_dbname()
# pricing_program 表
db.bind(f'{dbname}:pricing_program:c:after', on_pricing_program_event)
db.bind(f'{dbname}:pricing_program:u:after', on_pricing_program_event)
db.bind(f'{dbname}:pricing_program:d:after', on_pricing_program_event)
# pricing_program_timing 表
db.bind(f'{dbname}:pricing_program_timing:c:after', on_pricing_program_timing_cdel)
db.bind(f'{dbname}:pricing_program_timing:u:after', on_pricing_program_timing_update)
db.bind(f'{dbname}:pricing_program_timing:d:after', on_pricing_program_timing_cdel)
def load_pricing():
env = ServerEnv()
env.get_pricing_program = get_pricing_program
env.write_pricing_patten = PricingProgram.write_pricing_patten
env.pricing_program_charging = PricingProgram.charging
env.buffered_charging = PricingProgram.buffered_charging
env.load_pricing_data = PricingProgram.load_pricing_data
env.get_pricing_program = PricingProgram.get_pricing_program
env.test_pricing = test_pricing
register_pricing_event_listeners()