DPS/DataPlatform/TransformExcel.h

115 lines
3.4 KiB
C
Raw Normal View History

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;
};