#include "MotorSessionInfo.h" #include #include #include #include #include #define MBTASKPATH "/usr/local/huago/mbtaskinfos.json" MotorSessionInfo::MotorSessionInfo(/* args */) : m_maxrecord(10) { } MotorSessionInfo::~MotorSessionInfo() { } //获取近十次的扫描情况汇总 std::vector MotorSessionInfo::GetRecordInfo() { std::vector 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 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 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 infos) { std::lock_guard 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(); } }