From bda9e7fc001af60f27497ff15f5f82da1d14572b Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 29 Jun 2026 12:46:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20credit=5Flimit=20=E5=8A=A0=20grant=5For?= =?UTF-8?q?gid=20=E6=8E=88=E4=BA=88=E6=9C=BA=E6=9E=84=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=9F=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit credit_limit 新增 grant_orgid 字段,区分「客户所属机构(orgid)」 与「授予信用的机构(grant_orgid)」。多租户下,操作员为客户授信时: - orgid = 客户机构ID - grant_orgid = 操作员所属机构ID 修改: - models/credit_limit.json: 加 grant_orgid 字段(VARCHAR(32), default 0) + 索引 - creditlimit.py: get_credit_stats/get_all_customer_credits: WHERE orgid → WHERE grant_orgid set_credit_limit: 加 grant_orgid 参数 - set_customer_credit.dspy: 写入时 orgid=客户orgid, grant_orgid=操作员orgid; 三处UPDATE同步加 grant_orgid - credit_summary.dspy: WHERE orgid → WHERE grant_orgid get_my_credit_list(客户自看)保持按 cl.orgid 过滤不变。 --- accounting/creditlimit.py | 7 ++++--- models/credit_limit.json | 13 +++++++++++++ wwwroot/credit_limit/api/credit_summary.dspy | 2 +- wwwroot/credit_limit/api/set_customer_credit.dspy | 9 ++++++++- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/accounting/creditlimit.py b/accounting/creditlimit.py index 7a40277..69c70b3 100644 --- a/accounting/creditlimit.py +++ b/accounting/creditlimit.py @@ -17,7 +17,7 @@ async def get_credit_stats(sor, orgid): COUNT(CASE WHEN status = 'active' THEN 1 END) as active_count, COUNT(CASE WHEN status = 'expired' THEN 1 END) as expired_count FROM credit_limit - WHERE orgid = ${orgid}$ + WHERE grant_orgid = ${orgid}$ """ recs = await sor.sqlExe(sql, {'orgid': orgid}) if recs and len(recs) > 0: @@ -71,7 +71,7 @@ async def get_all_customer_credits(sor, orgid, status_filter=None): Get all customer credit limits for management view. For distributor sales to see all their customers' credit status. """ - where_clause = "WHERE cl.orgid = ${orgid}$" + where_clause = "WHERE cl.grant_orgid = ${orgid}$" params = {'orgid': orgid, 'sort': 'update_at desc'} if status_filter and status_filter != 'all': where_clause += " AND cl.status = ${status}$" @@ -145,7 +145,7 @@ async def update_used_credit(sor, accid, new_used_amount): debug(f'Updated credit for {accid}: used={new_used}, available={new_available}') async def set_credit_limit(sor, accountid, orgid, credit_limit_amount, - valid_from=None, valid_to=None, created_by=None, remark=None): + grant_orgid='0', valid_from=None, valid_to=None, created_by=None, remark=None): """ Set or update credit limit for an account. If a credit limit already exists, update it; otherwise create new. @@ -181,6 +181,7 @@ async def set_credit_limit(sor, accountid, orgid, credit_limit_amount, 'id': new_id, 'accountid': accountid, 'orgid': orgid, + 'grant_orgid': grant_orgid or '0', 'credit_limit': credit_limit_amount, 'used_credit': 0, 'available_credit': credit_limit_amount, diff --git a/models/credit_limit.json b/models/credit_limit.json index ca77bdf..91cb7fe 100644 --- a/models/credit_limit.json +++ b/models/credit_limit.json @@ -29,6 +29,14 @@ "length": 32, "nullable": "no" }, + { + "name": "grant_orgid", + "title": "授予机构ID", + "type": "str", + "length": 32, + "nullable": "no", + "default": "0" + }, { "name": "credit_limit", "title": "信用额度", @@ -114,6 +122,11 @@ "idxtype": "index", "idxfields": ["orgid"] }, + { + "name": "idx_credit_limit_grant_orgid", + "idxtype": "index", + "idxfields": ["grant_orgid"] + }, { "name": "idx_credit_limit_status", "idxtype": "index", diff --git a/wwwroot/credit_limit/api/credit_summary.dspy b/wwwroot/credit_limit/api/credit_summary.dspy index 5c859a7..545fcd9 100644 --- a/wwwroot/credit_limit/api/credit_summary.dspy +++ b/wwwroot/credit_limit/api/credit_summary.dspy @@ -13,7 +13,7 @@ async with db.sqlorContext(dbname) as sor: COUNT(CASE WHEN status = 'active' THEN 1 END) as active_count, COUNT(CASE WHEN status = 'expired' THEN 1 END) as expired_count FROM credit_limit - WHERE orgid = ${orgid}$ + WHERE grant_orgid = ${orgid}$ """ recs = await sor.sqlExe(sql, {'orgid': orgid}) if recs and len(recs) > 0: diff --git a/wwwroot/credit_limit/api/set_customer_credit.dspy b/wwwroot/credit_limit/api/set_customer_credit.dspy index db8972f..01548b8 100644 --- a/wwwroot/credit_limit/api/set_customer_credit.dspy +++ b/wwwroot/credit_limit/api/set_customer_credit.dspy @@ -101,6 +101,8 @@ async with db.sqlorContext(dbname) as sor: UPDATE credit_limit SET credit_limit = ${credit_limit}$, available_credit = ${credit_limit}$ - used_credit, + orgid = ${orgid}$, + grant_orgid = ${grant_orgid}$, valid_from = ${valid_from}$, valid_to = ${valid_to}$, remark = ${remark}$, @@ -109,6 +111,8 @@ async with db.sqlorContext(dbname) as sor: """ await sor.sqlExe(sql, { 'credit_limit': credit_limit_amount, + 'orgid': customer_orgid, + 'grant_orgid': orgid, 'valid_from': valid_from, 'valid_to': valid_to, 'remark': remark, @@ -120,6 +124,7 @@ async with db.sqlorContext(dbname) as sor: UPDATE credit_limit SET credit_limit = ${credit_limit}$, available_credit = ${credit_limit}$ - used_credit, + grant_orgid = ${grant_orgid}$, valid_from = ${valid_from}$, valid_to = ${valid_to}$, remark = ${remark}$, @@ -128,6 +133,7 @@ async with db.sqlorContext(dbname) as sor: """ await sor.sqlExe(sql, { 'credit_limit': credit_limit_amount, + 'grant_orgid': orgid, 'valid_from': valid_from, 'valid_to': valid_to, 'remark': remark, @@ -141,7 +147,8 @@ async with db.sqlorContext(dbname) as sor: data = { 'id': new_id, 'accountid': accountid, - 'orgid': orgid, + 'orgid': customer_orgid, + 'grant_orgid': orgid, 'credit_limit': credit_limit_amount, 'used_credit': 0, 'available_credit': credit_limit_amount,