|
|
@ -27,6 +27,9 @@ import { |
|
|
|
} from '#routes/graphResource2/resourceClass/index.dto.js'; |
|
|
|
} from '#routes/graphResource2/resourceClass/index.dto.js'; |
|
|
|
import getPage from '#common/tools/getArrayPage.js'; |
|
|
|
import getPage from '#common/tools/getArrayPage.js'; |
|
|
|
import getNoSpacesStr from '#common/tools/getNoSpacesStr.js'; |
|
|
|
import getNoSpacesStr from '#common/tools/getNoSpacesStr.js'; |
|
|
|
|
|
|
|
import binarySearch from '#common/tools/binarySearch.js'; |
|
|
|
|
|
|
|
import binarySearchMore from '#common/tools/binarySearchMore.js'; |
|
|
|
|
|
|
|
import { Op } from 'sequelize'; |
|
|
|
|
|
|
|
|
|
|
|
const resourceClass = new Router(); |
|
|
|
const resourceClass = new Router(); |
|
|
|
|
|
|
|
|
|
|
@ -145,16 +148,24 @@ resourceClass.post('/createResourceClassItem', async (ctx, next) => { |
|
|
|
return ctx.throw(400, { e: '资源类标识已存在' }); |
|
|
|
return ctx.throw(400, { e: '资源类标识已存在' }); |
|
|
|
} |
|
|
|
} |
|
|
|
// @ 判断是否存在父节点
|
|
|
|
// @ 判断是否存在父节点
|
|
|
|
if(resourceClassRelationId != 0){ |
|
|
|
if (resourceClassRelationId != 0) { |
|
|
|
if(RRP.classRelationObject[resourceClassRelationId] == undefined){ |
|
|
|
if (RRP.classRelationObject[resourceClassRelationId] == undefined) { |
|
|
|
return ctx.throw(400, { e: '不存在目标资源类树节点' }); |
|
|
|
return ctx.throw(400, { e: '不存在目标资源类树节点' }); |
|
|
|
} |
|
|
|
} |
|
|
|
if(!RRP.classListForAtomModel[atomModelId].some(i => i.resourceClassBaseId == RRP.classRelationObject[resourceClassRelationId].resourceClassRelationTarget)){ |
|
|
|
if ( |
|
|
|
return ctx.throw(400, { e: '目标资源类树节点不存在于目标元分类/模型中' }); |
|
|
|
!RRP.classListForAtomModel[atomModelId].some( |
|
|
|
|
|
|
|
(i) => |
|
|
|
|
|
|
|
i.resourceClassBaseId == |
|
|
|
|
|
|
|
RRP.classRelationObject[resourceClassRelationId] |
|
|
|
|
|
|
|
.resourceClassRelationTarget, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
return ctx.throw(400, { |
|
|
|
|
|
|
|
e: '目标资源类树节点不存在于目标元分类/模型中', |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 写入资源类
|
|
|
|
// 写入资源类
|
|
|
|
const newClassItem = await ctx.sequelize.models.ResourceClassBase.create({ |
|
|
|
const newClassItem = await ctx.sequelize.models.ResourceClassBase.create({ |
|
|
|
atomModel: atomModelId, |
|
|
|
atomModel: atomModelId, |
|
|
@ -196,9 +207,11 @@ resourceClass.post('/createResourceClassItem', async (ctx, next) => { |
|
|
|
// ! 写入classRelationObjectForTargetClass
|
|
|
|
// ! 写入classRelationObjectForTargetClass
|
|
|
|
RRP.classRelationObjectForTargetClass[classId] = []; |
|
|
|
RRP.classRelationObjectForTargetClass[classId] = []; |
|
|
|
// @ 获取目标资源关系节点的资源类ID
|
|
|
|
// @ 获取目标资源关系节点的资源类ID
|
|
|
|
const fatherClassId = resourceClassRelationId == 0 ? 0 : |
|
|
|
const fatherClassId = |
|
|
|
RRP.classRelationObject[resourceClassRelationId] |
|
|
|
resourceClassRelationId == 0 |
|
|
|
.resourceClassRelationTarget; |
|
|
|
? 0 |
|
|
|
|
|
|
|
: RRP.classRelationObject[resourceClassRelationId] |
|
|
|
|
|
|
|
.resourceClassRelationTarget; |
|
|
|
// 在数据库添加这条关系
|
|
|
|
// 在数据库添加这条关系
|
|
|
|
const newClassRelation = |
|
|
|
const newClassRelation = |
|
|
|
await ctx.sequelize.models.ResourceClassRelation.create({ |
|
|
|
await ctx.sequelize.models.ResourceClassRelation.create({ |
|
|
@ -230,23 +243,20 @@ resourceClass.post('/createResourceClassItem', async (ctx, next) => { |
|
|
|
const nowRelationList = nowClassModel.classRelationList; |
|
|
|
const nowRelationList = nowClassModel.classRelationList; |
|
|
|
// 拿到父节点和节点ID
|
|
|
|
// 拿到父节点和节点ID
|
|
|
|
const nodeId = nowRelationList[0].resourceClassRelationId; |
|
|
|
const nodeId = nowRelationList[0].resourceClassRelationId; |
|
|
|
const classNode = new RRP.ClassNodeModel( |
|
|
|
const classNode = new RRP.ClassNodeModel(nowClassModel, nodeId); |
|
|
|
nowClassModel, |
|
|
|
RRP.classNodeObject[nodeId] = classNode; |
|
|
|
nodeId, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
RRP.classNodeObject[nodeId] = classNode |
|
|
|
|
|
|
|
RRP.classNodeObject[resourceClassRelationId].children.push(classNode); |
|
|
|
RRP.classNodeObject[resourceClassRelationId].children.push(classNode); |
|
|
|
|
|
|
|
|
|
|
|
if(resourceClassRelationId == 0){ |
|
|
|
if (resourceClassRelationId == 0) { |
|
|
|
RRP.classNodeObjectForAtomModel[atomModelId].push(classNode) |
|
|
|
RRP.classNodeObjectForAtomModel[atomModelId].push(classNode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ctx.body = { |
|
|
|
ctx.body = { |
|
|
|
message: '创建资源类成功', |
|
|
|
message: '创建资源类成功', |
|
|
|
data: { |
|
|
|
data: { |
|
|
|
resourceClassBase: newClassData, |
|
|
|
resourceClassBase: newClassData, |
|
|
|
resourceClassRelation: newClassRelationData |
|
|
|
resourceClassRelation: newClassRelationData, |
|
|
|
} |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
@ -264,67 +274,99 @@ resourceClass.post('/editResourceClassItem', async (ctx, next) => { |
|
|
|
resourceClassBaseAvatar, |
|
|
|
resourceClassBaseAvatar, |
|
|
|
resourceClassBaseDefine, |
|
|
|
resourceClassBaseDefine, |
|
|
|
resourceClassBaseColor, |
|
|
|
resourceClassBaseColor, |
|
|
|
resourceClassBaseType |
|
|
|
resourceClassBaseType, |
|
|
|
} = ctx.request.body; |
|
|
|
} = ctx.request.body; |
|
|
|
const RRP = resourceCache.resourcePool; |
|
|
|
const RRP = resourceCache.resourcePool; |
|
|
|
let oldName,oldIdentify,atomModelId |
|
|
|
let oldName, oldIdentify, atomModelId; |
|
|
|
// @ 判断ID是否存在
|
|
|
|
// @ 判断ID是否存在
|
|
|
|
if(!RRP.classIdList.includes(resourceClassBaseId)){ |
|
|
|
if (!RRP.classIdList.includes(resourceClassBaseId)) { |
|
|
|
return ctx.throw(400, { e: '资源类不存在' }); |
|
|
|
return ctx.throw(400, { e: '资源类不存在' }); |
|
|
|
}else{ |
|
|
|
} else { |
|
|
|
oldName = RRP.classObject[resourceClassBaseId].resourceClassBaseId |
|
|
|
oldName = RRP.classObject[resourceClassBaseId].resourceClassBaseId; |
|
|
|
oldIdentify = RRP.classObject[resourceClassBaseId].resourceClassBaseIdentify |
|
|
|
oldIdentify = |
|
|
|
atomModelId = RRP.classObject[resourceClassBaseId].atomModel |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseIdentify; |
|
|
|
|
|
|
|
atomModelId = RRP.classObject[resourceClassBaseId].atomModel; |
|
|
|
} |
|
|
|
} |
|
|
|
// @ 判断名称是否重复
|
|
|
|
// @ 判断名称是否重复
|
|
|
|
if(RRP.classListForAtomModel[atomModelId].some(i => i.resourceClassBaseName == getNoSpacesStr(resourceClassBaseName) && i.resourceClassBaseId != resourceClassBaseId)){ |
|
|
|
if ( |
|
|
|
|
|
|
|
RRP.classListForAtomModel[atomModelId].some( |
|
|
|
|
|
|
|
(i) => |
|
|
|
|
|
|
|
i.resourceClassBaseName == |
|
|
|
|
|
|
|
getNoSpacesStr(resourceClassBaseName) && |
|
|
|
|
|
|
|
i.resourceClassBaseId != resourceClassBaseId, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) { |
|
|
|
return ctx.throw(400, { e: '资源类重名' }); |
|
|
|
return ctx.throw(400, { e: '资源类重名' }); |
|
|
|
} |
|
|
|
} |
|
|
|
// @ 判断标识是否重复
|
|
|
|
// @ 判断标识是否重复
|
|
|
|
if(RRP.classList.some(i => i.resourceClassBaseIdentify == getNoSpacesStr(resourceClassBaseIdentify).toUpperCase() && i.resourceClassBaseId != resourceClassBaseId)){ |
|
|
|
if ( |
|
|
|
|
|
|
|
RRP.classList.some( |
|
|
|
|
|
|
|
(i) => |
|
|
|
|
|
|
|
i.resourceClassBaseIdentify == |
|
|
|
|
|
|
|
getNoSpacesStr(resourceClassBaseIdentify).toUpperCase() && |
|
|
|
|
|
|
|
i.resourceClassBaseId != resourceClassBaseId, |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) { |
|
|
|
return ctx.throw(400, { e: '资源类标识已存在' }); |
|
|
|
return ctx.throw(400, { e: '资源类标识已存在' }); |
|
|
|
} |
|
|
|
} |
|
|
|
// 修改信息
|
|
|
|
// 修改信息
|
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseName = getNoSpacesStr(resourceClassBaseName); |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseName = getNoSpacesStr( |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseDescribe = resourceClassBaseDescribe; |
|
|
|
resourceClassBaseName, |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseIdentify = getNoSpacesStr(resourceClassBaseIdentify).toUpperCase(); |
|
|
|
); |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseId = resourceClassBaseId; |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseDescribe = |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseAvatar = resourceClassBaseAvatar; |
|
|
|
resourceClassBaseDescribe; |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseDefine = resourceClassBaseDefine; |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseIdentify = |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseColor = resourceClassBaseColor; |
|
|
|
getNoSpacesStr(resourceClassBaseIdentify).toUpperCase(); |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseType = resourceClassBaseType; |
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseId = |
|
|
|
|
|
|
|
resourceClassBaseId; |
|
|
|
|
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseAvatar = |
|
|
|
|
|
|
|
resourceClassBaseAvatar; |
|
|
|
|
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseDefine = |
|
|
|
|
|
|
|
resourceClassBaseDefine; |
|
|
|
|
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseColor = |
|
|
|
|
|
|
|
resourceClassBaseColor; |
|
|
|
|
|
|
|
RRP.classObject[resourceClassBaseId].resourceClassBaseType = |
|
|
|
|
|
|
|
resourceClassBaseType; |
|
|
|
|
|
|
|
|
|
|
|
// @ 是否修改标识
|
|
|
|
// @ 是否修改标识
|
|
|
|
console.log(oldIdentify, getNoSpacesStr(resourceClassBaseIdentify).toUpperCase()) |
|
|
|
if ( |
|
|
|
if(oldIdentify != getNoSpacesStr(resourceClassBaseIdentify).toUpperCase()){ |
|
|
|
oldIdentify != getNoSpacesStr(resourceClassBaseIdentify).toUpperCase() |
|
|
|
console.log('更改表名') |
|
|
|
) { |
|
|
|
// 需要更改表明
|
|
|
|
// 需要更改表明
|
|
|
|
// ! 删除模型
|
|
|
|
// ! 删除模型
|
|
|
|
delete ctx.sequelize.models[oldIdentify.toLowerCase()] |
|
|
|
delete ctx.sequelize.models[oldIdentify.toLowerCase()]; |
|
|
|
// ! 修改表名
|
|
|
|
// ! 修改表名
|
|
|
|
const results = await ctx.sequelize.queryInterface.renameTable('entity_' + oldIdentify.toLowerCase(),'entity_' + getNoSpacesStr(resourceClassBaseIdentify).toLowerCase()) |
|
|
|
const results = await ctx.sequelize.queryInterface.renameTable( |
|
|
|
|
|
|
|
'entity_' + oldIdentify.toLowerCase(), |
|
|
|
|
|
|
|
'entity_' + getNoSpacesStr(resourceClassBaseIdentify).toLowerCase(), |
|
|
|
|
|
|
|
); |
|
|
|
// ! 启动新模型
|
|
|
|
// ! 启动新模型
|
|
|
|
await RRP.classModelObject[resourceClassBaseId].createSequelizeModel(); |
|
|
|
await RRP.classModelObject[resourceClassBaseId].createSequelizeModel(); |
|
|
|
// | 更新资源实体ID
|
|
|
|
// | 更新资源实体ID
|
|
|
|
} |
|
|
|
} |
|
|
|
ctx.body = { |
|
|
|
ctx.body = { |
|
|
|
message: '修改资源类信息成功' |
|
|
|
message: '修改资源类信息成功', |
|
|
|
}; |
|
|
|
}; |
|
|
|
await next() |
|
|
|
await next(); |
|
|
|
await ctx.sequelize.models.ResourceClassBase.update({ |
|
|
|
await ctx.sequelize.models.ResourceClassBase.update( |
|
|
|
resourceClassBaseName : getNoSpacesStr(resourceClassBaseName), |
|
|
|
{ |
|
|
|
resourceClassBaseDescribe : resourceClassBaseDescribe, |
|
|
|
resourceClassBaseName: getNoSpacesStr(resourceClassBaseName), |
|
|
|
resourceClassBaseIdentify : getNoSpacesStr(resourceClassBaseIdentify).toUpperCase(), |
|
|
|
resourceClassBaseDescribe: resourceClassBaseDescribe, |
|
|
|
resourceClassBaseId : resourceClassBaseId, |
|
|
|
resourceClassBaseIdentify: getNoSpacesStr( |
|
|
|
resourceClassBaseAvatar : resourceClassBaseAvatar, |
|
|
|
resourceClassBaseIdentify, |
|
|
|
resourceClassBaseDefine : resourceClassBaseDefine, |
|
|
|
).toUpperCase(), |
|
|
|
resourceClassBaseColor : resourceClassBaseColor, |
|
|
|
resourceClassBaseId: resourceClassBaseId, |
|
|
|
resourceClassBaseType : resourceClassBaseType, |
|
|
|
resourceClassBaseAvatar: resourceClassBaseAvatar, |
|
|
|
},{ |
|
|
|
resourceClassBaseDefine: resourceClassBaseDefine, |
|
|
|
where:{ |
|
|
|
resourceClassBaseColor: resourceClassBaseColor, |
|
|
|
resourceClassBaseId |
|
|
|
resourceClassBaseType: resourceClassBaseType, |
|
|
|
} |
|
|
|
}, |
|
|
|
}) |
|
|
|
{ |
|
|
|
|
|
|
|
where: { |
|
|
|
|
|
|
|
resourceClassBaseId, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// @ 删除资源类
|
|
|
|
// @ 删除资源类
|
|
|
@ -333,7 +375,195 @@ resourceClass.delete('/deleteResourceClassItem', async (ctx, next) => { |
|
|
|
if (!verif.status) { |
|
|
|
if (!verif.status) { |
|
|
|
return ctx.throw(400, { e: verif.error.map((i) => i.message) }); |
|
|
|
return ctx.throw(400, { e: verif.error.map((i) => i.message) }); |
|
|
|
} |
|
|
|
} |
|
|
|
ctx.body = 6; |
|
|
|
const nodeId = ctx.query.nodeId; |
|
|
|
|
|
|
|
// 判断是否存在节点
|
|
|
|
|
|
|
|
const RRP = resourceCache.resourcePool; |
|
|
|
|
|
|
|
const findNodeId = binarySearch(RRP.classRelationIdList, nodeId); |
|
|
|
|
|
|
|
if (findNodeId == -1) { |
|
|
|
|
|
|
|
return ctx.throw(400, { e: '不存在此资源类节点ID' }); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
const classNodeObject = RRP.classNodeObject[nodeId]; |
|
|
|
|
|
|
|
if (classNodeObject.children.length != 0) { |
|
|
|
|
|
|
|
return ctx.throw(400, { |
|
|
|
|
|
|
|
e: '该资源类节点下存在子节点,无法删除,请先删除子节点。', |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
const classId = classNodeObject.classId; |
|
|
|
|
|
|
|
const fatherId = classNodeObject.fatherId; |
|
|
|
|
|
|
|
const atomModel = classNodeObject.atomModel; |
|
|
|
|
|
|
|
const classIdentify = classNodeObject.classIdentify; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let entityListB, expandListB; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// @ 删掉关联列表
|
|
|
|
|
|
|
|
RRP.classRelationList.splice(findNodeId, 1); |
|
|
|
|
|
|
|
// @ 删掉关联ID列表
|
|
|
|
|
|
|
|
RRP.classRelationIdList.splice(findNodeId, 1); |
|
|
|
|
|
|
|
// @ 删掉关联ID对象集合
|
|
|
|
|
|
|
|
delete RRP.classRelationObject[nodeId]; |
|
|
|
|
|
|
|
// @ 删除资源类的关联对象中的当前节点
|
|
|
|
|
|
|
|
const relationList = RRP.classRelationObjectForTargetClass[classId]; |
|
|
|
|
|
|
|
relationList.splice( |
|
|
|
|
|
|
|
binarySearch(relationList, nodeId, 'resourceClassRelationId'), |
|
|
|
|
|
|
|
1, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// @ 删除父节点下的children的此节点
|
|
|
|
|
|
|
|
RRP.classNodeObject[fatherId].children.splice( |
|
|
|
|
|
|
|
binarySearch(RRP.classNodeObject[fatherId].children, nodeId, 'nodeId'), |
|
|
|
|
|
|
|
1, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
// @ 删除节点列表上的此节点
|
|
|
|
|
|
|
|
delete RRP.classNodeObject[nodeId]; |
|
|
|
|
|
|
|
// 删除原分类下的根节点
|
|
|
|
|
|
|
|
if (fatherId == 0) { |
|
|
|
|
|
|
|
RRP.classNodeObjectForAtomModel[atomModel].splice( |
|
|
|
|
|
|
|
binarySearch( |
|
|
|
|
|
|
|
RRP.classNodeObjectForAtomModel[atomModel], |
|
|
|
|
|
|
|
nodeId, |
|
|
|
|
|
|
|
'nodeId', |
|
|
|
|
|
|
|
), |
|
|
|
|
|
|
|
1, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (classNodeObject.classRelationIdList.length == 0) { |
|
|
|
|
|
|
|
// 最后一个节点了,删掉的话就删掉了资源类
|
|
|
|
|
|
|
|
// @ 删掉资源类的关联列表
|
|
|
|
|
|
|
|
delete RRP.classRelationObjectForTargetClass[classId]; |
|
|
|
|
|
|
|
// @ 删资源类
|
|
|
|
|
|
|
|
const classIdIndex = binarySearch(RRP.classIdList, classId); |
|
|
|
|
|
|
|
RRP.classList.splice(classIdIndex, 1); |
|
|
|
|
|
|
|
RRP.classIdList.splice(classIdIndex, 1); |
|
|
|
|
|
|
|
delete RRP.classObject[classId]; |
|
|
|
|
|
|
|
RRP.classListForAtomModel[atomModel].splice( |
|
|
|
|
|
|
|
binarySearch( |
|
|
|
|
|
|
|
RRP.classListForAtomModel[atomModel], |
|
|
|
|
|
|
|
classId, |
|
|
|
|
|
|
|
'resourceClassBaseId', |
|
|
|
|
|
|
|
), |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
// @ 删资源类拓展字段
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
|
|
|
Object.keys(RRP.classExpandForClassBaseObject).includes( |
|
|
|
|
|
|
|
classId.toString(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
const expandList = RRP.classExpandForClassBaseObject[classId]; |
|
|
|
|
|
|
|
const expandIdList = Object.keys(expandList).map((i) => { |
|
|
|
|
|
|
|
delete RRP.classExpandObject[ |
|
|
|
|
|
|
|
expandList[i].resourceClassExpandFieldId |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
return expandList[i].resourceClassExpandFieldId; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
expandListB = expandIdList; |
|
|
|
|
|
|
|
delete RRP.classExpandForClassBaseObject[classId]; |
|
|
|
|
|
|
|
const expandIdIndexList = binarySearchMore( |
|
|
|
|
|
|
|
RRP.classExpandList, |
|
|
|
|
|
|
|
expandIdList, |
|
|
|
|
|
|
|
'resourceClassExpandFieldId', |
|
|
|
|
|
|
|
0, |
|
|
|
|
|
|
|
RRP.classExpandList.length, |
|
|
|
|
|
|
|
).sort((a, b) => b - a); |
|
|
|
|
|
|
|
for (let i of expandIdIndexList) { |
|
|
|
|
|
|
|
RRP.classExpandList.splice(i, 1); |
|
|
|
|
|
|
|
RRP.classExpandIdList.splice(i, 1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// @ 删除资源实体字段
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
|
|
|
Object.keys(RRP.entityStructForClassBaseObject).includes( |
|
|
|
|
|
|
|
classId.toString(), |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
) { |
|
|
|
|
|
|
|
const entityNameObject = |
|
|
|
|
|
|
|
RRP.entityStructForClassBaseObject[classId]; |
|
|
|
|
|
|
|
const entityIdList = Object.keys(entityNameObject).map((i) => { |
|
|
|
|
|
|
|
delete RRP.entityStructObject[ |
|
|
|
|
|
|
|
entityNameObject[i].resourceEntityStructId |
|
|
|
|
|
|
|
]; |
|
|
|
|
|
|
|
return entityNameObject[i].resourceEntityStructId; |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
entityListB = entityIdList; |
|
|
|
|
|
|
|
delete RRP.entityStructForClassBaseObject[classId]; |
|
|
|
|
|
|
|
const entityIndexList = binarySearchMore( |
|
|
|
|
|
|
|
RRP.entityStructList, |
|
|
|
|
|
|
|
entityIdList, |
|
|
|
|
|
|
|
'resourceEntityStructId', |
|
|
|
|
|
|
|
0, |
|
|
|
|
|
|
|
RRP.entityStructList.length, |
|
|
|
|
|
|
|
).sort((a, b) => b - a); |
|
|
|
|
|
|
|
for (let i of entityIndexList) { |
|
|
|
|
|
|
|
RRP.entityStructList.splice(i, 1); |
|
|
|
|
|
|
|
RRP.entityStructIdList.splice(i, 1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// ! @ 删资源对象
|
|
|
|
|
|
|
|
// @ 删除表
|
|
|
|
|
|
|
|
const data = await ctx.sequelize.query( |
|
|
|
|
|
|
|
'DROP TABLE IF EXISTS ' + 'entity_' + classIdentify.toLowerCase(), |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
// 删除资源对象缓存
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
ctx.body = { |
|
|
|
|
|
|
|
message: '删除资源类节点成功。', |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
// 删除关联
|
|
|
|
|
|
|
|
ctx.sequelize.models.ResourceClassRelation.update( |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isDelete: new Date().toISOString(), |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
where: { |
|
|
|
|
|
|
|
resourceClassRelationId: nodeId, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (classNodeObject.classRelationIdList.length == 0) { |
|
|
|
|
|
|
|
// 删除资源类
|
|
|
|
|
|
|
|
ctx.sequelize.models.ResourceClassBase.update( |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isDelete: new Date().toISOString(), |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
where: { |
|
|
|
|
|
|
|
resourceClassBaseId: classId, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
// 删除拓展字段
|
|
|
|
|
|
|
|
if (expandListB) { |
|
|
|
|
|
|
|
ctx.sequelize.models.ResourceClassExpandField.update( |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isDelete: new Date().toISOString(), |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
where: { |
|
|
|
|
|
|
|
resourceClassExpandFieldId: { |
|
|
|
|
|
|
|
[Op.in]: expandListB, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 删除实体字段
|
|
|
|
|
|
|
|
if (entityListB) { |
|
|
|
|
|
|
|
ctx.sequelize.models.ResourceEntityStruct.update( |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
isDelete: new Date().toISOString(), |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
where: { |
|
|
|
|
|
|
|
resourceEntityStructId: { |
|
|
|
|
|
|
|
[Op.in]: entityListB, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
// @ 创建资源类关联
|
|
|
|
// @ 创建资源类关联
|
|
|
@ -351,6 +581,7 @@ resourceClass.delete('/deleteResourceClassRelation', async (ctx, next) => { |
|
|
|
if (!verif.status) { |
|
|
|
if (!verif.status) { |
|
|
|
return ctx.throw(400, { e: verif.error.map((i) => i.message) }); |
|
|
|
return ctx.throw(400, { e: verif.error.map((i) => i.message) }); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const RRP = resourceCache.resourcePool; |
|
|
|
ctx.body = 8; |
|
|
|
ctx.body = 8; |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|