tx-gxx-linux/device/gxx-linux/motorboard/MotorSessionInfo.cpp

117 lines
3.1 KiB
C++

#include "MotorSessionInfo.h"
#include <sys/stat.h>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iomanip>
#define MBTASKPATH "/usr/local/huago/mbtaskinfos.json"
MotorSessionInfo::MotorSessionInfo(/* args */) : m_maxrecord(10)
{
}
MotorSessionInfo::~MotorSessionInfo()
{
}
//获取近十次的扫描情况汇总
std::vector<MotorSessionInfo::MBTaskRecordInfo> MotorSessionInfo::GetRecordInfo()
{
std::vector<MotorSessionInfo::MBTaskRecordInfo> infos;
json j = getjsonobj();
printf("\n -------------json = %s",j.dump().c_str());
for (json::iterator it = j.begin(); it != j.end(); ++it)
{
auto tmv = it.value();
MBTaskRecordInfo param;
js2struct(param, tmv);
infos.push_back(param);
}
//printf("\n -------------GetRecordInfo size");
return infos;
}
//仅记录最近十次的扫描情况,大于十次按照时间戳去除早前的记录
void MotorSessionInfo::UpdateRecordInfo(MotorSessionInfo::MBTaskRecordInfo info)
{
auto records = GetRecordInfo();
//std::sort(records.begin(), records.end());
printf("\n -------------GetRecordInfo size = %d",records.size());
if (records.size() > 10)
{
records.pop_back();
}
records.push_back(info);
savejsonobj(records);
}
void MotorSessionInfo::RemoveInfos()
{
std::lock_guard<std::mutex> mutex(m_mutex);
system("rm -f /usr/local/huago/mbtaskinfos.json");
}
void MotorSessionInfo::js2struct(MotorSessionInfo::MBTaskRecordInfo &info, const json &j)
{
j["CurrentScaned"].get_to(info.CurrentScaned);
j["DoubleFeed"].get_to(info.DoubleFeed);
j["FeedError"].get_to(info.FeedError);
j["Jammed"].get_to(info.Jammed);
j["NormalDone"].get_to(info.NormalDone);
j["TimeStampStart"].get_to(info.TimeStampStart);
j["TimeStampEnd"].get_to(info.TimeStampEnd);
}
void MotorSessionInfo::struct2js(const MotorSessionInfo::MBTaskRecordInfo info, json &j)
{
j["CurrentScaned"] = (info.CurrentScaned);
j["DoubleFeed"] = (info.DoubleFeed);
j["FeedError"] = (info.FeedError);
j["Jammed"] = (info.Jammed);
j["NormalDone"] = (info.NormalDone);
j["TimeStampStart"] = (info.TimeStampStart);
j["TimeStampEnd"] = (info.TimeStampEnd);
}
json MotorSessionInfo::getjsonobj()
{
std::lock_guard<std::mutex> mutex(m_mutex);
struct stat buff;
json j;
if (stat(MBTASKPATH, &buff) == 0) //存在
{
std::ifstream i(MBTASKPATH);
// std::string buf;
// buf.resize(buff.st_size);
// i.read(&buf[0],buff.st_size);
// j = json::parse(buf);
i >> j;
i.close();
//printf("\n ----json = %s ",j.dump().c_str());
}
return j;
}
void MotorSessionInfo::savejsonobj(std::vector<MBTaskRecordInfo> infos)
{
std::lock_guard<std::mutex> mutex(m_mutex);
json j= json::array();
printf("\n -------------infos size = %d",infos.size());
for (size_t i = 0; i < infos.size(); i++)
{
json jitem;
struct2js(infos[i],jitem);
j.push_back(jitem);
}
if(!j.empty())
{
std::ofstream ofs(MBTASKPATH);
ofs << std::setw(4) << j << std::endl;
ofs.close();
}
}