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}$ WHERE contract_id = ${contract_id}$
AND ((prodtypeid = ${prodtypeid}$ AND productid = ${productid}$) AND ((prodtypeid = ${prodtypeid}$ AND productid = ${productid}$)
OR (prodtypeid = ${prodtypeid}$ AND productid IS NULL) OR (prodtypeid = ${prodtypeid}$ AND productid IS NULL)
OR (prodtypeid IS NULL AND productid = ${productid}$)
OR (prodtypeid IS NULL AND productid IS NULL)) OR (prodtypeid IS NULL AND productid IS NULL))
ORDER BY ORDER BY
CASE WHEN prodtypeid IS NOT NULL AND productid IS NOT NULL THEN 1 CASE WHEN prodtypeid IS NOT NULL AND productid IS NOT NULL THEN 1
WHEN prodtypeid IS NOT NULL AND productid IS NULL THEN 2 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""" LIMIT 1"""
recs_sci = await sor.sqlExe(sql_sci, { recs_sci = await sor.sqlExe(sql_sci, {
"contract_id": contract_id, "contract_id": contract_id,
@ -705,11 +707,13 @@ WHERE resellerid = ${resellerid}$
WHERE agreement_id = ${agreement_id}$ WHERE agreement_id = ${agreement_id}$
AND ((prodtypeid = ${prodtypeid}$ AND productid = ${productid}$) AND ((prodtypeid = ${prodtypeid}$ AND productid = ${productid}$)
OR (prodtypeid = ${prodtypeid}$ AND productid IS NULL) OR (prodtypeid = ${prodtypeid}$ AND productid IS NULL)
OR (prodtypeid IS NULL AND productid = ${productid}$)
OR (prodtypeid IS NULL AND productid IS NULL)) OR (prodtypeid IS NULL AND productid IS NULL))
ORDER BY ORDER BY
CASE WHEN prodtypeid IS NOT NULL AND productid IS NOT NULL THEN 1 CASE WHEN prodtypeid IS NOT NULL AND productid IS NOT NULL THEN 1
WHEN prodtypeid IS NOT NULL AND productid IS NULL THEN 2 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""" LIMIT 1"""
recs_dai = await sor.sqlExe(sql_dai, { recs_dai = await sor.sqlExe(sql_dai, {
"agreement_id": agreement_id, "agreement_id": agreement_id,