From 896c87c4f0527b7cd7374022f9e89490155a811c Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 14 May 2026 13:10:13 +0800 Subject: [PATCH] bugfix --- pricing/init.py | 1 + pricing/pricing.py | 18 ++++++++++++++++++ pricing/write_pattern.py | 4 ++-- wwwroot/download_pricing_data.dspy | 25 +++---------------------- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pricing/init.py b/pricing/init.py index 425f119..65f277d 100644 --- a/pricing/init.py +++ b/pricing/init.py @@ -9,6 +9,7 @@ def load_pricing(): env = ServerEnv() env.get_pricing_program = get_pricing_program 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.load_pricing_data = PricingProgram.load_pricing_data diff --git a/pricing/pricing.py b/pricing/pricing.py index ea397cb..710bf91 100644 --- a/pricing/pricing.py +++ b/pricing/pricing.py @@ -250,6 +250,24 @@ class PricingProgram: fpath = write_pattern_xlsx(r.name, fields) return fpath + @staticmethod + async def write_pricing_data(request, pptid): + async with get_sor_context(request._run_ns, 'pricing') as sor: + env = request._run_ns + recs = await sor.R('pricing_program_timing', {'id': pptid}) + if not recs: + debug(f'id={ppid} pricing_program not found') + r = recs[0] + recs = await sor.R('pricing_program', {'id': r.ppid}) + x = DictObject(** yaml.safe_load(r.pricing_data)) + fields = x + if x.get('fields'): + fields = x['fields'] + data = x.get('pricings') + + fpath = write_pattern_xlsx(recs[0].name, fields, data=data) + return fpath + @staticmethod def pp_db2app(pp): try: diff --git a/pricing/write_pattern.py b/pricing/write_pattern.py index 3bef093..845ae26 100644 --- a/pricing/write_pattern.py +++ b/pricing/write_pattern.py @@ -28,7 +28,7 @@ def write_pattern_xlsx(name: str, fields: dict, data=None) -> str: headers = [] c = 1 opt_id = 0 - for name, f in fields.items(): + for n, f in fields.items(): if f.type == 'factor': continue ws_data.cell(row=1, column=c, value=f.label or f.name) @@ -45,7 +45,7 @@ def write_pattern_xlsx(name: str, fields: dict, data=None) -> str: if data is None: fp = fs._name2path(f'{name}_定价模版.xlsx') else: - write_data(ws_data, fields, data) + write_data(ws_data, r, c, n, data) fp = fs._name2path(f'{name}_定价.xlsx') wb.save(fp) diff --git a/wwwroot/download_pricing_data.dspy b/wwwroot/download_pricing_data.dspy index a3dffd4..faac33d 100644 --- a/wwwroot/download_pricing_data.dspy +++ b/wwwroot/download_pricing_data.dspy @@ -1,23 +1,4 @@ pptid = params_kw.id -env = request._run_ns -orgid = await get_userorgid() -async with get_sor_context(env, 'pricing') as sor: - recs = await sor.R('pricing_program_timing', {'id': pptid}) - if len(recs) == 0: - return UiError(title='下载定价信息', message=f'{pptid} 在pricing_program_timing中没找到') - ppt = recs[0] - recs = await sor.R('pricing_program', {'id': ppt.ppid}) - if len(recs) == 0: - return UiError(title='下载定价信息', message=f'{ppt.ppid} 在pricing_program中没找到') - pp = recs[0] - if pp.ownerid != orgid: - return UiError(title='下载定价信息', message=f'{userorgid} != {pp.ownerid}非本机构定价') - data = json.loads(ppt.prcing_data) - fields = data.get('fields') - if fields is None: - return UiError(title='下载定价信息', message=f'{pptid} 定价字段数据为空') - pricing_data = data.get('pricings') - if pricing_data is None: - return UiError(title='下载定价信息', message=f'{pptid} 定价数据为空') - fpath = write_pattern_xlsx(name, fields, data=pricing_data) - return await file_response(request, fpath, download=True) +debug(f'download_pricing_pattern.dspy{params_kw=}') +fp = await write_pricing_patten(request, pptid) +return await file_response(request, fp, download=True)