diff --git a/development.env.js b/development.env.js index dca18da..545f0e2 100644 --- a/development.env.js +++ b/development.env.js @@ -14,7 +14,7 @@ import prodConfig from "#root/production.env.js"; const config = { - port: 3000, + port: 5000, } const devConfig = {...prodConfig, ...config} diff --git a/package.json b/package.json index 8c45987..403133d 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "format": "prettier --write \"src/**/*.js\"", "start": "cross-env NODE_ENV=production node 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" }, "keywords": [], diff --git a/production.env.js b/production.env.js index 501fa95..f898a60 100644 --- a/production.env.js +++ b/production.env.js @@ -14,7 +14,7 @@ const prodConfig = { appName: 'graphResource2', - port: 3000, + port: 5000, zip: true, upfile:{ maxFileSize: 200 * 1024 * 1024, diff --git a/src/cache/index.js b/src/cache/index.js index 1738e0b..e02c117 100644 --- a/src/cache/index.js +++ b/src/cache/index.js @@ -236,9 +236,16 @@ async function makeResourceCache(sequelize) { // @ RBP - Object - 描述:字典缓存池 const RBP = resourceCache.baseDictPool; // ! 获取资源类信息 ============================================================================= + console.time('获取资源类信息'); // region 获取资源类信息 - const classList = - await sequelize.models.ResourceClassBase.findAll(sequelizeFindAllType); + const classList = await sequelize.models.ResourceClassBase.findAll({ + ...sequelizeFindAllType, + where: { + isDelete: { + [Op.is]: null, + }, + }, + }); // @ classIdList - Array[number] - 描述:资源类ID列表 const classIdList = []; // @ classObject - Object[resourceClassBase] - 描述:资源类对象 @@ -268,7 +275,9 @@ async function makeResourceCache(sequelize) { // console.log(classIdList) // console.log(classObject) // endregion + console.timeEnd('获取资源类信息'); // ! 获取拓展字段信息 =========================================================================== + console.time('获取拓展字段信息'); // region 获取拓展字段信息 const classExpandList = await sequelize.models.ResourceClassExpandField.findAll( @@ -278,8 +287,8 @@ async function makeResourceCache(sequelize) { const classExpandIdList = []; // @ classExpandObject - Object[resourceClassExpandField] - 描述:资源类拓展字段对象 const classExpandObject = {}; - // @ classExpandForClassIdObject - Object - 描述:基于资源类ID的资源拓展字段对象集合 - const classExpandForClassIdObject = {}; + // @ classExpandForClassBaseObject - Object - 描述:基于资源类ID的资源拓展字段对象集合 + const classExpandForClassBaseObject = {}; for (let i = 0; i < classExpandList.length; i++) { const expandField = classExpandList[i]; if (expandField.isDelete) { @@ -306,19 +315,21 @@ async function makeResourceCache(sequelize) { classExpandObject[expandFieldId] = expandField; // 拓展字段中的资源类ID const classId = expandField.resourceClassBase; - if (classExpandForClassIdObject[classId] === undefined) { - classExpandForClassIdObject[classId] = { + if (classExpandForClassBaseObject[classId] === undefined) { + classExpandForClassBaseObject[classId] = { [expandField.resourceClassExpandFieldIdentify]: expandField, }; } else { - classExpandForClassIdObject[classId][ + classExpandForClassBaseObject[classId][ expandField.resourceClassExpandFieldIdentify ] = expandField; } } - // console.log(classExpandForClassIdObject) + // console.log(classExpandForClassBaseObject) // endregion + console.timeEnd('获取拓展字段信息'); // ! 获取实体结构表 ============================================================================= + console.time('获取实体结构表'); // region 获取实体结构表 const entityStructList = await sequelize.models.ResourceEntityStruct.findAll( @@ -356,7 +367,9 @@ async function makeResourceCache(sequelize) { } } // endregion + console.timeEnd('获取实体结构表'); // ! 获取资源类关系表 =========================================================================== + console.time('获取资源类关系表'); // region 获取资源类关系表 const classRelationList = await sequelize.models.ResourceClassRelation.findAll( @@ -381,67 +394,54 @@ async function makeResourceCache(sequelize) { } } // endregion + console.timeEnd('获取资源类关系表'); // | 这里生成基础数据模型 ============================================================================================= + console.time('==生成资源类基础数据模型=='); // region 这里生成基础数据模型 - class makeClass { - // 基础数据 - classId; - classIdentify; - atomModel; - className; - classBase; - classExpand; - entityStruct; - sequelizeModel; + // ! 资源类 + class ClassModel { constructor(classItem) { // 设置基础信息值 - const classId = classItem.resourceClassBaseId; - 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(); + this.resourceClass = classItem; } get classId() { - return this.classId; + return this.resourceClass.resourceClassBaseId; } get classIdentify() { - return this.classIdentify; + return this.resourceClass.resourceClassBaseIdentify; } get atomModel() { - return this.atomModel; + return this.resourceClass.atomModel; } get className() { - return this.className; - } - get classBase() { - return this.classBase; + return this.resourceClass.resourceClassBaseName; } get classExpand() { - return this.classExpand; + let classExpand = classExpandForClassBaseObject[this.classId]; + if (classExpand === undefined) { + classExpand = {}; + } + return classExpand; } 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 {} // 定义资源实体名称字段 const entityName = { @@ -449,12 +449,13 @@ async function makeResourceCache(sequelize) { allowNull: false, comment: '资源实体名称', }; + const entityStruct = this.entityStruct; // 定义资源实体名称字段在数据库的备注 - if (this.entityStruct.entityName !== undefined) { + if (entityStruct.entityName !== undefined) { entityName.comment = - this.entityStruct.entityName.resourceEntityStructName + + entityStruct.entityName.resourceEntityStructName + '-' + - this.entityStruct.entityName.resourceEntityStructDescribe; + entityStruct.entityName.resourceEntityStructDescribe; } // 定义字段 const defineField = { @@ -543,18 +544,21 @@ async function makeResourceCache(sequelize) { } resourceEntity.init(defineField, defineTable); // 同步数据库 - resourceEntity.sync(); // {alter: true}是修改,现在是如果存在就不更改表,后面修改表明,字段名,字段长度会在更新操作时添加 + await resourceEntity.sync(); // {alter: true}是修改,现在是如果存在就不更改表,后面修改表明,字段名,字段长度会在更新操作时添加 this.sequelizeModel = resourceEntity; } - - #createCLassRelationIdentify() { - this.relationIdList = []; - if (this.classRelationList.length != 0) { - for (let classRelationItem of this.classRelationList) { - this.relationIdList.push( - classRelationItem.resourceClassRelationId, - ); - } + get zeroInfo(){ + return { + resourceClassBaseId: this.resourceClass.resourceClassBaseId, + resourceClassBaseName: this.resourceClass.resourceClassBaseName, + } + } + get info(){ + return{ + ...this.resourceClass, + resourceClassExpandField: this.classExpand, + resourceEntityStruct: this.entityStruct, + resourceClassRelation: this.classRelationList } } } @@ -565,9 +569,11 @@ async function makeResourceCache(sequelize) { // 排除删除的 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({ // entityId: 'omencust' + crypto.randomUUID(), // originNode: '0-0-1', @@ -577,64 +583,135 @@ async function makeResourceCache(sequelize) { // project: '1' // })).dataValues) // endregion + console.timeEnd('==生成资源类基础数据模型=='); // | 这里生成关系节点数据模型 ========================================================================================== + console.time('==生成类关系节点数据模型=='); + // region 这里生成关系节点数据模型 // 给每个类生成关联列表 + // @ classNodeObject - Object - 描述:类关系节点数据模型集合 const classNodeObject = { 0: { - classModel:{}, - nodeId:0, - children:[], - father: null - } + classModel: {}, + nodeId: 0, + children: [], + father: null, + }, }; - class makeClassNode { + // ! 资源类节点 + class ClassNodeModel { constructor(classModel, classRelationId) { - this.classModel = classModel; - this.children = [] - this.nodeId =classRelationId; - this.father = classRelationObject[classRelationId].resourceClassRelationFather + this.nodeId = classRelationId; + this.fatherId = + classRelationObject[ + 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)) { - const classModel = classModelObject[classId]; - const relationIdList = classModel.relationIdList - if(relationIdList.length == 0){ + const nowClassModel = classModelObject[classId]; + const nowRelationIdList = nowClassModel.classRelationIdList; + if (nowRelationIdList.length == 0) { // @ 在数据库添加这条关系 - const newClassRelation = await sequelize.models.ResourceClassRelation.create({ - resourceClassRelationFather: 0, - resourceClassRelationTarget: classId - }) + const newClassRelation = + await sequelize.models.ResourceClassRelation.create({ + resourceClassRelationFather: 0, + resourceClassRelationTarget: classId, + }); const newClassRelationData = newClassRelation.dataValues; - const newClassRelationDataId = newClassRelationData.resourceClassRelationId - classRelationIdList.push(newClassRelationData) - classRelationObject[newClassRelationDataId] = newClassRelationData - classRelationObjectForTargetClass[classId] = newClassRelationData - relationIdList.push(newClassRelationDataId) - classNodeObject[newClassRelationDataId] = new makeClassNode( - classModel, + const newClassRelationDataId = + newClassRelationData.resourceClassRelationId; + classRelationIdList.push(newClassRelationData); + classRelationObject[newClassRelationDataId] = newClassRelationData; + classRelationObjectForTargetClass[classId] = [newClassRelationData]; + classNodeObject[newClassRelationDataId] = new ClassNodeModel( + nowClassModel, newClassRelationDataId, ); } - for(let i = 0; i< relationIdList.length; i++){ - const classRelationId = relationIdList[i]; - classNodeObject[classRelationId] = new makeClassNode( - classModel, + for (let i = 0; i < nowRelationIdList.length; i++) { + const classRelationId = nowRelationIdList[i]; + classNodeObject[classRelationId] = new ClassNodeModel( + nowClassModel, classRelationId, ); } - } + }; // @ 构建类关系 - for(let i = 0; i < classRelationIdList.length; i++){ + for (let i = 0; i < classRelationIdList.length; i++) { const nodeId = classRelationIdList[i].resourceClassRelationId; - const classNode = classNodeObject[nodeId] - const fatherId = classNodeObject[nodeId].father - classNodeObject[fatherId].children.push(classNode) + const classNode = classNodeObject[nodeId]; + const fatherId = classNodeObject[nodeId].fatherId; + 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 获取资源实体 // @ entityListForClassId - Object[Array[Object[entity]]] - 描述:实体列表根据资源类ID区分的对象 const entityListForClassId = {}; @@ -644,6 +721,7 @@ async function makeResourceCache(sequelize) { const classModel = classModelObject[i]; const classId = classModel.classId; const classIdentify = classModel.classIdentify; + console.time(' 获取资源实体表信息' + classModel.classIdentify); const entityList = await classModel.sequelizeModel.findAll({ ...sequelizeFindAllType, where: { @@ -652,9 +730,37 @@ async function makeResourceCache(sequelize) { }, }, }); + console.timeEnd(' 获取资源实体表信息' + classModel.classIdentify); entityListForClassId[classId] = entityList; entityListForClassIdentify[classIdentify] = entityList; } // 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, + } } diff --git a/src/common/database/dataModels/resourceEntityStruct.dataModel.js b/src/common/database/dataModels/resourceEntityStruct.dataModel.js index 0d95060..33de542 100644 --- a/src/common/database/dataModels/resourceEntityStruct.dataModel.js +++ b/src/common/database/dataModels/resourceEntityStruct.dataModel.js @@ -78,6 +78,11 @@ export function mountResourceEntityStruct(sequelize, DataTypes) { comment: '资源实体字段是否采集(0是采集、1是不采集)', defaultValue: 0, }, + resourceEntityStructIsRequired: { + type: DataTypes.BOOLEAN, + allowNull: true, + comment: "是否必填" + }, resourceEntityStructAppIsShow:{ type: DataTypes.BOOLEAN, allowNull: false,