VTrain_BothSides/engine/SaveResultCSVEngine/SaveResultCSVEngine.cpp

1 line
4.6 KiB
C++

#include "SaveResultCSVEngine.h"
using namespace ai_matrix;
SaveResultCSVEngine::SaveResultCSVEngine() {}
SaveResultCSVEngine::~SaveResultCSVEngine() {}
APP_ERROR SaveResultCSVEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1";
this->baseConfig_ = Config::getins()->getBaseConfig();
LogInfo << "SaveResultCSVEngine Init ok";
return APP_ERR_OK;
}
APP_ERROR SaveResultCSVEngine::DeInit()
{
LogInfo << "SaveResultCSVEngine DeInit ok";
return APP_ERR_OK;
}
/**
* 保存车厢的最优结果到CSV中
* inParam : std::shared_ptr<Train> pTrain :列车信息
* outParam:
* return : true/false
*/
bool SaveResultCSVEngine::saveTrainCsv(std::shared_ptr<VTrainInfo> pTrain)
{
std::string strTrainPath = this->baseConfig_.strResultPath + "/"
+ pTrain->strTrainDate + "/"
+ StringUtil::getins()->replace_all_distinct(pTrain->strTrainTime, ":", "-") + "/";
//1. 创建保存路径 (固定路径/YYYY-MM-DD/hh-mm-ss/iDataSoure/)
if (!FileUtil::getins()->createDirPath(strTrainPath))
{
LogError << "iCarXH:" << pTrain->iCarOrder << " csv save err";
return false;
}
//2. 保存csv
std::string strCsvName = pTrain->strTrainDate + "_" + pTrain->strTrainName + ".csv";
// strCsvName = StringUtil::getins()->replace_all_distinct(strCsvName, std::string(":"), std::string("-"));
std::string strCsvPath = strTrainPath + strCsvName;
bool bIsExsit = false;
if (access(strCsvPath.c_str(), F_OK) != -1)
{
bIsExsit = true;
}
try
{
std::string strContainerNo, strContainerImage;
for (auto it = pTrain->vecContainer.cbegin(); it != pTrain->vecContainer.cend(); ++it)
{
strContainerNo += ("[" + it->strContainerNo + "]");
strContainerImage += ("[" + it->strImg + "]");
}
// 写文件
std::ofstream outFile;
outFile.open(strCsvPath, std::ios::app);
if (!bIsExsit)
{
outFile << "TrackName" << ','
<< "TDirection" << ','
<< "CarOrder" << ','
<< "Category" << ','
<< "TType" << ','
<< "TNum" << ','
<< "TLoadWeight" << ','
<< "TTareWeight" << ','
<< "TVolume" << ','
<< "TChangeLen" << ','
<< "TNum_image" << ','
<< "TPro_image" << ','
<< "StartFrame" << ','
<< "EndFrame" << ','
<< "StartTime" << ','
<< "EndTime" << ','
<< "ContainerNo" << ','
<< "Container_image" << ','
<< "TNumCoordinate" << ','
<< "TProCoordinate"
<< std::endl;
}
outFile << this->baseConfig_.strTrackName << ','
<< pTrain->iTDirection << ','
<< pTrain->iCarOrder << ','
<< pTrain->iCategory << ','
<< pTrain->strTType << ','
<< pTrain->strTNum << ','
<< pTrain->strTLoadWeight << ','
<< pTrain->strTTareWeight << ','
<< pTrain->strTVolume << ','
<< pTrain->strTChangeLen << ','
<< pTrain->strTNum_image << ','
<< pTrain->strTPro_image << ','
<< pTrain->iStartFrame << ','
<< pTrain->iEndFrame << ','
<< pTrain->strStartTime << ','
<< pTrain->strEndTime << ','
<< strContainerNo << ','
<< strContainerImage << ','
<< "" << ','
<< ""
<< std::endl;
outFile.close();
}
catch (const std::exception &)
{
LogError << "strCsvPath:" << strCsvPath << " train savecsv fail!";
return false;
}
return true;
}
APP_ERROR SaveResultCSVEngine::Process()
{
int iRet = APP_ERR_OK;
while (!isStop_)
{
//pop端口0 车厢信息
std::shared_ptr<void> pVoidData0 = nullptr;
iRet = inputQueMap_[strPort0_]->pop(pVoidData0);
if (nullptr == pVoidData0)
{
usleep(1000);
continue;
}
std::shared_ptr<VTrainInfo> pTrain = std::static_pointer_cast<VTrainInfo>(pVoidData0);
this->saveTrainCsv(pTrain);
outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(pTrain));
outputQueMap_[strPort1_]->push(std::static_pointer_cast<void>(pTrain));
}
return APP_ERR_OK;
}