DPS/DataPlatform/TransformExcel.h

115 lines
3.2 KiB
C++

#pragma once
#include "BaseTransform.h"
#include <QString>
#include <QList>
#include <QStack>
#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<QStringList>& result);
bool addDataClassToTree(QList<QStringList>& result);
bool addDataAttributetoTree(QList<QStringList>& 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<int, DPData*>& sameNamePack);
bool proccessAttribute(DataClass* pNew, DataClass* pOld);
//处理stack
bool processImportStack(/*QStack<DPData*>& stack,*/ DPData* pDest);
//处理导入关系属性
void checkImportRelateAttribute(DataAttribute* pData, const QString name);
//写数据属性表
void writeDataAttribute(QMap<int, DataAttribute*>& mapdata);
void writeDataClass(QMap<int, DataClass*>& mapdata); //数据类表
void writeDataPack(QMap<int, DataPack*>& 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<QString, DataPack*> mapDataPack;
QMap<QString, DataClass*> mapDataClass;
//标记原树上结点是否处理过 key为名称标识, value = 0 初始,=1 已处理
QMap<QString, int> dataMark;
QStack<DPData*> importStack; //需要导入到数据库的数据
//顺序存从顶层到底层
QList<DPData*> levelNodeOrder;
int index = 1;//只用来挂数据对象时设id
DataManager* _pDataManager_ref;
int _dataModelId = 0;
//表头
QStringList attributeHead;
QStringList dataClassHead;
QStringList packHead;
//导出的数据列表
QMap<int, DataPack*> packMapEx;
QMap<int, DataClass*> classMapEx;
QMap<int ,DataAttribute*> attributeMapEx;
//带关系的属性需要最后再处理
QList<DataAttribute*> relAttList;
//成功导入的数据统计
int _importClassCount = 0;
int _importPackCount = 0;
int _importAttributeCount = 0;
//
QString _srcFile;
QString _bakFile;
QString _midFile;
};