367 lines
9.4 KiB
C++
367 lines
9.4 KiB
C++
|
#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([¶meter, 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;
|
|||
|
}
|