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