#include "SaveResultEngine.h" using namespace ai_matrix; SaveResultEngine::SaveResultEngine() {} SaveResultEngine::~SaveResultEngine() {} APP_ERROR SaveResultEngine::Init() { strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0"; this->baseConfig_ = Config::GetIns()->getBaseConfig(); LogInfo << "SaveResultEngine Init ok"; return APP_ERR_OK; } APP_ERROR SaveResultEngine::DeInit() { LogInfo << "SaveResultEngine DeInit ok"; return APP_ERR_OK; } /** * 保存车厢的最优结果到CSV中 * inParam : std::shared_ptr pTrain :列车信息 * outParam: * return : true/false */ bool SaveResultEngine::saveTrainCsv(std::shared_ptr pTrain) { std::string strTrainPath = this->baseConfig_.strResultPath + "/" + TimeUtil::getins()->getDate() + "/"; //1. 创建保存路径 (固定路径/YYYY-MM-DD/hh-mm-ss/iDataSoure/) if (!FileUtil::getins()->CreateDirPath(strTrainPath)) { LogError << "结果目录:" << strTrainPath << " 创建失败!"; return false; } //2. 保存csv std::string strCsvName = pTrain->strTrainTime; strCsvName = StringUtil::getins()->replace_all_distinct(strCsvName, ":", "-"); strCsvName = StringUtil::getins()->replace_all_distinct(strCsvName, " ", "T"); strCsvName.append("_rfid.csv"); std::string strCsvPath = strTrainPath + strCsvName; bool bIsExsit = false; if (access(strCsvPath.c_str(), F_OK) != -1) { bIsExsit = true; } try { // 写文件 std::ofstream outFile; outFile.open(strCsvPath, std::ios::app); if (!bIsExsit) { outFile << "序号" << ',' << "车型" << ',' << "车号" << ',' << "识别时间" << ',' << std::endl; } outFile << pTrain->strOrder << ',' << pTrain->strCarriageType << ',' << pTrain->strCarriageNum << ',' << pTrain->strNowTime << ',' << std::endl; outFile.close(); } catch (const std::exception &) { LogError << "识别结果:" << strCsvPath << " 存储失败!"; return false; } return true; } APP_ERROR SaveResultEngine::Process() { int iRet = APP_ERR_OK; while (!isStop_) { //pop端口0 车厢信息 std::shared_ptr pVoidData0 = nullptr; iRet = inputQueMap_[strPort0_]->pop(pVoidData0); if (nullptr == pVoidData0) { usleep(1000); continue; } std::shared_ptr pTrain = std::static_pointer_cast(pVoidData0); if (!saveTrainCsv(pTrain)) { // 无事 } } return APP_ERR_OK; }