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()