Merge remote-tracking branch 'origin/master'

This commit is contained in:
penzai 2020-01-17 15:10:16 +08:00
commit bb9d7da435
5 changed files with 27 additions and 4 deletions

View File

@ -10,6 +10,8 @@ from api.lib.cmdb.cache import AttributeCache
from api.lib.cmdb.cache import CITypeAttributeCache from api.lib.cmdb.cache import CITypeAttributeCache
from api.lib.cmdb.cache import CITypeAttributesCache from api.lib.cmdb.cache import CITypeAttributesCache
from api.lib.cmdb.cache import CITypeCache from api.lib.cmdb.cache import CITypeCache
from api.lib.cmdb.const import CMDB_QUEUE
from api.lib.cmdb.value import AttributeValueManager
from api.lib.decorator import kwargs_required from api.lib.decorator import kwargs_required
from api.models.cmdb import CI from api.models.cmdb import CI
from api.models.cmdb import CIType from api.models.cmdb import CIType
@ -282,6 +284,8 @@ class CITypeAttributeManager(object):
:param attr_ids: list :param attr_ids: list
:return: :return:
""" """
from api.tasks.cmdb import ci_cache
cls._check(type_id, attr_ids) cls._check(type_id, attr_ids)
for attr_id in attr_ids: for attr_id in attr_ids:
@ -292,6 +296,11 @@ class CITypeAttributeManager(object):
if existed is not None: if existed is not None:
existed.soft_delete() existed.soft_delete()
for ci in CI.get_by(type_id=type_id, to_dict=False):
AttributeValueManager.delete_attr_value(attr_id, ci.id)
ci_cache.apply_async([ci.id], queue=CMDB_QUEUE)
CITypeAttributeCache.clean(type_id, attr_id) CITypeAttributeCache.clean(type_id, attr_id)
CITypeAttributesCache.clean(type_id) CITypeAttributesCache.clean(type_id)

View File

@ -11,6 +11,7 @@ from api.lib.cmdb.cache import AttributeCache
from api.lib.cmdb.cache import CITypeAttributeCache from api.lib.cmdb.cache import CITypeAttributeCache
from api.lib.cmdb.const import ExistPolicy from api.lib.cmdb.const import ExistPolicy
from api.lib.cmdb.const import OperateType from api.lib.cmdb.const import OperateType
from api.lib.cmdb.const import ValueTypeEnum
from api.lib.cmdb.history import AttributeHistoryManger from api.lib.cmdb.history import AttributeHistoryManger
from api.lib.cmdb.utils import TableMap from api.lib.cmdb.utils import TableMap
from api.lib.cmdb.utils import ValueTypeMap from api.lib.cmdb.utils import ValueTypeMap
@ -156,7 +157,20 @@ class AttributeValueManager(object):
existed_value = existed_attr and existed_attr.value existed_value = existed_attr and existed_attr.value
if existed_value is None: if existed_value is None:
value_table.create(ci_id=ci.id, attr_id=attr.id, value=value) value_table.create(ci_id=ci.id, attr_id=attr.id, value=value)
self._write_change(ci.id, attr.id, OperateType.ADD, None, value) self._write_change(ci.id, attr.id, OperateType.ADD, None, value)
else: else:
existed_attr.update(value=value) if not value and attr.value_type != ValueTypeEnum.TEXT:
existed_attr.delete()
else:
existed_attr.update(value=value)
self._write_change(ci.id, attr.id, OperateType.UPDATE, existed_value, value) self._write_change(ci.id, attr.id, OperateType.UPDATE, existed_value, value)
@staticmethod
def delete_attr_value(attr_id, ci_id):
attr = AttributeCache.get(attr_id)
if attr is not None:
value_table = TableMap(attr_name=attr.name).table
for item in value_table.get_by(attr_id=attr.id, ci_id=ci_id, to_dict=False):
item.delete()

View File

@ -132,7 +132,7 @@ export default {
let q = `q=_type:${this.$router.currentRoute.meta.typeId}` let q = `q=_type:${this.$router.currentRoute.meta.typeId}`
Object.keys(params).forEach(key => { Object.keys(params).forEach(key => {
if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') { if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
if (typeof params[key] === 'object' && params[key].length > 1) { if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
q += `,${key}:(${params[key].join(';')})` q += `,${key}:(${params[key].join(';')})`
} else if (params[key]) { } else if (params[key]) {
q += `,${key}:*${params[key]}*` q += `,${key}:*${params[key]}*`

View File

@ -89,7 +89,7 @@ export default {
let q = '' let q = ''
Object.keys(params).forEach(key => { Object.keys(params).forEach(key => {
if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') { if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
if (typeof params[key] === 'object' && params[key].length > 1) { if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
q += `,${key}:(${params[key].join(';')})` q += `,${key}:(${params[key].join(';')})`
} else if (params[key]) { } else if (params[key]) {
q += `,${key}:*${params[key]}*` q += `,${key}:*${params[key]}*`

View File

@ -69,7 +69,7 @@ export default {
let q = `q=_type:${this.typeId}` let q = `q=_type:${this.typeId}`
Object.keys(params).forEach(key => { Object.keys(params).forEach(key => {
if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') { if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
if (typeof params[key] === 'object' && params[key].length > 1) { if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
q += `,${key}:(${params[key].join(';')})` q += `,${key}:(${params[key].join(';')})`
} else if (params[key]) { } else if (params[key]) {
q += `,${key}:*${params[key]}*` q += `,${key}:*${params[key]}*`