pricing/pricing/init.py
Hermes Agent 810cd4549b fix: 修复定价项目时序验证定价500错误 + 移除过时的pricing_item子表引用
- init.py: 注册 get_pricing_program_timeing 到 env(pricing_test.ui模板依赖此函数)
- pricing_test.ui: 修复拼写错误 amoumt → "amount"(生成无效JSON导致500)
- json/pricing_program_timing.json: 移除指向已删除的pricing_item CRUD的subtables配置
2026-06-23 23:59:13 +08:00

53 lines
2.4 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 appPublic.log import debug
from sqlor.dbpools import DBPools
from pricing.pricing import (
PricingProgram,
test_pricing,
get_pricing_program_timeing,
generate_formula_from_factors,
get_pricing_display,
)
from ahserver.serverenv import ServerEnv
def _bind_pricing_events(dbpools, dbname):
"""Bind database events to Pricing cache invalidation handlers."""
bindings = [
# pricing_program_timing: SQLor 事件 payload 不保证含 ppid
# U/C 通过 id 反查 ppidD 需 before 预缓存供 after 刷新缓存。
(f'{dbname}:pricing_program_timing:c:after', PricingProgram.on_timing_create),
(f'{dbname}:pricing_program_timing:u:after', PricingProgram.reload_pp_data),
(f'{dbname}:pricing_program_timing:d:before', PricingProgram.precache_timing_delete),
(f'{dbname}:pricing_program_timing:d:after', PricingProgram.on_timing_delete),
# pricing_program: 增删改均刷新该程序的全部缓存
(f'{dbname}:pricing_program:c:after', PricingProgram.reload_pricing_program),
(f'{dbname}:pricing_program:u:after', PricingProgram.reload_pricing_program),
(f'{dbname}:pricing_program:d:after', PricingProgram.reload_pricing_program),
]
for event_name, handler in bindings:
dbpools.bind(event_name, handler)
debug(f'Pricing event bound: {event_name}')
def load_pricing():
env = ServerEnv()
env.write_pricing_patten = PricingProgram.write_pricing_patten
env.write_pricing_data = PricingProgram.write_pricing_data
env.pricing_program_charging = PricingProgram.charging
env.buffered_charging = PricingProgram.buffered_charging
env.get_ppid_pricing = PricingProgram.get_ppid_pricing
env.load_pricing_data = PricingProgram.load_pricing_data
env.get_pricing_program = PricingProgram.get_pricing_program
env.test_pricing = test_pricing
env.get_pricing_program_timeing = get_pricing_program_timeing
env.generate_formula_from_factors = generate_formula_from_factors
env.get_pricing_display = get_pricing_display
# Bind hot_reload event — only when running in ahserver (event_dispatcher available)
if getattr(env, 'event_dispatcher', None) is not None:
env.event_dispatcher.bind('hot_reload', PricingProgram.on_hot_reload)
dbpools = DBPools()
dbname = env.get_module_dbname('pricing')
if dbname:
_bind_pricing_events(dbpools, dbname)
debug(f'Pricing event listeners bound for database: {dbname}')
else:
debug('Pricing event listeners skipped: no database configured for pricing module')