211 lines
9.4 KiB
C++
211 lines
9.4 KiB
C++
#ifndef DATABASECONTROLLER_H
|
|
#define DATABASECONTROLLER_H
|
|
|
|
#include <QObject>
|
|
#include <QSqlDatabase>
|
|
#include <QSqlQuery>
|
|
#include <QSqlError>
|
|
#include <QDebug>
|
|
#include <QMap>
|
|
#include <QList>
|
|
#include "altiumparser.h"
|
|
|
|
struct ComponentData {
|
|
int id;
|
|
QString designator;
|
|
QMap<QString, QString> baseProperties;
|
|
QMap<QString, QMap<QString, QString>> variantProperties;
|
|
QMap<QString, bool> variantFitted;
|
|
};
|
|
|
|
struct VariantData {
|
|
int id;
|
|
QString name;
|
|
};
|
|
|
|
struct ProjectParamData {
|
|
int id;
|
|
QString name;
|
|
QString value;
|
|
};
|
|
|
|
struct DesignatorMappingData {
|
|
int id;
|
|
QString designator;
|
|
QString singularName;
|
|
QString pluralName;
|
|
bool isCustom;
|
|
};
|
|
|
|
struct PCBData {
|
|
int id;
|
|
int layerCount;
|
|
QList<DielProperty> dielMaterials;
|
|
};
|
|
|
|
class DataBaseController : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit DataBaseController(QObject *parent = nullptr);
|
|
~DataBaseController();
|
|
|
|
// Инициализация БД
|
|
bool initializeDatabase(const QString &dbPath = "components.db", const QString &connectionName = QString());
|
|
bool createTables();
|
|
|
|
// Работа с вариантами
|
|
int addVariant(const QString &name);
|
|
bool removeVariant(int variantId);
|
|
QList<VariantData> getAllVariants();
|
|
int getVariantId(const QString &name);
|
|
|
|
// Работа с компонентами
|
|
int addComponent(const QString &designator);
|
|
bool removeComponent(int componentId);
|
|
bool updateComponentDesignator(int componentId, const QString &designator);
|
|
QList<ComponentData> getAllComponents();
|
|
ComponentData getComponent(int componentId);
|
|
ComponentData getComponent(const QString &designator);
|
|
bool saveComponents(const QList<ComponentData> &components);
|
|
|
|
// Пакетная вставка компонентов (оптимизация)
|
|
bool beginTransaction();
|
|
bool commitTransaction();
|
|
bool rollbackTransaction();
|
|
bool addComponentBatch(const QString &designator, const QMap<QString, QString> &properties);
|
|
bool addComponentPropertiesBatch(int componentId, const QMap<QString, QString> &properties);
|
|
bool addComponentVariantsBatch(int componentId, const QStringList &variantNames);
|
|
|
|
// Работа со свойствами компонентов
|
|
bool setComponentProperty(int componentId, const QString &propertyName, const QString &propertyValue);
|
|
bool removeComponentProperty(int componentId, const QString &propertyName);
|
|
QMap<QString, QString> getComponentProperties(int componentId);
|
|
|
|
// Работа с вариантами компонентов
|
|
bool setComponentVariantFitted(int componentId, int variantId, bool fitted);
|
|
bool setVariantProperty(int componentId, int variantId, const QString &propertyName, const QString &propertyValue);
|
|
bool removeVariantProperty(int componentId, int variantId, const QString &propertyName);
|
|
|
|
// Работа с параметрами проекта
|
|
int addProjectParam(const QString &name, const QString &value);
|
|
bool updateProjectParam(int paramId, const QString &name, const QString &value);
|
|
bool removeProjectParam(int paramId);
|
|
QList<ProjectParamData> getAllProjectParams();
|
|
ProjectParamData getProjectParam(int paramId);
|
|
bool setProjectParam(const QString &name, const QString &value);
|
|
|
|
// Работа с данными PCB
|
|
int addPCBData(int layerCount);
|
|
bool updatePCBLayerCount(int pcbId, int layerCount);
|
|
bool addDielMaterial(int pcbId, const QString &name, const QString &value, double height, int dielType = 0, int layerNumber = 0);
|
|
bool updateDielMaterial(int pcbId, const QString &name, const QString &value, double height, int dielType = 0, int layerNumber = 0);
|
|
bool removeDielMaterial(int pcbId, int layerNumber);
|
|
PCBData getPCBData(int pcbId);
|
|
PCBData getPCBData(); // Получить последние данные PCB
|
|
QList<DielProperty> getDielMaterials(int pcbId);
|
|
QList<DielProperty> getDielMaterials(); // Получить все материалы
|
|
bool savePCBData(const PCBData &pcbData);
|
|
bool clearPCBData();
|
|
|
|
// Работа с настройками проекта
|
|
bool setProjectSetting(const QString &key, const QString &value);
|
|
QString getProjectSetting(const QString &key, const QString &defaultValue = QString());
|
|
bool setProjectSettingList(const QString &key, const QStringList &value);
|
|
QStringList getProjectSettingList(const QString &key, const QStringList &defaultValue = QStringList());
|
|
|
|
// Работа с маппингами дезигнаторов
|
|
int addDesignatorMapping(const QString &designator, const QString &singularName,
|
|
const QString &pluralName, bool isCustom = false);
|
|
bool updateDesignatorMapping(int mappingId, const QString &designator,
|
|
const QString &singularName, const QString &pluralName, bool isCustom);
|
|
bool removeDesignatorMapping(int mappingId);
|
|
bool removeDesignatorMapping(const QString &designator);
|
|
QList<DesignatorMappingData> getAllDesignatorMappings();
|
|
DesignatorMappingData getDesignatorMapping(int mappingId);
|
|
DesignatorMappingData getDesignatorMapping(const QString &designator);
|
|
bool saveDesignatorMappings(const QList<DesignatorMappingData> &mappings);
|
|
bool clearCustomDesignatorMappings();
|
|
bool resetDesignatorMappingsToDefaults();
|
|
|
|
// Работа с надписями титульного листа
|
|
bool saveTitleInscriptions(const QMap<int, QString> &inscriptions, const QString &projectName = QString());
|
|
bool loadTitleInscriptions(QMap<int, QString> &inscriptions, const QString &projectName = QString());
|
|
bool deleteTitleInscriptions(const QString &projectName = QString());
|
|
QStringList getAvailableTitleInscriptionProjects();
|
|
|
|
// Работа с перечнем элементов
|
|
bool savePerechenTable(const QByteArray &tableData, const QString &projectName = QString());
|
|
QByteArray loadPerechenTable(const QString &projectName = QString());
|
|
bool deletePerechenTable(const QString &projectName = QString());
|
|
QStringList getAvailablePerechenProjects();
|
|
|
|
// Метод для получения информации о структуре перечня в БД
|
|
QString getPerechenTableInfo(const QString &projectName = QString());
|
|
|
|
// Работа со спецификацией платы
|
|
bool saveSpecificationPCBTable(const QByteArray &tableData, const QString &projectName = QString());
|
|
QByteArray loadSpecificationPCBTable(const QString &projectName = QString());
|
|
bool deleteSpecificationPCBTable(const QString &projectName = QString());
|
|
QStringList getAvailableSpecificationPCBProjects();
|
|
|
|
// Метод для получения информации о структуре спецификации платы в БД
|
|
QString getSpecificationPCBTableInfo(const QString &projectName = QString());
|
|
|
|
// Работа со спецификацией материалов
|
|
bool saveSpecificationTable(const QByteArray &tableData, const QString &projectName = QString());
|
|
QByteArray loadSpecificationTable(const QString &projectName = QString());
|
|
bool deleteSpecificationTable(const QString &projectName = QString());
|
|
QStringList getAvailableSpecificationProjects();
|
|
|
|
// Метод для получения информации о структуре спецификации материалов в БД
|
|
QString getSpecificationTableInfo(const QString &projectName = QString());
|
|
|
|
// Работа с ведомостью покупных изделий
|
|
bool saveVedomostTable(const QByteArray &tableData, const QString &projectName = QString());
|
|
QByteArray loadVedomostTable(const QString &projectName = QString());
|
|
bool deleteVedomostTable(const QString &projectName = QString());
|
|
QStringList getAvailableVedomostProjects();
|
|
|
|
// Метод для получения информации о структуре ведомости покупных изделий в БД
|
|
QString getVedomostTableInfo(const QString &projectName = QString());
|
|
|
|
// Работа с бланком заказа
|
|
bool saveSimpleListTable(const QByteArray &tableData, const QString &projectName = QString());
|
|
QByteArray loadSimpleListTable(const QString &projectName = QString());
|
|
|
|
// Получение данных для отображения
|
|
QList<ComponentData> getComponentsForVariant(int variantId);
|
|
QList<ComponentData> getComponentsForVariant(const QString &variantName);
|
|
|
|
// Получение всех уникальных свойств
|
|
QStringList getAllPropertyNames();
|
|
|
|
// Очистка БД
|
|
void clearAllData();
|
|
|
|
// Проверка состояния БД
|
|
bool isDatabaseOpen() const;
|
|
QString lastError() const;
|
|
QString getDatabasePath() const;
|
|
|
|
signals:
|
|
void databaseError(const QString &error);
|
|
void dataChanged();
|
|
|
|
private:
|
|
QSqlDatabase m_database;
|
|
QString m_lastError;
|
|
static int s_connectionCounter;
|
|
|
|
// Вспомогательные методы
|
|
bool executeQuery(const QString &query, const QVariantMap ¶ms = QVariantMap());
|
|
QSqlQuery prepareQuery(const QString &query);
|
|
void setLastError(const QString &error);
|
|
|
|
// Миграции базы данных
|
|
void migrateAddCellStretchesColumn();
|
|
};
|
|
|
|
#endif // DATABASECONTROLLER_H
|