perf: P1 性能优化批量修复 + kefu 视图拆分
P1 性能优化(避免循环内 N+1 / N 次 DB 查询): - shop_order_views._batch_images: 移除 ThreadPoolExecutor 掩盖的 N 次查询,改单次批量 + Python 侧分组 - product_query.DashouHuiyuanList: 5N 查询 -> 3 次批量预取 + 本地闭包判断 - roles.GetRolePermissionView / 用户列表: 循环内 RolePermission/Permission/UserRole/Role -> 批量 __in 预取 - guanli / zuzhang 杜次分红 4.2/4.3: 循环内 update_or_create + 单条 delete -> bulk_create + bulk_update + 批量 delete - admin_config QQ 群配置: 循环内 exists/first/save/create -> 批量预取 + bulk_create + bulk_update - jituan 服务层多处合并统计查询、批量预取 map - rank 多处循环 N+1 改批量预取 - backend 多处循环内 count/create 改批量 - config/orders/merchant_ops 多处循环 N+1 改批量预取 其他改动: - users/views/kefu.py 拆分为 kefu_base/kefu_dashou/kefu_orders/kefu_punishment/kefu_withdraw 5 个文件 - 删除遗留脚本 check_prod_uid.py / create_rbac_tables.sql
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import hmac
|
||||
import hmac
|
||||
import threading
|
||||
import traceback
|
||||
import uuid
|
||||
@@ -173,19 +173,27 @@ class HqbkxxView(APIView):
|
||||
price_map[row.huiyuan_id] = row
|
||||
|
||||
huiyuan_list = []
|
||||
for hy in Huiyuan.query.all():
|
||||
row = price_map.get(hy.huiyuan_id)
|
||||
# 在受限 scope 下预过滤,避免 Huiyuan 全表遍历
|
||||
# 注:当 scope != DATA_SCOPE_ALL 且 club_id != CLUB_ID_DEFAULT 时,
|
||||
# 只有 price_map 中存在记录的会员才可能被保留(无记录的会被跳过)
|
||||
huiyuan_qs = Huiyuan.query.all()
|
||||
if scope != DATA_SCOPE_ALL and club_id != CLUB_ID_DEFAULT:
|
||||
huiyuan_qs = huiyuan_qs.filter(huiyuan_id__in=list(price_map.keys()))
|
||||
# 仅查询所需字段,减少内存占用(dict 比 model 实例更轻)
|
||||
huiyuan_qs = huiyuan_qs.values('huiyuan_id', 'jieshao', 'bankuai_id', 'jiage', 'guanshifc', 'zuzhangfc')
|
||||
for hy in huiyuan_qs:
|
||||
row = price_map.get(hy['huiyuan_id'])
|
||||
if scope != DATA_SCOPE_ALL and club_id != CLUB_ID_DEFAULT and row is None:
|
||||
continue
|
||||
if row is not None and not row.is_enabled:
|
||||
continue
|
||||
item = {
|
||||
'huiyuan_id': hy.huiyuan_id,
|
||||
'jieshao': hy.jieshao,
|
||||
'bankuai_id': hy.bankuai_id,
|
||||
'jiage': str(row.jiage) if row else str(hy.jiage),
|
||||
'guanshifc': str(row.guanshifc) if row else str(hy.guanshifc),
|
||||
'zuzhangfc': str(row.zuzhangfc) if row else str(hy.zuzhangfc),
|
||||
'huiyuan_id': hy['huiyuan_id'],
|
||||
'jieshao': hy['jieshao'],
|
||||
'bankuai_id': hy['bankuai_id'],
|
||||
'jiage': str(row.jiage) if row else str(hy['jiage']),
|
||||
'guanshifc': str(row.guanshifc) if row else str(hy['guanshifc']),
|
||||
'zuzhangfc': str(row.zuzhangfc) if row else str(hy['zuzhangfc']),
|
||||
}
|
||||
huiyuan_list.append(item)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user