118 lines
3.2 KiB
C++
118 lines
3.2 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.erase(records.begin());
|
||
|
}
|
||
|
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();
|
||
|
|
||
|
}
|
||
|
}
|