优化树和node与resource的引用关系

main
expressgy 10 months ago
parent eaeedc0080
commit c35880b91e
  1. 2
      development.env.js
  2. 2
      package.json
  3. 2
      production.env.js
  4. 306
      src/cache/index.js
  5. 5
      src/common/database/dataModels/resourceEntityStruct.dataModel.js

@ -14,7 +14,7 @@
import prodConfig from "#root/production.env.js"; import prodConfig from "#root/production.env.js";
const config = { const config = {
port: 3000, port: 5000,
} }
const devConfig = {...prodConfig, ...config} const devConfig = {...prodConfig, ...config}

@ -22,7 +22,7 @@
"format": "prettier --write \"src/**/*.js\"", "format": "prettier --write \"src/**/*.js\"",
"start": "cross-env NODE_ENV=production node bootstrap.js", "start": "cross-env NODE_ENV=production node bootstrap.js",
"start:dev": "cross-env NODE_ENV=development nodemon --unhandled-rejections=throw bootstrap.js", "start:dev": "cross-env NODE_ENV=development nodemon --unhandled-rejections=throw bootstrap.js",
"test:dev": "cross-env NODE_ENV=development node bootstrap.js", "start:testDev": "cross-env NODE_ENV=development node bootstrap.js",
"genmodel": "cd gen-Model && sequelize-auto -h 127.0.0.1 -d lauch -u root -x root -p 3306" "genmodel": "cd gen-Model && sequelize-auto -h 127.0.0.1 -d lauch -u root -x root -p 3306"
}, },
"keywords": [], "keywords": [],

