#pragma once #include "BaseTransform.h" #include #include #include #include "DataModelData.h" #include "ExcelOP.h" class DataManager; class DataClass; class DataPack; class DataAttribute; class TransformExcel:public BaseTransform { Q_OBJECT public: TransformExcel(DataManager* pManager, int datamodelId); ~TransformExcel(); bool openFile(QString path) override; void closeFile(QString path) override; bool importData(QString& errMsg) override; bool exportData(json& parameter) override; //处理数据模型数据 bool addDataPackToTree(QList& result); bool addDataClassToTree(QList& result); bool addDataAttributetoTree(QList& result); //加载导入表数据 bool loadDataPack(const QStringList& data, DataPack* pData); bool loadDataClass(const QStringList& data, DataClass* pData); bool loadDataAttribute(const QStringList& data, DataAttribute* pData); //导入数据 void importExcelData(DataPack* pNew, DataPack* pOld); void importExcelData(DataClass* pNew, DataClass* pOld); void importExcelData(DataAttribute* pNew, DataAttribute* old); void checkCoverName(DPData* pOld, QString& name);//检查覆盖的名称是否有重名并处理 /*处理数据导入*/ bool processDataImport(DPData* pData); /*加入导入list*/ void insertImportList(int type, int id); void insertImportAtt(bool delAtt); //处理数据模块 // bool processPack(QString name); //处理非同名数据类 // bool ProcessNoSameDataClass(DataClass*& pNew, QMap& sameNamePack); bool proccessAttribute(DataClass* pNew, DataClass* pOld); //处理stack bool processImportStack(/*QStack& stack,*/ DPData* pDest); //处理导入关系属性 void checkImportRelateAttribute(DataAttribute* pData, const QString name); //写数据属性表 void writeDataAttribute(QMap& mapdata); void writeDataClass(QMap& mapdata); //数据类表 void writeDataPack(QMap& mapdata); //数据模块表 //递归处理导出参数 // void accessJsonNode(json& para); //处理当前结点 bool processCurrentNode(DPData* pData); //查找并处理同名数据 int findAndProcessSameNode(DPData* pData); //查找非同名情况 bool processNoSameNode(DPData* pData); void freeNode(DPData* pData); //备份一个数据库文件 void backupDBFile(); //恢复原来的数据库文件; bool rollBackDBFile(); private: ExcelOP excel; //建树结构 DataModelData newTreeRoot; //map:名称标识-数据对象 QMap mapDataPack; QMap mapDataClass; //标记原树上结点是否处理过 key为名称标识, value = 0 初始,=1 已处理 QMap dataMark; QStack importStack; //需要导入到数据库的数据 //顺序存从顶层到底层 QList levelNodeOrder; int index = 1;//只用来挂数据对象时设id DataManager* _pDataManager_ref; int _dataModelId = 0; //表头 QStringList attributeHead; QStringList dataClassHead; QStringList packHead; //导出的数据列表 QMap packMapEx; QMap classMapEx; QMap attributeMapEx; //带关系的属性需要最后再处理 QList relAttList; //成功导入的数据统计 int _importClassCount = 0; int _importPackCount = 0; int _importAttributeCount = 0; // QString _srcFile; QString _bakFile; QString _midFile; };