From 179463e733b875d54d55c1de2dbc6b9123f88846 Mon Sep 17 00:00:00 2001 From: thexqn Date: Sat, 14 Sep 2024 01:13:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(cmdb):=20=E6=B7=BB=E5=8A=A0=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=8E=86=E5=8F=B2=E8=A1=A8=E7=9A=84=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E5=80=BC=E5=88=97=20(Add=20unique=20value=20column=20to=20oper?= =?UTF-8?q?ation=20history=20table)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmdb-api/api/lib/cmdb/history.py | 31 +++++++++---------- .../operation_history/modules/ciTable.vue | 6 ++-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/cmdb-api/api/lib/cmdb/history.py b/cmdb-api/api/lib/cmdb/history.py index c5a7aab..1aa0cff 100644 --- a/cmdb-api/api/lib/cmdb/history.py +++ b/cmdb-api/api/lib/cmdb/history.py @@ -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 diff --git a/cmdb-ui/src/modules/cmdb/views/operation_history/modules/ciTable.vue b/cmdb-ui/src/modules/cmdb/views/operation_history/modules/ciTable.vue index 4d2d2c1..58e1dba 100644 --- a/cmdb-ui/src/modules/cmdb/views/operation_history/modules/ciTable.vue +++ b/cmdb-ui/src/modules/cmdb/views/operation_history/modules/ciTable.vue @@ -45,7 +45,7 @@ - +