fix: 物料修改后级联清除 BOM 树缓存,防止信息不一致
This commit is contained in:
@ -593,6 +593,31 @@ class MaterialBaseService:
|
||||
material.is_enabled = str(raw_enabled).lower() in ['1', 'true', 'yes', 't']
|
||||
|
||||
db.session.commit()
|
||||
|
||||
# ★★★ 级联缓存失效:物料信息变更后,清除所有涉及该物料的 BOM 树缓存
|
||||
try:
|
||||
from app.models.bom import BomTable
|
||||
from app.extensions import redis_client
|
||||
|
||||
# 查出所有以该物料为父件或子件的 bom_no(去重)
|
||||
affected = db.session.query(BomTable.bom_no).filter(
|
||||
or_(BomTable.parent_id == m_id, BomTable.child_id == m_id)
|
||||
).distinct().all()
|
||||
affected_bom_nos = [r[0] for r in affected]
|
||||
|
||||
if affected_bom_nos:
|
||||
for bom_no in affected_bom_nos:
|
||||
# 清除最新版缓存
|
||||
redis_client.delete(f'bom:tree:{bom_no}')
|
||||
# 清除所有版本缓存(通配符)
|
||||
for key in redis_client.scan_iter(f'bom:tree:{bom_no}:*'):
|
||||
redis_client.delete(key)
|
||||
print(f"🔁 物料 {m_id} 变更,已级联清除 {len(affected_bom_nos)} 个 BOM 缓存: {affected_bom_nos}")
|
||||
|
||||
except Exception as cache_err:
|
||||
# Redis 报错不阻断业务返回
|
||||
print(f"⚠️ BOM 缓存级联清除失败(不阻断业务): {cache_err}")
|
||||
|
||||
return material
|
||||
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user