fix(calculate_sale_amounts): SQL 补「产品精确+类别默认」匹配分支

原 SQL 只覆盖: (类别+产品精确)/(类别精确+产品默认)/(全默认),
缺「产品精确+类别为NULL」,导致只填 productid 不填 prodtypeid 的折扣查不到,
supply_discount 回落到 default_discount=1.0。补第3优先级。
This commit is contained in:
ymq 2026-08-26 16:54:55 +08:00
parent 3a93804655
commit 927ee954ac

View File

@ -664,11 +664,13 @@ WHERE resellerid = ${resellerid}$
WHERE contract_id = ${contract_id}$
AND ((prodtypeid = ${prodtypeid}$ AND productid = ${productid}$)
OR (prodtypeid = ${prodtypeid}$ AND productid IS NULL)
OR (prodtypeid IS NULL AND productid = ${productid}$)
OR (prodtypeid IS NULL AND productid IS NULL))
ORDER BY
CASE WHEN prodtypeid IS NOT NULL AND productid IS NOT NULL THEN 1
WHEN prodtypeid IS NOT NULL AND productid IS NULL THEN 2
ELSE 3 END
WHEN prodtypeid IS NULL AND productid IS NOT NULL THEN 3
ELSE 4 END
LIMIT 1"""
recs_sci = await sor.sqlExe(sql_sci, {
"contract_id": contract_id,
@ -705,11 +707,13 @@ WHERE resellerid = ${resellerid}$
WHERE agreement_id = ${agreement_id}$
AND ((prodtypeid = ${prodtypeid}$ AND productid = ${productid}$)
OR (prodtypeid = ${prodtypeid}$ AND productid IS NULL)
OR (prodtypeid IS NULL AND productid = ${productid}$)
OR (prodtypeid IS NULL AND productid IS NULL))
ORDER BY
CASE WHEN prodtypeid IS NOT NULL AND productid IS NOT NULL THEN 1
WHEN prodtypeid IS NOT NULL AND productid IS NULL THEN 2
ELSE 3 END
WHEN prodtypeid IS NULL AND productid IS NOT NULL THEN 3
ELSE 4 END
LIMIT 1"""
recs_dai = await sor.sqlExe(sql_dai, {
"agreement_id": agreement_id,