#include #include #include "F_WriteData.h" #include "bizservice.h" #include "f-readdata/normalDataDB.h" #include "ToolUtils.h" #include "db_api/db_api.h" /** * "dataarray": [ { "metid":"0", "afn":"04", "dataid":"E0000100", "databuff":"000102030405060708090A0B0C0D" }, { "metid":"0", "afn":"04", "dataid":"E0000101", "databuff":"000102030405060708090A0B0C0D" } ] "rtnmsg": [ {"metid":"0", "afn":"04", "dataid":"E0000100", "errmsg":"0" }, {"metid":"0", "afn":"04", "dataid":"E0000101", "errmsg":"1" } ] * */ static bool writeDataDb(void *db_handle, std::string src, const json &dataarray, json &rtnmsg) { bool fRet=false; std::vector sqllist; db_info_t db_info; json rtnmsg0; std::vector results; for (auto data:dataarray){ db_info.tablename.clear(); db_info.db=NULL; //fRet = find_db_api_from_handle(db_handle, afn, dataid, db_info); if (fRet){ std::string sqlcmd; sqlcmd = "insert into "; sqlcmd += db_info.tablename; sqlcmd += " (metid, dataid, source,ctime, databuff )" ; sqlcmd += " values "; sqlcmd += "( " ; sqlcmd += data["metid"].get(); sqlcmd += ", "; sqlcmd += data["dataid"].get(); sqlcmd += ", "; sqlcmd += src; sqlcmd += ", "; sqlcmd += std::to_string(time(NULL)); sqlcmd += ", "; sqlcmd += data["databuff"].get(); sqlcmd += " ); "; sqllist.push_back(sqlcmd); fRet=true; json value; value["metid"] = data["metid"]; value["afn"] = data["afn"]; value["dataid"] = data["dataid"]; value["errmsg"] = "1"; rtnmsg0.push_back(value); }else{ //to do packet fail result; json value; value["metid"] = data["metid"]; value["afn"] = data["afn"]; value["dataid"] = data["dataid"]; value["errmsg"] = "1"; rtnmsg.push_back(value); } } if (fRet){ if (db_info.db->batch_exec(sqllist, results)){ json value; int i=0; for (auto r:results){ value["metid"] = rtnmsg0[i]["metid"]; value["afn"] = rtnmsg0[i]["afn"]; value["dataid"] = rtnmsg0[i]["dataid"]; value["errmsg"] = std::to_string(r.result.status); rtnmsg.push_back(value); i++; } }else{ rtnmsg += rtnmsg0; } fRet = true; } return fRet; } void writeDataSrv::Init(initparam_t *param) { //check data table } int writeDataSrv::HandleMsg(const msg_t msg,msg_t &outMsg, handparam_t *param) { //check param table json tmjson, repjson, repjson1,datajson, rtnmsg; int iRet=0; std::string src; try { tmjson = json::parse(msg.payload); src = msg.topic; if(tmjson.contains("data") && tmjson["data"].contains("dataarray")){ auto wdataarray = tmjson["data"]["dataarray"] ; if (wdataarray.is_array()){ bool fRet = writeDataDb(param->pDbHandle, src, wdataarray, rtnmsg); if (fRet){ repjson["rtnmsg"] = rtnmsg; repjson["complete"] = "1"; repjson1["data"] = repjson; repjson1["time"] = ToolUtils::now_to_string(); repjson1["token"] = tmjson["token"]; }else{ repjson["rtnmsg"] = NULL; repjson["complete"] = "1"; repjson1["data"] = repjson; repjson1["time"] = ToolUtils::now_to_string(); repjson1["token"] = tmjson["token"]; } msg_t msg_rep; msg_rep.payload = repjson1.dump(); msg_rep.topic = ToolUtils::makeTpopicStr(msg.subTopicV); outMsg = msg_rep; iRet=1; }else{ std::cerr << "json dataarray is not array error !!!" << std::endl; } }else{ std::cerr << "json not contain dataarray error %s" << msg.payload << std::endl; } } catch(json::parse_error& ex){ std::cerr << "parse error at byte " << ex.byte << std::endl; return 0; } return iRet; } std::string writeDataSrv::GetFID(void) { return std::string("F-WriteData"); } REGISTER_BIZSERVICE("F-WriteData", writeDataSrv);