feat(cmdb): 添加操作历史表的唯一值列 (Add unique value column to operation history table)

This commit is contained in:
thexqn
2024-09-14 01:13:07 +08:00
parent 383d4c88ed
commit ff98777689
2 changed files with 18 additions and 19 deletions

View File

@@ -10,6 +10,7 @@ from api.extensions import db
from api.lib.cmdb.cache import AttributeCache
from api.lib.cmdb.cache import RelationTypeCache
from api.lib.cmdb.const import OperateType
from api.lib.cmdb.cache import CITypeCache
from api.lib.cmdb.perms import CIFilterPermsCRUD
from api.lib.cmdb.resp_format import ErrFormat
from api.lib.perm.acl.cache import UserCache
@@ -22,7 +23,7 @@ from api.models.cmdb import CITypeHistory
from api.models.cmdb import CITypeTrigger
from api.models.cmdb import CITypeUniqueConstraint
from api.models.cmdb import OperationRecord
from api.lib.cmdb.utils import ValueTypeMap
from api.lib.cmdb.utils import TableMap
class AttributeHistoryManger(object):
@@ -60,23 +61,21 @@ class AttributeHistoryManger(object):
total = len(records)
res = {}
unique_set = {}
from api.lib.cmdb.ci import CIManager
show_attr_set = {}
show_attr_cache = {}
for record in records:
record_id = record.OperationRecord.id
type_id = record.OperationRecord.type_id
ci_id = record.AttributeHistory.ci_id
if ci_id not in unique_set:
ci = CIManager.get_by_id(ci_id)
if ci and hasattr(ci, 'ci_type') and ci.ci_type:
unique_id = ci.ci_type.unique_id
unique_ci_type = AttributeCache.get(unique_id).value_type
value_table_name = ValueTypeMap.table_name.get(f"index_{unique_ci_type}")
value_table_list = getattr(ci, f"{value_table_name}.ci_id", None)
matched_items = [item for item in value_table_list if item.attr_id == unique_id] if value_table_list else []
if matched_items:
unique_set[ci_id] = matched_items[0].value
else:
unique_set[ci_id] = None
show_attr_set[ci_id] = None
ci_type = CITypeCache.get(type_id)
if ci_type:
show_attr = show_attr_cache.setdefault(type_id, AttributeCache.get(ci_type.show_id or ci_type.unique_id))
attr_table = TableMap(attr=show_attr).table
attr_record = attr_table.get_by(attr_id=show_attr.id, ci_id=ci_id, first=True, to_dict=False)
show_attr_set[ci_id] = attr_record.value if attr_record else None
attr_hist = record.AttributeHistory.to_dict()
attr_hist['attr'] = AttributeCache.get(attr_hist['attr_id'])
if attr_hist['attr']:
@@ -92,7 +91,7 @@ class AttributeHistoryManger(object):
if record_id not in res:
record_dict = record.OperationRecord.to_dict()
record_dict['unique_value'] = unique_set.get(ci_id)
record_dict['show_attr_value'] = show_attr_set.get(ci_id)
record_dict["user"] = UserCache.get(record_dict.get("uid"))
if record_dict["user"]:
record_dict['user'] = record_dict['user'].nickname