168 lines
3.8 KiB
C++
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);
|