perf: 规格连号助手优化 — 流式查询+宽松regex+Redis缓存
## base_service.py get_latest_specs - .all()全量→with_entities().limit(10000) 防OOM - regex放宽: 支持 LICA-3000/M3x12 等格式(旧版仅匹配OPT12046) - 移除OPT硬编码→SUB_CATEGORY_PREFIXES可配置集合 - Redis缓存(1h): 首次查询后缓存,后续命中直接返回 ## base.py 缓存失效 - 新增 _invalidate_specs_cache() 辅助函数 - create/update/delete 成功后清除缓存
This commit is contained in:
@ -52,6 +52,16 @@ def get_current_user_permissions():
|
||||
return perms
|
||||
|
||||
|
||||
def _invalidate_specs_cache():
|
||||
"""规格连号缓存失效(新增/修改/删除基础信息时调用)"""
|
||||
try:
|
||||
from app.extensions import redis_client
|
||||
if redis_client:
|
||||
redis_client.delete('inventory:specs:grouped')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def filter_item_by_permissions(item_dict, user_permissions):
|
||||
"""根据用户权限过滤字段,无权限的字段值置为 None"""
|
||||
if 'material_list:*' in user_permissions:
|
||||
@ -299,6 +309,7 @@ def create():
|
||||
filtered_data[key] = value
|
||||
|
||||
MaterialBaseService.create_material(filtered_data)
|
||||
_invalidate_specs_cache()
|
||||
return jsonify({"code": 200, "msg": "新增成功"})
|
||||
except ValueError as e:
|
||||
# 捕获业务逻辑验证错误 (如名称为空)
|
||||
@ -359,6 +370,7 @@ def update(id):
|
||||
filtered_data[key] = value
|
||||
# 使用过滤后的数据调用服务
|
||||
MaterialBaseService.update_material(id, filtered_data)
|
||||
_invalidate_specs_cache()
|
||||
return jsonify({"code": 200, "msg": "修改成功"})
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
@ -378,6 +390,7 @@ def update(id):
|
||||
def delete(id):
|
||||
try:
|
||||
material_name = MaterialBaseService.delete_material(id)
|
||||
_invalidate_specs_cache()
|
||||
return jsonify({"code": 200, "msg": "删除成功", "material_name": material_name})
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
|
||||
Reference in New Issue
Block a user