From b9c31eade25d2019a7ac82d733f86b5992268a9a Mon Sep 17 00:00:00 2001 From: lyx <2027667395@qq.com> Date: Wed, 20 Mar 2024 14:31:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=A2=E5=8D=95=E8=B4=B9=E7=94=A8pdf?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/server/services/record-pdf-service.ts | 19 ++++---------- .../src/server/sqls/pdf_record_fee.sql | 26 ++++++++++++++----- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/packages/plugins/@hera/plugin-rental/src/server/services/record-pdf-service.ts b/packages/plugins/@hera/plugin-rental/src/server/services/record-pdf-service.ts index f92108137..2d8d0fc6f 100644 --- a/packages/plugins/@hera/plugin-rental/src/server/services/record-pdf-service.ts +++ b/packages/plugins/@hera/plugin-rental/src/server/services/record-pdf-service.ts @@ -118,15 +118,6 @@ export class RecordPdfService { .sort((a, b) => a.category_id - b.category_id); // 计算费用数据,包括有产品关联跟无产品关联 - fee_data = fee_data.map((item) => { - const data = { - ...item, - }; - if (item.weight_rules) { - data['weight_rules'] = JSON.parse(item.weight_rules.join(',')); - } - return data; - }); // 关联产品的赔偿(人工录入/全部) const product_fee = printSetup === PrintSetup.Manual @@ -167,10 +158,10 @@ export class RecordPdfService { } else if (item.conversion_logic_id === ConversionLogics.ActualWeight) { data['total'] = item.actual_weight || item.record_weight; } else { - if (item.wr.conversion_logic_id === ConversionLogics.Keep) { - data['total'] = data.count * item.wr.weight; - } else if (item.wr.conversion_logic_id === ConversionLogics.Product) { - data['total'] = data.count * item.wr.weight * item.product_ratio; + if (item.weight_rules?.conversion_logic_id === ConversionLogics.Keep) { + data['total'] = data.count * item.weight_rules.weight; + } else if (item.weight_rules?.conversion_logic_id === ConversionLogics.Product) { + data['total'] = data.count * item.weight_rules.weight * item.product_ratio; } } // 如果 printSetup === PrintSetup.DisplayAndPrice 要计算费用产生的价格 @@ -220,7 +211,7 @@ export class RecordPdfService { // 计算有误,需要检查 data['count'] = lease_data.reduce((a, b) => { const weight_rule = item.weight_rules.find( - (l) => l.product_id === b.product_id || l.product === b.category_id + RulesNumber, + (l) => l.product_id === b.product_id || l.product - RulesNumber === b.category_id, ); if (weight_rule && weight_rule.conversion_logic_id === ConversionLogics.Keep) { return a + b.count * weight_rule.weight; diff --git a/packages/plugins/@hera/plugin-rental/src/server/sqls/pdf_record_fee.sql b/packages/plugins/@hera/plugin-rental/src/server/sqls/pdf_record_fee.sql index 6c359cc39..182d570a1 100644 --- a/packages/plugins/@hera/plugin-rental/src/server/sqls/pdf_record_fee.sql +++ b/packages/plugins/@hera/plugin-rental/src/server/sqls/pdf_record_fee.sql @@ -18,7 +18,14 @@ SELECT cpfi.count_source, cpfi."comment", cpfi.id, - STRING_TO_ARRAY(JSONB_AGG(wr)::TEXT, ',') AS weight_rules + ( + SELECT + JSONB_AGG(wr) + FROM + weight_rules wr + WHERE + wr.logic_id = cpfi.conversion_logic_id + ) AS weight_rules FROM records r LEFT JOIN contracts c ON r.contract_id = c.id @@ -31,7 +38,6 @@ FROM LEFT JOIN product_category pc3 ON p.category_id = pc3.id JOIN product_category pc ON pc.id = p.category_id JOIN unit_conversion_logics ucl ON ucl.id = cpfi.conversion_logic_id - LEFT JOIN weight_rules wr ON ucl.id = wr.logic_id WHERE r.id = :recordId GROUP BY @@ -59,7 +65,18 @@ SELECT cpfi2.count_source, cpfi2."comment", cpfi2.id, - STRING_TO_ARRAY(wr2::TEXT, ',') AS weight_rules + ( + SELECT + TO_JSONB(wr) + FROM + weight_rules wr + WHERE + ucl2.id > 4 + AND wr.logic_id = ucl2.id + AND wr.product_id = ri.product_id + LIMIT + 1 + ) AS weight_rules FROM records r2 LEFT JOIN contracts c2 ON r2.contract_id = c2.id @@ -72,9 +89,6 @@ FROM JOIN contract_plan_fee_items cpfi2 ON cpfi2.lease_item_id = cpli.id AND cpfi2.count_source = '0' -- 查费用 JOIN unit_conversion_logics ucl2 ON ucl2.id = cpfi2.conversion_logic_id -- 查计算规则 - LEFT JOIN weight_rules wr2 ON ucl2.id = wr2.logic_id -- 查重量规则 - AND ucl2.id > 4 - AND wr2.product_id = cplip.product_id JOIN record_items ri ON ri.record_id = r2.id AND ( ri.product_id = cplip.product_id