Files

168 lines
3.8 KiB
C++

#include <iostream>
#include <common/inc/sqlite3.h>
#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<std::string> sqllist;
db_info_t db_info;
json rtnmsg0;
std::vector<db_result_t> 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<std::string>();
sqlcmd += ", ";
sqlcmd += data["dataid"].get<std::string>();
sqlcmd += ", ";
sqlcmd += src;
sqlcmd += ", ";
sqlcmd += std::to_string(time(NULL));
sqlcmd += ", ";
sqlcmd += data["databuff"].get<std::string>();
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);