#pragma execution_character_set("utf-8") #include "CodeGenerateEventModule.h" #include "CodeDisplayView.h" #include "DataAccessModule.h" #include "DataClass.h" #include "DataPack.h" #include "DataManager.h" #include "FindByInterface.h" #include "DelByInterface.h" #include #include #include "global.h" CodeGenerateEventModule::CodeGenerateEventModule(QObject* , DataManager* manager) :BaseEventModule(manager, "CodeGenerate") { codeDisplayView = nullptr; addShareEventModule(new DataAccessModule(pDataManager)); } CodeGenerateEventModule::~CodeGenerateEventModule() { if (codeDisplayView) { codeDisplayView->Close(); delete codeDisplayView; } } void CodeGenerateEventModule::closeCodeDisplay() { if (codeDisplayView) { codeDisplayView->Close(); } } bool CodeGenerateEventModule::onMessage(const std::string& eventName, json& parameter) { LOG(INFO) << CommonHelper::utf8ToStdString("CodeGenerateEventModule receive message......."); LOG(INFO) << eventName; LOG(INFO) << CommonHelper::jsonToString(parameter); TRY{ if (eventName == "code-generate-opened") { // if (codeDisplayView == nullptr) // codeDisplayView = new CodeDisplayView(nullptr); // codeDisplayView->show(); } else if (eventName == "code-generate-closed") { if (codeDisplayView) { codeDisplayView->Close(); } } else if (eventName == "get-delby-interface") { getDelByInterface(parameter); return true; } else if (eventName == "add-delby-interface") { addDelBy(parameter); return true; } else if (eventName == "delete-delby-interface") { deleteDelBy(parameter); return true; } else if (eventName == "save-delby-interface") { updateDelBy(parameter); return true; } else if (eventName == "get-findby-interface") { getFindByInterface(parameter); return true; } else if (eventName == "add-findby-interface") { addFindBy(parameter); return true; } else if (eventName == "delete-findby-interface") { deleteFindBy(parameter); return true; } else if (eventName == "save-findby-interface") { updateFindBy(parameter); return true; } else if (eventName == "get-all-file") { //获取文件列表 getFileList(parameter); return true; } else if (eventName == "get-whiteboxtest-interface") { //获取白盒测试接口类型 getWhiteBoxType(parameter); return true; } else if (eventName == "set-whiteboxtest-interface") { //设置白盒测试接口类型 setWhiteBoxType(parameter); return true; } else if (eventName == "generate-code") { generateCode(parameter); return true; } else if (eventName == "code-preview") { codePreview(parameter); return true; } } CATCH(parameter); return EventModule::onMessage(eventName, parameter); } //获取查询接口信息 void CodeGenerateEventModule::getFindByInterface(json& parameter) { auto data = parameter["data"]; int classId = data["id"]; _currentDataClassId = classId; parameter["response"] = json::array(); //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, classId)); if (pClass && pClass->getFindByInterface()) { QMap::iterator it = pClass->_findByMap.begin(); while (it != pClass->_findByMap.end()) { FindByInterface* pData = (*it); json j; pData->toJson(j); parameter["response"].push_back(j); it++; } } else { parameter["error"] = "无法获取该查询接口"; } LOG(INFO) << CommonHelper::utf8ToStdString("getFindByInterface Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //获取删除接口 void CodeGenerateEventModule::getDelByInterface(json& parameter) { auto data = parameter["data"]; int classId = data["id"]; _currentDataClassId = classId; parameter["response"] = json::array(); //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, classId)); if (pClass && pClass->getDelByInterface()) { QMap::iterator it = pClass->_delByMap.begin(); while (it != pClass->_delByMap.end()) { DelByInterface* pData = (*it); json j; pData->toJson(j); parameter["response"].push_back(j); it++; } } else { parameter["error"] = "无法获取该删除接口"; } LOG(INFO) << CommonHelper::utf8ToStdString("getDelByInterface Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //增加查询接口 void CodeGenerateEventModule::addFindBy(json& parameter) { auto data = parameter["data"]; int classId = data["parentid"]; FindByInterface* pNewInterface = new FindByInterface(); pNewInterface->setNewData(parameter); //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, classId)); if (pClass && pClass->addFindByInterface(pNewInterface)) { json j; pNewInterface->toJson(j); parameter["response"] = j; } else { parameter["error"] = "新建查询接口失败"; } LOG(INFO) << CommonHelper::utf8ToStdString("addFindBy Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //删除查询接口 void CodeGenerateEventModule::deleteFindBy(json& parameter) { auto data = parameter["data"]; int id = data["id"]; //当前接口id //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, _currentDataClassId)); if (pClass && pClass->delFindByInterfaceById(id)) { parameter["response"] = { {"status",true} }; } else { parameter["response"] = { {"status",false} }; } LOG(INFO) << CommonHelper::utf8ToStdString("deleteFindBy Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //修改查询接口 void CodeGenerateEventModule::updateFindBy(json& parameter) { auto data = parameter["data"]; //查找当前数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, _currentDataClassId)); if (pClass && pClass->updateFindByInterfaceById(parameter)) { parameter["response"] = data; } else { LOG(INFO) << CommonHelper::utf8ToStdString("update FindbyInterface failed"); parameter["error"] = "修改查询接口失败"; } LOG(INFO) << CommonHelper::utf8ToStdString("updateFindBy Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //增加删除接口 void CodeGenerateEventModule::addDelBy(json& parameter) { auto data = parameter["data"]; int classId = data["parentid"]; DelByInterface* pNewInterface = new DelByInterface(); pNewInterface->setNewData(parameter); //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, classId)); if (pClass && pClass->addDelByInterface(pNewInterface)) { json j; pNewInterface->toJson(j); parameter["response"] = j; } else { parameter["error"] = "新建删除接口失败"; } LOG(INFO) << CommonHelper::utf8ToStdString("addDelBy Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //删除删除接口 void CodeGenerateEventModule::deleteDelBy(json& parameter) { auto data = parameter["data"]; int id = data["id"]; //当前接口id //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, _currentDataClassId)); if (pClass && pClass->delDelByInterfaceById(id)) { parameter["response"]["status"] = true; } else { parameter["response"]["status"] = false; } LOG(INFO) << CommonHelper::utf8ToStdString("deleteDelBy Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //修改删除接口 void CodeGenerateEventModule::updateDelBy(json& parameter) { // auto data = parameter["data"]; // int id = data["id"]; //当前修改的接口id //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, _currentDataClassId)); if (pClass && pClass->updateDelByInterfaceById(parameter)) { parameter["response"]["status"] = true; } else { parameter["response"]["status"] = false; } LOG(INFO) << CommonHelper::utf8ToStdString("updateDelBy Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //生成代码 void CodeGenerateEventModule::generateCode(json& parameter) { //看代码生成路径是否为空 SysManager& sysMgr = GetSysManager(); QString codeFileFolderPath = sysMgr._codeGeneratePath; if (codeFileFolderPath.isEmpty()) { parameter["error"] = "代码生成路径为空,请设置代码生成路径"; LOG(INFO) << CommonHelper::utf8ToStdString("DataClass::generateCode failed. codePath is empty"); return; } auto data = parameter["data"]; QStringList cfilelist; QStringList netfilelist; auto objlist = data["codeDataList"]; int codeType = data["codeType"]; for (auto para : objlist) { int id = para["id"]; int type = para["classType"]; // int interfaceType = para["interface"]; //生成代码接口类型 if (type == g_TYPE_DATACLASS) { //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, id)); if (pClass) { switch (codeType) { case 1: //C++ if (!pClass->generateCode(cfilelist)) { //生成代码失败 parameter["response"]["error"] = "生成代码失败"; LOG(INFO) << CommonHelper::utf8ToStdString("generateCode Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); return ; } break; case 2://.NET if (!pClass->generateCSharpCode(netfilelist)) { //生成代码失败 parameter["response"]["error"] = "生成代码失败"; LOG(INFO) << CommonHelper::utf8ToStdString("generateCode Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); return; } break; case 3: //两种 { if (!pClass->generateCode(cfilelist) || !pClass->generateCSharpCode(netfilelist)) { //生成代码失败 parameter["response"]["error"] = "生成代码失败"; LOG(INFO) << CommonHelper::utf8ToStdString("generateCode Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); return; } } break; } } } else if (type == g_TYPE_DATAPACK) { DataPack* pPack = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataPack, id)); if (pPack) { switch (codeType) { case 1://C++ if(!pPack->generateCode(/*pDataManager,*/ cfilelist)) { //生成代码失败 parameter["response"]["error"] = "生成代码失败"; LOG(INFO) << CommonHelper::utf8ToStdString("generateCode Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); return; } break; case 2: break; case 3: if (!pPack->generateCode(/*pDataManager,*/ cfilelist)) { //生成代码失败 parameter["response"]["error"] = "生成代码失败"; LOG(INFO) << CommonHelper::utf8ToStdString("generateCode Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); return; } break; default: break; } } } } parameter["response"]["CFileList"] = json::array(); parameter["response"]["NetFileList"] = json::array(); for (auto i : cfilelist) { string file = CommonHelper::qstringToUtf8(i); parameter["response"]["CFileList"].push_back(file); } for (auto i : netfilelist) { string file = CommonHelper::qstringToUtf8(i); parameter["response"]["NetFileList"].push_back(file); } LOG(INFO) << CommonHelper::utf8ToStdString("generateCode Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } //获取文件列表 void CodeGenerateEventModule::getFileList(json& parameter) { auto data = parameter["data"]; auto filePath = data["filePath"]; QDir dir(CommonHelper::utf8ToQString(filePath)); QStringList fileName; fileName << "*.h" << "*.cpp" << "*.test"; QStringList result; result = dir.entryList(fileName, QDir::Files | QDir::Readable, QDir::Name); for (int i = 0; i < result.size(); i++) { parameter["response"]["filename"].push_back(CommonHelper::qstringToUtf8(result.at(i))); } } void CodeGenerateEventModule::getWhiteBoxType(json& parameter) { auto data = parameter["data"]; int id = data["id"];//数据类id QString strWhiteboxTest; parameter["response"] = json::array(); //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, id)); try { if (!pClass) { LOG(INFO) << CommonHelper::utf8ToStdString("getWhiteBoxType Sendto web......."); parameter["error"] = "该数据类不存在"; return; } strWhiteboxTest = pClass->getWhiteBoxType(); if (strWhiteboxTest.isEmpty()) { LOG(INFO) << CommonHelper::utf8ToStdString("getWhiteBoxType Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); return; } QStringList list = strWhiteboxTest.split(","); for (int i = 0; i < list.size(); i++) { QString str = list.at(i); QString type = str.front(); QString status = str.at(str.size() - 1); json j; bool bSt = (status == "1") ? true : false; j["code"] = type.toInt(); j["status"] = bSt; parameter["response"].push_back(j); } } catch (exception& e) { parameter["error"] = "该数据类不存在"; LOG(ERROR) << e.what(); } LOG(INFO) << CommonHelper::utf8ToStdString("getWhiteBoxType Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } void CodeGenerateEventModule::setWhiteBoxType(json& parameter) { auto data = parameter["data"]; int id = data["id"];//数据类id //查找数据类 DataClass* pClass = qobject_cast(pDataManager->findObjectById(DataManager::DataType::dataClass, id)); try { if (!pClass) { parameter["error"] = "该数据类不存在"; LOG(INFO) << CommonHelper::utf8ToStdString("setWhiteBoxType Sendto web......."); return; } parameter["response"]["status"] = pClass->setWhiteBoxType(parameter); } catch (exception& e) { LOG(ERROR) << e.what(); } LOG(INFO) << CommonHelper::utf8ToStdString("setWhiteBoxType Sendto web......."); LOG(INFO) << CommonHelper::jsonToString(parameter); } void CodeGenerateEventModule::codePreview(json& parameter) { auto data = parameter["data"]; if (codeDisplayView == nullptr) codeDisplayView = new CodeDisplayView(nullptr); codeDisplayView->cfileList.clear(); codeDisplayView->netfileList.clear(); codeDisplayView->setMinimumSize(QSize(600, 400)); auto cfiles = data["CFileList"]; for (auto i : cfiles) { codeDisplayView->cfileList.append(CommonHelper::utf8ToQString(i)); } auto netfilelist = data["NetFileList"]; for (auto i : netfilelist) { codeDisplayView->netfileList.append(CommonHelper::utf8ToQString(i)); } codeDisplayView->show(); codeDisplayView->updateFileList(); }