107 lines
2.7 KiB
C++
107 lines
2.7 KiB
C++
|
|
|
||
|
|
#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<Train> pTrain :列车信息
|
||
|
|
* outParam:
|
||
|
|
* return : true/false
|
||
|
|
*/
|
||
|
|
bool SaveResultEngine::saveTrainCsv(std::shared_ptr<TrainInfo> 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<void> pVoidData0 = nullptr;
|
||
|
|
iRet = inputQueMap_[strPort0_]->pop(pVoidData0);
|
||
|
|
if (nullptr == pVoidData0)
|
||
|
|
{
|
||
|
|
usleep(1000);
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
std::shared_ptr<TrainInfo> pTrain = std::static_pointer_cast<TrainInfo>(pVoidData0);
|
||
|
|
if (!saveTrainCsv(pTrain))
|
||
|
|
{
|
||
|
|
// 无事
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return APP_ERR_OK;
|
||
|
|
}
|