61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
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()
|