@ -14,7 +14,7 @@
const prodConfig = { const prodConfig = {
appName: 'graphResource2', appName: 'graphResource2',
port: 3000, port: 5000,
zip: true, zip: true,
upfile:{ upfile:{
maxFileSize: 200 * 1024 * 1024, maxFileSize: 200 * 1024 * 1024,

306
src/cache/index.js vendored

@ -236,9 +236,16 @@ async function makeResourceCache(sequelize) {
// @ RBP - Object - 描述:字典缓存池 // @ RBP - Object - 描述:字典缓存池
const RBP = resourceCache.baseDictPool; const RBP = resourceCache.baseDictPool;
// ! 获取资源类信息 ============================================================================= // ! 获取资源类信息 =============================================================================
console.time('获取资源类信息');
// region 获取资源类信息 // region 获取资源类信息
const classList = const classList = await sequelize.models.ResourceClassBase.findAll({
await sequelize.models.ResourceClassBase.findAll(sequelizeFindAllType); ...sequelizeFindAllType,
where: {
isDelete: {
[Op.is]: null,
},
},
});
// @ classIdList - Array[number] - 描述:资源类ID列表 // @ classIdList - Array[number] - 描述:资源类ID列表
const classIdList = []; const classIdList = [];
// @ classObject - Object[resourceClassBase] - 描述:资源类对象 // @ classObject - Object[resourceClassBase] - 描述:资源类对象
@ -268,7 +275,9 @@ async function makeResourceCache(sequelize) {
// console.log(classIdList) // console.log(classIdList)
// console.log(classObject) // console.log(classObject)
// endregion // endregion
console.timeEnd('获取资源类信息');
// ! 获取拓展字段信息 =========================================================================== // ! 获取拓展字段信息 ===========================================================================
console.time('获取拓展字段信息');
// region 获取拓展字段信息 // region 获取拓展字段信息
const classExpandList = const classExpandList =
await sequelize.models.ResourceClassExpandField.findAll( await sequelize.models.ResourceClassExpandField.findAll(
@ -278,8 +287,8 @@ async function makeResourceCache(sequelize) {
const classExpandIdList = []; const classExpandIdList = [];
// @ classExpandObject - Object[resourceClassExpandField] - 描述:资源类拓展字段对象 // @ classExpandObject - Object[resourceClassExpandField] - 描述:资源类拓展字段对象
const classExpandObject = {}; const classExpandObject = {};
// @ classExpandForClassIdObject - Object - 描述:基于资源类ID的资源拓展字段对象集合 // @ classExpandForClassBaseObject - Object - 描述:基于资源类ID的资源拓展字段对象集合
const classExpandForClassIdObject = {}; const classExpandForClassBaseObject = {};
for (let i = 0; i < classExpandList.length; i++) { for (let i = 0; i < classExpandList.length; i++) {
const expandField = classExpandList[i]; const expandField = classExpandList[i];
if (expandField.isDelete) { if (expandField.isDelete) {
@ -306,19 +315,21 @@ async function makeResourceCache(sequelize) {
classExpandObject[expandFieldId] = expandField; classExpandObject[expandFieldId] = expandField;
// 拓展字段中的资源类ID // 拓展字段中的资源类ID
const classId = expandField.resourceClassBase; const classId = expandField.resourceClassBase;
if (classExpandForClassIdObject[classId] === undefined) { if (classExpandForClassBaseObject[classId] === undefined) {
classExpandForClassIdObject[classId] = { classExpandForClassBaseObject[classId] = {
[expandField.resourceClassExpandFieldIdentify]: expandField, [expandField.resourceClassExpandFieldIdentify]: expandField,
}; };
} else { } else {
classExpandForClassIdObject[classId][ classExpandForClassBaseObject[classId][
expandField.resourceClassExpandFieldIdentify expandField.resourceClassExpandFieldIdentify
] = expandField; ] = expandField;
} }
} }
// console.log(classExpandForClassIdObject) // console.log(classExpandForClassBaseObject)
// endregion // endregion
console.timeEnd('获取拓展字段信息');
// ! 获取实体结构表 ============================================================================= // ! 获取实体结构表 =============================================================================
console.time('获取实体结构表');
// region 获取实体结构表 // region 获取实体结构表
const entityStructList = const entityStructList =
await sequelize.models.ResourceEntityStruct.findAll( await sequelize.models.ResourceEntityStruct.findAll(
@ -356,7 +367,9 @@ async function makeResourceCache(sequelize) {
} }
} }
// endregion // endregion
console.timeEnd('获取实体结构表');
// ! 获取资源类关系表 =========================================================================== // ! 获取资源类关系表 ===========================================================================
console.time('获取资源类关系表');
// region 获取资源类关系表 // region 获取资源类关系表
const classRelationList = const classRelationList =
await sequelize.models.ResourceClassRelation.findAll( await sequelize.models.ResourceClassRelation.findAll(
@ -381,67 +394,54 @@ async function makeResourceCache(sequelize) {
} }
} }
// endregion // endregion
console.timeEnd('获取资源类关系表');
// | 这里生成基础数据模型 ============================================================================================= // | 这里生成基础数据模型 =============================================================================================
console.time('==生成资源类基础数据模型==');
// region 这里生成基础数据模型 // region 这里生成基础数据模型
class makeClass { // ! 资源类
// 基础数据 class ClassModel {
classId;
classIdentify;
atomModel;
className;
classBase;
classExpand;
entityStruct;
sequelizeModel;
constructor(classItem) { constructor(classItem) {
// 设置基础信息值 // 设置基础信息值
const classId = classItem.resourceClassBaseId; this.resourceClass = classItem;
this.classId = classId;
const classIdentify = classItem.resourceClassBaseIdentify;
this.classIdentify = classIdentify;
const atomModel = classItem.atomModel;
this.atomModel = atomModel;
const className = classItem.resourceClassBaseName;
this.className = className;
this.classBase = classItem;
this.classExpand = classExpandForClassIdObject[classId];
if (this.classExpand === undefined) {
this.classExpand = {};
}
this.entityStruct = entityStructForClassBaseObject[classId];
if (this.entityStruct === undefined) {
this.entityStruct = {};
}
this.classRelationList = classRelationObjectForTargetClass[classId];
if (this.classRelationList == undefined) {
this.classRelationList = [];
}
this.#createCLassRelationIdentify();
this.#createSequelizeModel();
} }
get classId() { get classId() {
return this.classId; return this.resourceClass.resourceClassBaseId;
} }
get classIdentify() { get classIdentify() {
return this.classIdentify; return this.resourceClass.resourceClassBaseIdentify;
} }
get atomModel() { get atomModel() {
return this.atomModel; return this.resourceClass.atomModel;
} }
get className() { get className() {
return this.className; return this.resourceClass.resourceClassBaseName;
}
get classBase() {
return this.classBase;
} }
get classExpand() { get classExpand() {
return this.classExpand; let classExpand = classExpandForClassBaseObject[this.classId];
if (classExpand === undefined) {
classExpand = {};
}
return classExpand;
} }
get entityStruct() { get entityStruct() {
return this.entityStruct; let entityStruct = entityStructForClassBaseObject[this.classId];
if (entityStruct === undefined) {
entityStruct = {};
}
return entityStruct;
}
get classRelationList() {
if (classRelationObjectForTargetClass[this.classId] === undefined) {
return [];
} else {
return classRelationObjectForTargetClass[this.classId];
}
}
get classRelationIdList() {
return this.classRelationList.map((i) => i.resourceClassRelationId);
} }
#createSequelizeModel() { async createSequelizeModel() {
class resourceEntity extends Model {} class resourceEntity extends Model {}
// 定义资源实体名称字段 // 定义资源实体名称字段
const entityName = { const entityName = {
@ -449,12 +449,13 @@ async function makeResourceCache(sequelize) {
allowNull: false, allowNull: false,
comment: '资源实体名称', comment: '资源实体名称',
}; };
const entityStruct = this.entityStruct;
// 定义资源实体名称字段在数据库的备注 // 定义资源实体名称字段在数据库的备注
if (this.entityStruct.entityName !== undefined) { if (entityStruct.entityName !== undefined) {
entityName.comment = entityName.comment =
this.entityStruct.entityName.resourceEntityStructName + entityStruct.entityName.resourceEntityStructName +
'-' + '-' +
this.entityStruct.entityName.resourceEntityStructDescribe; entityStruct.entityName.resourceEntityStructDescribe;
} }
// 定义字段 // 定义字段
const defineField = { const defineField = {
@ -543,18 +544,21 @@ async function makeResourceCache(sequelize) {
} }
resourceEntity.init(defineField, defineTable); resourceEntity.init(defineField, defineTable);
// 同步数据库 // 同步数据库
resourceEntity.sync(); // {alter: true}是修改,现在是如果存在就不更改表,后面修改表明,字段名,字段长度会在更新操作时添加 await resourceEntity.sync(); // {alter: true}是修改,现在是如果存在就不更改表,后面修改表明,字段名,字段长度会在更新操作时添加
this.sequelizeModel = resourceEntity; this.sequelizeModel = resourceEntity;
} }
get zeroInfo(){
#createCLassRelationIdentify() { return {
this.relationIdList = []; resourceClassBaseId: this.resourceClass.resourceClassBaseId,
if (this.classRelationList.length != 0) { resourceClassBaseName: this.resourceClass.resourceClassBaseName,
for (let classRelationItem of this.classRelationList) { }
this.relationIdList.push( }
classRelationItem.resourceClassRelationId, get info(){
); return{
} ...this.resourceClass,
resourceClassExpandField: this.classExpand,
resourceEntityStruct: this.entityStruct,
resourceClassRelation: this.classRelationList
} }
} }
} }
@ -565,9 +569,11 @@ async function makeResourceCache(sequelize) {
// 排除删除的 // 排除删除的
continue; continue;
} }
classModelObject[classId] = new makeClass(classObject[classId]); classModelObject[classId] = new ClassModel(classObject[classId]);
console.time(' 初始化资源实体表'+ classModelObject[classId].classIdentify)
await classModelObject[classId].createSequelizeModel();
console.timeEnd(' 初始化资源实体表'+ classModelObject[classId].classIdentify)
} }
// console.log(classModelObject)
// console.log((await sequelize.models.omencust.create({ // console.log((await sequelize.models.omencust.create({
// entityId: 'omencust' + crypto.randomUUID(), // entityId: 'omencust' + crypto.randomUUID(),
// originNode: '0-0-1', // originNode: '0-0-1',
@ -577,64 +583,135 @@ async function makeResourceCache(sequelize) {
// project: '1' // project: '1'
// })).dataValues) // })).dataValues)
// endregion // endregion
console.timeEnd('==生成资源类基础数据模型==');
// | 这里生成关系节点数据模型 ========================================================================================== // | 这里生成关系节点数据模型 ==========================================================================================
console.time('==生成类关系节点数据模型==');
// region 这里生成关系节点数据模型
// 给每个类生成关联列表 // 给每个类生成关联列表
// @ classNodeObject - Object - 描述:类关系节点数据模型集合
const classNodeObject = { const classNodeObject = {
0: { 0: {
classModel:{}, classModel: {},
nodeId:0, nodeId: 0,
children:[], children: [],
father: null father: null,
} },
}; };
class makeClassNode { // ! 资源类节点
class ClassNodeModel {
constructor(classModel, classRelationId) { constructor(classModel, classRelationId) {
this.classModel = classModel; this.nodeId = classRelationId;
this.children = [] this.fatherId =
this.nodeId =classRelationId; classRelationObject[
this.father = classRelationObject[classRelationId].resourceClassRelationFather classRelationId
].resourceClassRelationFather;
this.children = [];
this.classData = classModel;
}
get classId() {
return this.classData.classId;
}
get classIdentify() {
return this.classData.classIdentify;
}
get atomModel() {
return this.classData.atomModel;
}
get className() {
return this.classData.className;
}
get classExpand() {
return this.classData.classExpand;
}
get entityStruct() {
return this.classData.entityStruct;
}
get classRelationList() {
return this.classData.classRelationList;
}
get classRelationIdList() {
return this.classData.classRelationIdList;
}
get nodeZeroInfo(){
return {
...this.classData.zeroInfo,
nodeId: this.nodeId,
fatherId: this.fatherId,
children: this.children.map(i => i.nodeZeroInfo)
}
} }
} }
// @ 生成类关系节点 // @ 生成类关系节点
for (let classId of Object.keys(classModelObject)) { for (let classId of Object.keys(classModelObject)) {
const classModel = classModelObject[classId]; const nowClassModel = classModelObject[classId];
const relationIdList = classModel.relationIdList const nowRelationIdList = nowClassModel.classRelationIdList;
if(relationIdList.length == 0){ if (nowRelationIdList.length == 0) {
// @ 在数据库添加这条关系 // @ 在数据库添加这条关系
const newClassRelation = await sequelize.models.ResourceClassRelation.create({ const newClassRelation =
resourceClassRelationFather: 0, await sequelize.models.ResourceClassRelation.create({
resourceClassRelationTarget: classId resourceClassRelationFather: 0,
}) resourceClassRelationTarget: classId,
});
const newClassRelationData = newClassRelation.dataValues; const newClassRelationData = newClassRelation.dataValues;
const newClassRelationDataId = newClassRelationData.resourceClassRelationId const newClassRelationDataId =
classRelationIdList.push(newClassRelationData) newClassRelationData.resourceClassRelationId;
classRelationObject[newClassRelationDataId] = newClassRelationData classRelationIdList.push(newClassRelationData);
classRelationObjectForTargetClass[classId] = newClassRelationData classRelationObject[newClassRelationDataId] = newClassRelationData;
relationIdList.push(newClassRelationDataId) classRelationObjectForTargetClass[classId] = [newClassRelationData];
classNodeObject[newClassRelationDataId] = new makeClassNode( classNodeObject[newClassRelationDataId] = new ClassNodeModel(
classModel, nowClassModel,
newClassRelationDataId, newClassRelationDataId,
); );
} }
for(let i = 0; i< relationIdList.length; i++){ for (let i = 0; i < nowRelationIdList.length; i++) {
const classRelationId = relationIdList[i]; const classRelationId = nowRelationIdList[i];
classNodeObject[classRelationId] = new makeClassNode( classNodeObject[classRelationId] = new ClassNodeModel(
classModel, nowClassModel,
classRelationId, classRelationId,
); );
} }
} };
// @ 构建类关系 // @ 构建类关系
for(let i = 0; i < classRelationIdList.length; i++){ for (let i = 0; i < classRelationIdList.length; i++) {
const nodeId = classRelationIdList[i].resourceClassRelationId; const nodeId = classRelationIdList[i].resourceClassRelationId;
const classNode = classNodeObject[nodeId] const classNode = classNodeObject[nodeId];
const fatherId = classNodeObject[nodeId].father const fatherId = classNodeObject[nodeId].fatherId;
classNodeObject[fatherId].children.push(classNode) classNodeObject[fatherId].children.push(classNode);
}
// console.log(classNodeObject)
// @ 根据关联元/模型分类资源类节点
// @ classNodeObjectForAtomModel - String - 描述:关联元/模型下的根节点
const classNodeObjectForAtomModel = {};
// 根据元分类/模型创建根节点的空数组
for (let i = 0; i < RAP.normalData.length; i++) {
classNodeObjectForAtomModel[RAP.normalData[i].atomModelId] = [];
}
// 将根节点放入 分类/模型创建根节点的空数组 中
for (let i = 0; i < classNodeObject[0].children.length; i++) {
const nodeModel = classNodeObject[0].children[i];
const atomModelId = nodeModel.atomModel;
if (classNodeObjectForAtomModel[atomModelId] === undefined) {
logger.warn('存在未找到元分类/模型的资源类:' + nodeModel.classId);
} else {
classNodeObjectForAtomModel[atomModelId].push(nodeModel);
}
} }
console.log(classNodeObject) // console.time('GET TREE')
// global.test = classNodeObjectForAtomModel[1][0].nodeZeroInfo
// console.timeEnd('GET TREE')
// console.time('GET TREE JSON')
// global.test2 = JSON.stringify(global.test, null, 3)
// console.timeEnd('GET TREE JSON')
// console.time('GET TREE JSON CONSOLE')
// console.log(global.test)
// console.timeEnd('GET TREE JSON CONSOLE')
console.timeEnd('==生成类关系节点数据模型==');
// endregion
// ! 获取资源实体 =============================================================================== // ! 获取资源实体 ===============================================================================
console.time('获取资源实体');
// region 获取资源实体 // region 获取资源实体
// @ entityListForClassId - Object[Array[Object[entity]]] - 描述:实体列表根据资源类ID区分的对象 // @ entityListForClassId - Object[Array[Object[entity]]] - 描述:实体列表根据资源类ID区分的对象
const entityListForClassId = {}; const entityListForClassId = {};
@ -644,6 +721,7 @@ async function makeResourceCache(sequelize) {
const classModel = classModelObject[i]; const classModel = classModelObject[i];
const classId = classModel.classId; const classId = classModel.classId;
const classIdentify = classModel.classIdentify; const classIdentify = classModel.classIdentify;
console.time(' 获取资源实体表信息' + classModel.classIdentify);
const entityList = await classModel.sequelizeModel.findAll({ const entityList = await classModel.sequelizeModel.findAll({
...sequelizeFindAllType, ...sequelizeFindAllType,
where: { where: {
@ -652,9 +730,37 @@ async function makeResourceCache(sequelize) {
}, },
}, },
}); });
console.timeEnd(' 获取资源实体表信息' + classModel.classIdentify);
entityListForClassId[classId] = entityList; entityListForClassId[classId] = entityList;
entityListForClassIdentify[classIdentify] = entityList; entityListForClassIdentify[classIdentify] = entityList;
} }
// endregion // endregion
console.timeEnd('获取资源实体');
// ! 获取资源实体关系 // ! 获取资源实体关系
return {
createtime: new Date().getTime(),
updatetime: new Date().getTime(),
// 资源类
classList,
classIdList,
classObject,
// 资源类拓展字段
classExpandList,
classExpandIdList,
classExpandObject,
classExpandForClassBaseObject,
// 资源实体结构
entityStructList,
entityStructIdList,
entityStructObject,
entityStructForClassBaseObject,
// 资源类模型
ClassModel,
classModelObject,
// 资源类节点模型
classNodeObject,
ClassNodeModel,
classNodeObjectForAtomModel,
}
} }

@ -78,6 +78,11 @@ export function mountResourceEntityStruct(sequelize, DataTypes) {
comment: '资源实体字段是否采集(0是采集、1是不采集)', comment: '资源实体字段是否采集(0是采集、1是不采集)',
defaultValue: 0, defaultValue: 0,
}, },
resourceEntityStructIsRequired: {
type: DataTypes.BOOLEAN,
allowNull: true,
comment: "是否必填"
},
resourceEntityStructAppIsShow:{ resourceEntityStructAppIsShow:{
type: DataTypes.BOOLEAN, type: DataTypes.BOOLEAN,
allowNull: false, allowNull: false,

Loading…
Cancel
Save