DPS/DataPlatform/ProjectEventModule.cpp

367 lines
9.4 KiB
C++
Raw Normal View History

2025-06-23 10:41:33 +08:00
#pragma execution_character_set("utf-8")
#include <QDateTime>
#include <fstream>
#include <QFileDialog>
#include <QCoreApplication>
#include <QApplication>
#include "ProjectEventModule.h"
#include "Session.h"
#include "mainwindow.h"
#include "ProjectData.h"
#include "DataAccessModule.h"
#include "DataManager.h"
#include "M_ProjectDAO.h"
#include "FileGenerate.h"
#include "QWaiting.h"
ProjectEventModule::ProjectEventModule(QObject* /*parent*/, DataManager* manager) :BaseEventModule(manager, "ProjectManager")
{
addShareEventModule(new DataAccessModule(manager));
}
ProjectEventModule::~ProjectEventModule()
{
}
void ProjectEventModule::contextMenu(const json& /*request*/, QMenu* menu)
{
QAction* exportAction = new QAction(this);
exportAction->setText(QStringLiteral("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
menu->addAction(exportAction); //<2F>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>˵<EFBFBD>
QAction* instanceAction = new QAction(this);
instanceAction->setText(QStringLiteral("<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
menu->addAction(instanceAction); //<2F>Ѷ<EFBFBD><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5>˵<EFBFBD>
}
bool ProjectEventModule::onMessage(const std::string& eventName, json& parameter)
{
LOG(INFO) << CommonHelper::utf8ToStdString("ProjectEventModule receive message.......");
LOG(INFO) << eventName;
LOG(INFO) << CommonHelper::jsonToString(parameter);
TRY{
if (!pDataManager->_dbConnected)
{
parameter["error"] = "<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>";
LOG(INFO) << CommonHelper::utf8ToStdString("ProjectEventModule::onMessage...DB connect failed");
return true;
}
if (eventName == "add-project")
{
//<2F>½<EFBFBD><C2BD><EFBFBD>Ŀ
//<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>Ϣ
return addProject(parameter);
}
else if (eventName == "save-project")
{
//<2F>޸<EFBFBD><DEB8><EFBFBD>Ŀ
return updateProject(parameter);
}
else if (eventName == "delete-project")
{
//ɾ<><C9BE><EFBFBD><EFBFBD>Ŀ
return deleteProject(parameter);
}
else if (eventName == "change-project-focus")
{
//<2F>޸Ĺ<DEB8>ע״̬
return changeFocusStatus(parameter);
}
else if (eventName == "preimport-project")
{
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>б<EFBFBD>
return getImportProjectList(parameter);
}
else if (eventName == "import-project")
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
return importProject(parameter);
}
else if (eventName == "export-project")
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
return exportProject(parameter);
}
else if (eventName == "export-document")
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
return generateFile(parameter);
}
}
CATCH(parameter);
return EventModule::onMessage(eventName, parameter);
}
bool ProjectEventModule::addProject(json& parameter)
{
//<2F>½<EFBFBD>name,type,author
auto data = parameter["data"];
QString name = CommonHelper::utf8ToQString(data["name"]);
//<2F><><EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
if (ProjectData::hasRepetitiveName(name, pDataManager))
{
parameter["error"] = "<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>";
}
else
{
ProjectData* newProject = new ProjectData();
newProject->setNewData(parameter);
newProject->_parent = pDataManager;
//<2F><><EFBFBD>½<EFBFBD><C2BD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>,<2C><><EFBFBD><EFBFBD>pDataManager<65>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>
if (pDataManager->addChild(newProject))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ظ<EFBFBD>web<65><62>
data["id"] = newProject->_id;
data["createTime"] = CommonHelper::qstringToUtf8(newProject->getCreateTime());
data["updateTime"] = CommonHelper::qstringToUtf8(newProject->getUpdateTime());
parameter["response"] = data;
}
else {
delete newProject;
newProject = nullptr;
//parameter<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
parameter["error"] = "<EFBFBD>½<EFBFBD><EFBFBD><EFBFBD>Ŀʧ<EFBFBD><EFBFBD>";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("addProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
//<2F><EFBFBD><E0BCAD>Ŀ
bool ProjectEventModule::updateProject(json& parameter)
{
//<2F><><EFBFBD><EFBFBD> id, name, type,author
//<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>name,type,author
auto data = parameter["data"];
auto projectId = data["id"];
QString name = CommonHelper::utf8ToQString(data["name"]);
//<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0>Ŀ
DPData* pData = pDataManager->findObjectById(DataManager::DataType::project, projectId);
ProjectData* pProject = qobject_cast<ProjectData*>(pData);
if (pProject) {
pProject->setEditData(parameter);
if (pProject->saveSelf())
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳɹ<DDB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>web<65>˵ĸ<CBB5><C4B8><EFBFBD>ʱ<EFBFBD><CAB1>
data["updateTime"] = CommonHelper::qstringToUtf8(pProject->getUpdateTime());
parameter["response"] = data;
}
else
{
//<2F>༭ʧ<E0BCAD><CAA7>
parameter["error"] = "<EFBFBD><EFBFBD><EFBFBD>Ŀʧ<EFBFBD><EFBFBD>";
}
}
else {
parameter["error"] = "<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>Ŀʧ<EFBFBD><EFBFBD>";
}
LOG(INFO) << CommonHelper::utf8ToStdString("updateProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool ProjectEventModule::deleteProject(json& parameter)
{
//<2F><>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
auto data = parameter["data"];
auto projectId = data["id"];
DPData* pData = pDataManager->findObjectById(DataManager::DataType::project, projectId);
if (pData)
{
if (pData->deleteSelf())
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map
pDataManager->deleteInDataMap(DataManager::DataType::project, projectId);
delete pData;
pData = nullptr;
//ɾ<><C9BE><EFBFBD>ɹ<EFBFBD>
parameter["response"]["deleted"] = true;
}
else
{
parameter["response"]["deleted"] = false;
}
}
else
{
parameter["error"] = "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ";
}
LOG(INFO) << CommonHelper::utf8ToStdString("deleteProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool ProjectEventModule::changeFocusStatus(json& parameter)
{
//<2F><>ȡ<EFBFBD><C8A1>Ŀid<69>͹<EFBFBD>ע״̬
auto data = parameter["data"];
auto projectId = data["id"];
//<2F><><EFBFBD>ҵ<EFBFBD>ǰ<EFBFBD><C7B0>Ŀ
DPData* pData = pDataManager->findObjectById(DataManager::DataType::project, projectId);
ProjectData* pProject = qobject_cast<ProjectData*>(pData);
if (pProject) {
pProject->setFocus(data["focus"]);
if (pProject->saveSelf())
{
data["focused"] = pProject->getFocus();
parameter["response"] = data;
}
else {
//ʧ<><CAA7>
parameter["error"] = "<EFBFBD>޸Ĺ<EFBFBD>ע״̬ʧ<EFBFBD><EFBFBD>";
}
}
else {
parameter["error"] = "<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>Ŀʧ<EFBFBD><EFBFBD>";
}
LOG(INFO) << CommonHelper::utf8ToStdString("changeFocusStatus Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool ProjectEventModule::getImportProjectList(json& parameter)
{
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>б<EFBFBD>
QString selectDir = QFileDialog::getOpenFileName(nullptr, "ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>", "", "*.dbp");
SysManager& sysMgr = GetSysManager();
sysMgr._importFilePath = selectDir;
QList<ProjectData*> projectList;
parameter["response"] = json::array();
if (selectDir.isEmpty())
{
//δѡ<CEB4><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
LOG(INFO) << CommonHelper::utf8ToStdString("δѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
}
else
{
if (ProjectData::getImportProjectList(projectList, selectDir))
{
for (int i = 0; i < projectList.size(); i++)
{
json j;
projectList.at(i)->toJson(j);
parameter["response"].push_back(j);
}
//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
qDeleteAll(projectList);
projectList.clear();
}
else
{
parameter["error"] = "<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>б<EFBFBD>ʧ<EFBFBD><EFBFBD>";
}
}
LOG(INFO) << CommonHelper::utf8ToStdString("getImportProjectList Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool ProjectEventModule::importProject(json& parameter)
{
QWaiting waiting(Session::getSession()->parent(), "<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
waiting.working(std::bind([&](json& parameter) {
parameter["response"] = json::array();
QList<int> projectIdList;
if (ProjectData::importData(parameter, projectIdList))
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ȡ
pDataManager->getAllChildren();
ProjectData* pData = nullptr;
for (int i = 0; i < projectIdList.size(); i++)
{
pData = dynamic_cast<ProjectData*>(pDataManager->findObjectById(DataManager::DataType::project, projectIdList.at(i)));
if (pData)
{
json j;
pData->toJson(j);
parameter["response"].push_back(j);
}
}
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("ProjectData::importData failed ");
}
return true; }, std::ref(parameter)));
LOG(INFO) << CommonHelper::utf8ToStdString("importProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
bool ProjectEventModule::exportProject(json& parameter)
{
QString filePath = QFileDialog::getSaveFileName(nullptr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>", "", tr("*.dbp"));
if (filePath.isEmpty())
{
LOG(INFO) << CommonHelper::utf8ToStdString("δѡ<EFBFBD>񵼳<EFBFBD>·<EFBFBD><EFBFBD>");
}
else
{
//<2F><><EFBFBD>ö<EFBFBD><C3B6>̴߳<DFB3><CCB4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QWaiting waiting(Session::getSession()->parent(), "<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
waiting.working(std::bind([](json& parameter, QString filePath) {
if (ProjectData::exportData(parameter, filePath))
{
parameter["response"] = { {"status",true} };
}
else
{
LOG(INFO) << CommonHelper::utf8ToStdString("exportProject failed");
parameter["response"] = { {"status",false} };
}
return true; }, std::ref(parameter), filePath));
}
LOG(INFO) << CommonHelper::utf8ToStdString("exportProject Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
bool ProjectEventModule::generateFile(json& parameter)
{
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ļ<EFBFBD>ȫ·<C8AB><C2B7>
// QString file = QFileDialog::getSaveFileName(nullptr, tr("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"), "", ".doc");
QString path = QFileDialog::getExistingDirectory(nullptr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>", "");
if (path.isEmpty())
{
LOG(INFO) << CommonHelper::utf8ToStdString("δѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>");
parameter["response"] = { {"status",false} };
}
else
{
QWaiting waiting(Session::getSession()->parent(), "<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
waiting.working(std::bind([&parameter, path]() {
FileGenerate generator;
if (generator.generate(path + "/", parameter))
{
parameter["response"] = { {"status",true} };
}
else {
parameter["response"] = { {"status",false} };
};
return true;
}));
}
LOG(INFO) << CommonHelper::utf8ToStdString("generateFile Sendto web.......");
LOG(INFO) << CommonHelper::jsonToString(parameter);
return true;
}