add ledger update
This commit is contained in:
@@ -1455,7 +1455,7 @@ std::list<std::string> find_xml_belong_to_this_process()
|
||||
// 根据 str_tag 将 terminal 添加到对应的数组
|
||||
void add_terminal_to_trigger_update(trigger_update_xml_t& trigger_update_xml,
|
||||
const std::string& str_tag,
|
||||
const terminal_dev& work_terminal) {
|
||||
const update_dev& work_terminal) {
|
||||
if (str_tag == "add") {
|
||||
std::cout << "new ledger!!!!" << std::endl;
|
||||
trigger_update_xml.new_updates.push_back(work_terminal);
|
||||
@@ -1472,7 +1472,7 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml,
|
||||
const std::string& str_tag,
|
||||
const std::string& data,
|
||||
const std::string& guid_value) {
|
||||
terminal_dev work_terminal;
|
||||
update_dev work_terminal;
|
||||
work_terminal.guid = guid_value;
|
||||
|
||||
tinyxml2::XMLDocument doc;
|
||||
@@ -1490,31 +1490,32 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml,
|
||||
|
||||
work_terminal.terminal_id = get_value("id");
|
||||
work_terminal.terminal_name = get_value("terminalCode");
|
||||
work_terminal.org_name = get_value("orgName");
|
||||
work_terminal.maint_name = get_value("maintName");
|
||||
work_terminal.station_name = get_value("stationName");
|
||||
work_terminal.tmnl_factory = get_value("manufacturer");
|
||||
//work_terminal.org_name = get_value("orgName");
|
||||
//work_terminal.maint_name = get_value("maintName");
|
||||
//work_terminal.station_name = get_value("stationName");
|
||||
//work_terminal.tmnl_factory = get_value("manufacturer");
|
||||
work_terminal.tmnl_status = get_value("status");
|
||||
work_terminal.dev_type = get_value("devType");
|
||||
work_terminal.dev_key = get_value("devKey");
|
||||
work_terminal.dev_series = get_value("series");
|
||||
//work_terminal.dev_key = get_value("devKey");
|
||||
//work_terminal.dev_series = get_value("series");
|
||||
work_terminal.processNo = get_value("processNo");
|
||||
work_terminal.addr_str = get_value("ip");
|
||||
work_terminal.port = get_value("port");
|
||||
work_terminal.timestamp = get_value("updateTime");
|
||||
//work_terminal.addr_str = get_value("ip");
|
||||
//work_terminal.port = get_value("port");
|
||||
//work_terminal.timestamp = get_value("updateTime");
|
||||
work_terminal.Righttime = get_value("Righttime");
|
||||
|
||||
work_terminal.mac = get_value("mac");
|
||||
|
||||
for (tinyxml2::XMLElement* monitor = root->FirstChildElement("monitorData");
|
||||
monitor;
|
||||
monitor = monitor->NextSiblingElement("monitorData")) {
|
||||
ledger_monitor mon;
|
||||
update_monitor mon;
|
||||
mon.monitor_id = monitor->FirstChildElement("id") ? monitor->FirstChildElement("id")->GetText() : "N/A";
|
||||
mon.monitor_name = monitor->FirstChildElement("name") ? monitor->FirstChildElement("name")->GetText() : "N/A";
|
||||
mon.voltage_level = monitor->FirstChildElement("voltageLevel") ? monitor->FirstChildElement("voltageLevel")->GetText() : "N/A";
|
||||
mon.terminal_connect = monitor->FirstChildElement("ptType") ? monitor->FirstChildElement("ptType")->GetText() : "N/A";
|
||||
mon.logical_device_seq = monitor->FirstChildElement("lineNo") ? monitor->FirstChildElement("lineNo")->GetText() : "N/A";
|
||||
mon.timestamp = monitor->FirstChildElement("timestamp") ? monitor->FirstChildElement("timestamp")->GetText() : "N/A";
|
||||
//mon.timestamp = monitor->FirstChildElement("timestamp") ? monitor->FirstChildElement("timestamp")->GetText() : "N/A";
|
||||
mon.terminal_id = monitor->FirstChildElement("terminal_id") ? monitor->FirstChildElement("terminal_name")->GetText() : "N/A";
|
||||
mon.status = monitor->FirstChildElement("status") ? monitor->FirstChildElement("status")->GetText() : "N/A";
|
||||
|
||||
@@ -1543,7 +1544,7 @@ void parse_ledger_update(trigger_update_xml_t& trigger_update_xml,
|
||||
if (strTag == "add" || strTag == "modify") {
|
||||
parse_terminal_from_data(trigger_update_xml, strTag, data, guid_value);
|
||||
} else if (strTag == "delete") {
|
||||
terminal_dev delete_terminal;
|
||||
update_dev delete_terminal;
|
||||
tinyxml2::XMLDocument doc;
|
||||
|
||||
if (doc.Parse(data.c_str()) != tinyxml2::XML_SUCCESS) {
|
||||
@@ -1673,7 +1674,7 @@ int parse_ledger_update_xml(trigger_update_xml_t& trigger_update_xml)
|
||||
}
|
||||
|
||||
//更新单个台账
|
||||
int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_dev) {
|
||||
int update_one_terminal_ledger(const update_dev& update,terminal_dev& target_dev) {
|
||||
// 更新基本信息
|
||||
if (!update.terminal_id.empty()) {
|
||||
target_dev.terminal_id = update.terminal_id;
|
||||
@@ -1683,14 +1684,14 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d
|
||||
target_dev.terminal_name = update.terminal_name;
|
||||
std::cout << "terminal_name: " << target_dev.terminal_name << std::endl;
|
||||
}
|
||||
if (!update.tmnl_factory.empty()) {
|
||||
/*if (!update.tmnl_factory.empty()) {
|
||||
target_dev.tmnl_factory = update.tmnl_factory;
|
||||
std::cout << "tmnl_factory: " << target_dev.tmnl_factory << std::endl;
|
||||
}
|
||||
if (!update.tmnl_status.empty()) {
|
||||
target_dev.tmnl_status = update.tmnl_status;
|
||||
std::cout << "tmnl_status: " << target_dev.tmnl_status << std::endl;
|
||||
}
|
||||
}*/
|
||||
if (!update.dev_type.empty()) {
|
||||
target_dev.dev_type = update.dev_type;
|
||||
std::cout << "dev_type: " << target_dev.dev_type << std::endl;
|
||||
@@ -1699,20 +1700,20 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d
|
||||
target_dev.processNo = update.processNo;
|
||||
std::cout << "processNo: " << target_dev.processNo << std::endl;
|
||||
}
|
||||
if (!update.dev_series.empty()) {
|
||||
/*if (!update.dev_series.empty()) {
|
||||
target_dev.dev_series = update.dev_series;
|
||||
std::cout << "dev_series: " << target_dev.dev_series << std::endl;
|
||||
}
|
||||
if (!update.dev_key.empty()) {
|
||||
target_dev.dev_key = update.dev_key;
|
||||
std::cout << "dev_key: " << target_dev.dev_key << std::endl;
|
||||
}
|
||||
}*/
|
||||
|
||||
if (!update.addr_str.empty()) {
|
||||
target_dev.addr_str = update.addr_str;
|
||||
std::cout << "addr_str: " << target_dev.addr_str << std::endl;
|
||||
}
|
||||
if (!update.port.empty()) {
|
||||
/*if (!update.port.empty()) {
|
||||
target_dev.port = update.port;
|
||||
std::cout << "port: " << target_dev.port << std::endl;
|
||||
}
|
||||
@@ -1742,7 +1743,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d
|
||||
std::cerr << "Error: invalid timestamp format." << std::endl;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
// 清空旧监测点并重新填充
|
||||
target_dev.line.clear();
|
||||
@@ -1758,7 +1759,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d
|
||||
m.terminal_connect = mon.terminal_connect;
|
||||
m.status = mon.status;
|
||||
m.terminal_id = mon.terminal_id;
|
||||
m.timestamp = mon.timestamp;
|
||||
//m.timestamp = mon.timestamp;
|
||||
|
||||
m.CT1 = mon.CT1;
|
||||
m.CT2 = mon.CT2;
|
||||
@@ -1770,7 +1771,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d
|
||||
std::cout << "monitor_id " << m.monitor_id << " uses delta wiring." << std::endl;
|
||||
}
|
||||
|
||||
if (!m.timestamp.empty()) {
|
||||
/*if (!m.timestamp.empty()) {
|
||||
struct tm timeinfo = {};
|
||||
if (sscanf(m.timestamp.c_str(), "%4d-%2d-%2d %2d:%2d:%2d",
|
||||
&timeinfo.tm_year, &timeinfo.tm_mon, &timeinfo.tm_mday,
|
||||
@@ -1784,7 +1785,7 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d
|
||||
std::cout << "monitor time (unix): " << m.timestamp << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
target_dev.line.push_back(m);
|
||||
}
|
||||
@@ -1799,7 +1800,7 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml)
|
||||
std::cout << "add ledger num: " << ledger_update_xml.new_updates.size() << std::endl;
|
||||
|
||||
for (auto it = ledger_update_xml.new_updates.begin(); it != ledger_update_xml.new_updates.end(); ) {
|
||||
terminal_dev& new_dev = *it;
|
||||
update_dev& new_dev = *it;
|
||||
|
||||
auto found = std::find_if(terminal_devlist.begin(), terminal_devlist.end(),
|
||||
[&](const terminal_dev& d) { return d.terminal_id == new_dev.terminal_id; });
|
||||
@@ -1829,17 +1830,20 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (parse_model_cfg_web_one(target_dev.dev_type).empty()) {
|
||||
/*if (parse_model_cfg_web_one(target_dev.dev_type).empty()) {
|
||||
send_reply_to_queue(new_dev.guid, "2",
|
||||
"终端 id: " + new_dev.terminal_id + " 台账更新失败,未找到装置型号");
|
||||
++it;
|
||||
continue;
|
||||
}
|
||||
}*/
|
||||
|
||||
Set_xml_nodeinfo_one(target_dev.dev_type);
|
||||
//Set_xml_nodeinfo_one(target_dev.dev_type);
|
||||
init_loggers_bydevid(target_dev.terminal_id);
|
||||
terminal_devlist.push_back(target_dev);
|
||||
|
||||
DeviceInfo device = make_device_from_terminal(target_dev);
|
||||
ClientManager::instance().add_device(device);
|
||||
|
||||
send_reply_to_queue(new_dev.guid, "2",
|
||||
"终端 id: " + new_dev.terminal_id + " 台账添加成功");
|
||||
|
||||
@@ -1854,21 +1858,25 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml)
|
||||
[&](const terminal_dev& d) { return d.terminal_id == mod_dev.terminal_id; });
|
||||
|
||||
if (it != terminal_devlist.end()) {
|
||||
remove_loggers_by_terminal_id(mod_dev.terminal_id);
|
||||
erase_one_terminals_by_id(mod_dev.terminal_id);
|
||||
if (update_one_terminal_ledger(mod_dev, *it) != 0) {
|
||||
send_reply_to_queue(mod_dev.guid, "2",
|
||||
"终端 id: " + mod_dev.terminal_id + " 台账更新失败,写入失败");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (parse_model_cfg_web_one(it->dev_type).empty()) {
|
||||
/*if (parse_model_cfg_web_one(it->dev_type).empty()) {
|
||||
send_reply_to_queue(mod_dev.guid, "2",
|
||||
"终端 id: " + mod_dev.terminal_id + " 台账更新失败,未找到装置型号");
|
||||
continue;
|
||||
}
|
||||
}*/
|
||||
|
||||
Set_xml_nodeinfo_one(it->dev_type);
|
||||
//Set_xml_nodeinfo_one(it->dev_type);
|
||||
init_loggers_bydevid(mod_dev.terminal_id);
|
||||
|
||||
DeviceInfo device = make_device_from_terminal(target_dev);
|
||||
ClientManager::instance().add_device(device);
|
||||
|
||||
send_reply_to_queue(mod_dev.guid, "2",
|
||||
"终端 id: " + mod_dev.terminal_id + " 台账修改成功");
|
||||
} else {
|
||||
@@ -1885,8 +1893,8 @@ void process_ledger_update(trigger_update_xml_t& ledger_update_xml)
|
||||
[&](const terminal_dev& d) { return d.terminal_id == del_dev.terminal_id; });
|
||||
|
||||
if (it != terminal_devlist.end()) {
|
||||
remove_loggers_by_terminal_id(del_dev.terminal_id);
|
||||
terminal_devlist.erase(it);
|
||||
erase_one_terminals_by_id(del_dev.terminal_id);
|
||||
ClientManager::instance().remove_device(del_dev.terminal_id);
|
||||
send_reply_to_queue(del_dev.guid, "2",
|
||||
"终端 id: " + del_dev.terminal_id + " 台账删除成功");
|
||||
} else {
|
||||
@@ -5234,3 +5242,103 @@ void enqueue_stat_pq(const std::string& max_base64Str,
|
||||
std::cout << "Successfully assembled tagPqData for line: "
|
||||
<< cid << std::endl;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////清空一个装置运行数据
|
||||
size_t erase_one_terminals_by_id(const std::string& terminal_id) {
|
||||
|
||||
// 先对所有匹配项做日志清理
|
||||
for (const auto& d : terminal_devlist) {
|
||||
if (d.terminal_id == terminal_id) {
|
||||
remove_loggers_by_terminal_id(terminal_id);
|
||||
}
|
||||
}
|
||||
// 再统一擦除
|
||||
const auto old_size = terminal_devlist.size();
|
||||
terminal_devlist.erase(
|
||||
std::remove_if(terminal_devlist.begin(), terminal_devlist.end(),
|
||||
[&](const terminal_dev& d){ return d.terminal_id == terminal_id; }),
|
||||
terminal_devlist.end());
|
||||
return old_size - terminal_devlist.size();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
static DeviceInfo make_device_from_terminal(const terminal_dev& t) {
|
||||
DeviceInfo d;
|
||||
|
||||
// 基本信息
|
||||
d.device_id = t.terminal_id;
|
||||
d.name = t.terminal_name;
|
||||
d.model = t.dev_type;
|
||||
d.mac = t.mac;
|
||||
|
||||
// status:优先按数字解析,其次按 online/true/yes/on 识别;默认 0
|
||||
int status = 0;
|
||||
if (!t.tmnl_status.empty()) {
|
||||
bool parsed_num = false;
|
||||
// 尝试解析为整数
|
||||
char* endp = nullptr;
|
||||
long v = std::strtol(t.tmnl_status.c_str(), &endp, 10);
|
||||
if (endp && *endp == '\0') { parsed_num = true; status = (v != 0) ? 1 : 0; }
|
||||
|
||||
if (!parsed_num) {
|
||||
std::string s = t.tmnl_status;
|
||||
for (char& c : s) c = static_cast<char>(std::tolower(static_cast<unsigned char>(c)));
|
||||
status = (s == "online" || s == "true" || s == "yes" || s == "on" || s == "1") ? 1 : 0;
|
||||
}
|
||||
}
|
||||
d.status = status;
|
||||
|
||||
// righttime:支持 "1/true/yes/on";默认 false
|
||||
bool rt = false;
|
||||
if (!t.Righttime.empty()) {
|
||||
std::string s = t.Righttime;
|
||||
for (char& c : s) c = static_cast<char>(std::tolower(static_cast<unsigned char>(c)));
|
||||
rt = (s == "1" || s == "true" || s == "yes" || s == "on");
|
||||
}
|
||||
d.righttime = rt;
|
||||
|
||||
// points
|
||||
d.points.clear();
|
||||
d.points.reserve(t.line.size());
|
||||
for (const auto& m : t.line) {
|
||||
PointInfo p;
|
||||
p.point_id = m.monitor_id;
|
||||
p.name = m.monitor_name;
|
||||
p.device_id = t.terminal_id;
|
||||
|
||||
// nCpuNo:从 logical_device_seq 转 ushort,非法则置 0
|
||||
unsigned short cpu_no = 0;
|
||||
if (!m.logical_device_seq.empty()) {
|
||||
char* endp = nullptr;
|
||||
long v = std::strtol(m.logical_device_seq.c_str(), &endp, 10);
|
||||
if (endp && *endp == '\0' && v >= 0) {
|
||||
if (v > 0xFFFF) v = 0xFFFF;
|
||||
cpu_no = static_cast<unsigned short>(v);
|
||||
}
|
||||
}
|
||||
p.nCpuNo = cpu_no;
|
||||
|
||||
// 变比与电压等级
|
||||
p.PT1 = m.PT1;
|
||||
p.PT2 = m.PT2;
|
||||
p.CT1 = m.CT1;
|
||||
p.CT2 = m.CT2;
|
||||
p.strScale = m.voltage_level;
|
||||
|
||||
// 接线方式:0-星型 1-角型;支持 "0/1"、包含“角/三角/delta/Δ”
|
||||
int pttype = 0; // 默认星型
|
||||
if (!m.terminal_connect.empty()) {
|
||||
std::string s = m.terminal_connect;
|
||||
for (char& c : s) c = static_cast<char>(std::tolower(static_cast<unsigned char>(c)));
|
||||
if (s == "1" || s.find("角") != std::string::npos || s.find("三角") != std::string::npos
|
||||
|| s.find("delta") != std::string::npos || s.find("△") != std::string::npos || s.find("Δ") != std::string::npos) {
|
||||
pttype = 1;
|
||||
}
|
||||
}
|
||||
p.nPTType = pttype;
|
||||
|
||||
d.points.push_back(std::move(p));
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
@@ -752,7 +752,7 @@ int parse_device_cfg_web()
|
||||
DIY_DEBUGLOG("process", "【DEBUG】前置的%d号进程调用获取到的台账的数量为:%d", g_front_seg_index, count_cfg);
|
||||
|
||||
if (IED_COUNT < count_cfg) {
|
||||
std::cout << "!!!!!!!!!!single process can not add any ledger unless reboot!!!!!!!" << std::endl;
|
||||
std::cout << "!!!!!!!!!!single process has ledger count more than config!!!!!!!" << std::endl;
|
||||
//DIY_WARNLOG("process","【WARN】前置的%d号进程获取到的台账的数量大于配置文件中给单个进程配置的台账数量:%d,这个进程将按照获取到的台账的数量来创建台账空间,这个进程不能直接通过台账添加来新增台账,只能通过重启进程或者先删除已有台账再添加台账的方式来添加新台账", g_front_seg_index, IED_COUNT);
|
||||
} else {
|
||||
//DIY_INFOLOG("process","【NORMAL】前置的%d号进程根据配置文件中给单个进程配置的台账数量:%d来创建台账空间", g_front_seg_index, IED_COUNT);
|
||||
@@ -764,17 +764,22 @@ int parse_device_cfg_web()
|
||||
|
||||
terminal_devlist.clear();
|
||||
|
||||
int idx = 0;
|
||||
for (const auto& kv : terminal_dev_map) {
|
||||
|
||||
terminal_dev dev = kv.second; // kv.second 是对象,不用判断指针
|
||||
|
||||
//dev.dev_index = static_cast<int>(idx++);
|
||||
|
||||
// ======= [新增] 对 terminal_dev 中 web 未返回/未设置字段做统一初始化,避免脏值 =======
|
||||
dev.guid.clear(); // [新增] 业务 guid 初始为空
|
||||
dev.busytype = 0; // [新增] 业务类型(状态机)默认 0
|
||||
dev.isbusy = 0; // [新增] 未进行业务
|
||||
dev.busytimecount = 0; // [新增] 业务计时清零
|
||||
|
||||
dev.internal_values.clear(); // [新增] 内部定值清空,等后续业务真实填充
|
||||
dev.dz_internal_info_list.clear(); // [新增] 内部定值信息清空,等后续业务真实填充
|
||||
dev.control_words.clear();
|
||||
// ------------------------------------------------------------------------------------
|
||||
|
||||
// ======= [新增] 对每个监测点做必要的内部结构初始化 =======
|
||||
@@ -786,6 +791,10 @@ int parse_device_cfg_web()
|
||||
// 定值列表清理,等待后续配置/采集填充
|
||||
mon.set_values.clear(); // [新增]
|
||||
mon.dz_info_list.clear(); // [新增]
|
||||
|
||||
//补招列表清理
|
||||
mon.recall_list.clear();
|
||||
mon.recall_list_static.clear();
|
||||
}
|
||||
// ------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -179,6 +179,54 @@ class qvvr_event
|
||||
std::vector<qvvr_file> qvvrfile; //暂态文件组列表
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////台账更新用
|
||||
|
||||
class update_monitor
|
||||
{
|
||||
public:
|
||||
std::string monitor_id; //监测点id
|
||||
std::string terminal_id; //监测点的终端id
|
||||
std::string monitor_name; //监测点名
|
||||
std::string logical_device_seq; //监测点序号
|
||||
std::string voltage_level; //监测点电压等级
|
||||
std::string terminal_connect; //监测点接线方式
|
||||
std::string timestamp; //更新时间
|
||||
std::string status; //监测点状态
|
||||
double PT1; // 电压变比1
|
||||
double PT2; // 电压变比2
|
||||
double CT1; // 电流变比1
|
||||
double CT2; // 电流变比2
|
||||
|
||||
};
|
||||
|
||||
//终端台账
|
||||
class update_dev
|
||||
{
|
||||
public:
|
||||
|
||||
std::string terminal_id;
|
||||
std::string terminal_name;
|
||||
std::string org_name;
|
||||
std::string maint_name;
|
||||
std::string station_name;
|
||||
std::string tmnl_factory;
|
||||
std::string tmnl_status;
|
||||
std::string dev_type;
|
||||
std::string dev_key;
|
||||
std::string dev_series;
|
||||
std::string addr_str; //装置ip
|
||||
std::string port; //装置端口
|
||||
std::string timestamp; //更新时间
|
||||
std::string Righttime; //对时
|
||||
std::string processNo;
|
||||
std::string maxProcessNum;
|
||||
std::string mac; // 装置MAC地址,接口中从addr_str获取,因为ip和mac放同一位置
|
||||
|
||||
std::vector<ledger_monitor> line;
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////台账更新用
|
||||
|
||||
//监测点台账
|
||||
class ledger_monitor
|
||||
{
|
||||
@@ -213,6 +261,8 @@ public:
|
||||
class terminal_dev
|
||||
{
|
||||
public:
|
||||
//int dev_index;
|
||||
|
||||
std::string guid; //正在进行的guid
|
||||
int busytype; //业务类型,使用状态机
|
||||
int isbusy; //业务进行标志
|
||||
@@ -239,7 +289,6 @@ public:
|
||||
std::string Righttime; //对时
|
||||
std::string processNo;
|
||||
std::string maxProcessNum;
|
||||
|
||||
std::string mac; // 装置MAC地址,接口中从addr_str获取,因为ip和mac放同一位置
|
||||
|
||||
std::vector<ledger_monitor> line;
|
||||
@@ -400,10 +449,10 @@ public:
|
||||
#define MAX_UPDATEA_NUM 10
|
||||
typedef struct trigger_update_xml_t trigger_update_xml_t;
|
||||
struct trigger_update_xml_t {
|
||||
std::vector<terminal_dev> new_updates;
|
||||
std::vector<terminal_dev> modify_updates;
|
||||
std::vector<terminal_dev> delete_updates;
|
||||
std::vector<terminal_dev> work_updates;
|
||||
std::vector<update_dev> new_updates;
|
||||
std::vector<update_dev> modify_updates;
|
||||
std::vector<update_dev> delete_updates;
|
||||
std::vector<update_dev> work_updates;
|
||||
|
||||
trigger_update_xml_t() = default;
|
||||
};
|
||||
@@ -673,6 +722,11 @@ void filemenu_cache_put(const std::string& dev_id,
|
||||
//提取目录信息
|
||||
bool filemenu_cache_take(const std::string& dev_id, std::vector<tag_dir_info>& out);
|
||||
|
||||
//清空装置台账
|
||||
size_t erase_one_terminals_by_id(const std::string& terminal_id);
|
||||
|
||||
//转换结构
|
||||
DeviceInfo make_device_from_terminal(const terminal_dev& t);
|
||||
|
||||
//小工具
|
||||
inline std::string trim_cstr(const char* s, size_t n) {
|
||||
@@ -750,10 +804,9 @@ void enqueue_stat_pq(const std::string& max_base64Str,
|
||||
extern int g_front_seg_index;
|
||||
extern std::string FRONT_INST;
|
||||
extern std::string FRONT_PATH;
|
||||
|
||||
extern std::string WEB_FILEUPLOAD;
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 响应码枚举
|
||||
// 云平台响应码枚举
|
||||
enum class ResponseCode : int {
|
||||
OK = 200, // 请求成功
|
||||
ACCEPTED = 201, // 请求被接受,开始处理
|
||||
|
||||
@@ -676,7 +676,7 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d
|
||||
send_reply_to_queue(guid, "1", "收到台账更新指令");
|
||||
|
||||
if (code_str == "add_terminal" || code_str == "ledger_modify") {
|
||||
std::cout << "add or update ledger" << std::endl;
|
||||
std::cout << "add or modify ledger" << std::endl;
|
||||
|
||||
if (messageBody.contains("data") && messageBody["data"].is_array()) {
|
||||
for (const auto& item : messageBody["data"]) {
|
||||
@@ -696,6 +696,9 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d
|
||||
int procNo = item.value("processNo", -1);
|
||||
json_data.processNo = std::to_string(procNo);
|
||||
|
||||
//int procNum = item.value("maxProcessNum", -1);
|
||||
//json_data.maxProcessNum = std::to_string(procNum);
|
||||
|
||||
//json_data.addr_str = item.value("ip", "");
|
||||
//json_data.port = item.value("port", "");
|
||||
//json_data.timestamp = item.value("updateTime", "");
|
||||
@@ -713,19 +716,53 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d
|
||||
m.logical_device_seq = monitor_item.value("lineNo", "");
|
||||
m.terminal_connect = monitor_item.value("ptType", "");
|
||||
//m.timestamp = json_data.timestamp;
|
||||
m.terminal_id = json_data.terminal_id;
|
||||
m.terminal_id = monitor_item.value("deviceId", json_data.terminal_id);
|
||||
m.CT1 = monitor_item.value("CT1", "");
|
||||
m.CT2 = monitor_item.value("CT2", "");
|
||||
m.PT1 = monitor_item.value("PT1", "");
|
||||
m.PT2 = monitor_item.value("PT2", "");
|
||||
}
|
||||
}
|
||||
|
||||
print_terminal(json_data);
|
||||
|
||||
std::string xmlContent = prepare_update(code_str, json_data, guid);
|
||||
/*std::string xmlContent = prepare_update(code_str, json_data, guid);
|
||||
if (!xmlContent.empty()) {
|
||||
char nodeid[20];
|
||||
std::sprintf(nodeid, "%u", g_node_id);
|
||||
std::string file_name = output_dir + "/" + nodeid + "_" + std::to_string(g_front_seg_index) + "_" + json_data.terminal_id + "_" + code_str + ".xml";
|
||||
writeToFile(file_name, xmlContent);
|
||||
}
|
||||
}*/
|
||||
if(code_str == "add_terminal"){
|
||||
init_loggers_bydevid(target_dev.terminal_id);
|
||||
terminal_devlist.push_back(json_data);
|
||||
|
||||
//调用接口添加到通讯列表
|
||||
DeviceInfo device = make_device_from_terminal(json_data);
|
||||
ClientManager::instance().add_device(device);
|
||||
|
||||
send_reply_to_queue(new_dev.guid, "2",
|
||||
"终端 id: " + new_dev.terminal_id + " 台账添加成功");
|
||||
}
|
||||
else if(code_str == "ledger_modify"){
|
||||
|
||||
if(erase_one_terminals_by_id(json_data.terminal_id) == 1){
|
||||
init_loggers_bydevid(target_dev.terminal_id);
|
||||
terminal_devlist.push_back(json_data);
|
||||
|
||||
//调用接口添加到通讯列表
|
||||
DeviceInfo device = make_device_from_terminal(json_data);
|
||||
ClientManager::instance().add_device(device);
|
||||
|
||||
send_reply_to_queue(del_dev.guid, "2",
|
||||
"终端 id: " + del_dev.terminal_id + " 台账修改成功");
|
||||
}
|
||||
else{
|
||||
send_reply_to_queue(del_dev.guid, "2",
|
||||
"终端 id: " + del_dev.terminal_id + " 台账修改失败");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} else if (code_str == "delete_terminal") {
|
||||
@@ -736,13 +773,25 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d
|
||||
auto id = item.value("id", "");
|
||||
json_data.terminal_id = id;
|
||||
|
||||
std::string xmlContent = prepare_update(code_str, json_data, guid);
|
||||
/*std::string xmlContent = prepare_update(code_str, json_data, guid);
|
||||
if (!xmlContent.empty()) {
|
||||
char nodeid[20];
|
||||
std::sprintf(nodeid, "%u", g_node_id);
|
||||
std::string file_name = output_dir + "/" + nodeid + "_" + std::to_string(g_front_seg_index) + "_" + json_data.terminal_id + "_delete_terminal.xml";
|
||||
writeToFile(file_name, xmlContent);
|
||||
}
|
||||
}*/
|
||||
|
||||
//直接加锁删除
|
||||
std::lock_guard<std::mutex> lock(ledgermtx);
|
||||
if(erase_one_terminals_by_id(json_data.terminal_id) == 1){
|
||||
lientManager::instance().remove_device(json_data.terminal_id);
|
||||
send_reply_to_queue(del_dev.guid, "2",
|
||||
"终端 id: " + del_dev.terminal_id + " 台账删除成功");
|
||||
}
|
||||
else{
|
||||
send_reply_to_queue(del_dev.guid, "2",
|
||||
"终端 id: " + del_dev.terminal_id + " 台账删除失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1081,48 +1130,51 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<id>" << json_data.terminal_id << "</id>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<ip>" << json_data.addr_str << "</ip>" << std::endl; // Assuming `addr_str` for IP
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<ip>" << json_data.addr_str << "</ip>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<devType>" << json_data.dev_type << "</devType>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<maintName>" << json_data.maint_name << "</maintName>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<maintName>" << json_data.maint_name << "</maintName>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<orgName>" << json_data.org_name << "</orgName>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<orgName>" << json_data.org_name << "</orgName>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<port>" << json_data.port << "</port>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<port>" << json_data.port << "</port>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<stationName>" << json_data.station_name << "</stationName>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<stationName>" << json_data.station_name << "</stationName>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<terminalCode>" << json_data.terminal_name << "</terminalCode>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<updateTime>" << json_data.timestamp << "</updateTime>" << std::endl; // Assuming `timestamp`
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<updateTime>" << json_data.timestamp << "</updateTime>" << std::endl; // Assuming `timestamp`
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<manufacturer>" << json_data.tmnl_factory << "</manufacturer>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<manufacturer>" << json_data.tmnl_factory << "</manufacturer>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<status>" << json_data.tmnl_status << "</status>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<status>" << json_data.tmnl_status << "</status>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<series>" << json_data.dev_series << "</series>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<series>" << json_data.dev_series << "</series>" << std::endl;
|
||||
|
||||
//lnk20250210
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<processNo>" << json_data.processNo << "</processNo>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<devKey>" << json_data.dev_key << "</devKey>" << std::endl;
|
||||
xmlStream << "<Righttime>" << json_data.Righttime << "</Righttime>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<mac>" << json_data.mac << "</mac>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<devKey>" << json_data.dev_key << "</devKey>" << std::endl;
|
||||
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<mac>" << json_data.mac << "</mac>" << std::endl;
|
||||
|
||||
// monitorData 部分
|
||||
for (int i = 0; json_data.line[i].monitor_id[0] != '\0'; i++) {
|
||||
@@ -1147,8 +1199,8 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<ptType>" << monitor.terminal_connect << "</ptType>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<timestamp>" << monitor.timestamp << "</timestamp>" << std::endl;
|
||||
//add_indent(xmlStream, indentLevel);
|
||||
//xmlStream << "<timestamp>" << monitor.timestamp << "</timestamp>" << std::endl;
|
||||
|
||||
add_indent(xmlStream, indentLevel);
|
||||
xmlStream << "<terminal_id>" << monitor.terminal_id << "</terminal_id>" << std::endl;
|
||||
@@ -2017,3 +2069,6 @@ void connect_status_update(const std::string& id, int status)
|
||||
// 调试打印
|
||||
std::cout << "[connect_status_update] queued JSON:\n" << j.dump(4) << std::endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -414,6 +414,7 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) {
|
||||
|
||||
std::ostringstream os;
|
||||
os << "\r\x1B[K------------------------------------\n";
|
||||
//os << "\r\x1B[K|-- dev_index : " << dev.dev_index << "\n";
|
||||
os << "\r\x1B[K|-- terminal_id : " << dev.terminal_id << "\n";
|
||||
os << "\r\x1B[K|-- terminal_name : " << dev.terminal_name << "\n";
|
||||
os << "\r\x1B[K|-- dev_ip : " << dev.addr_str << "\n";
|
||||
|
||||
Reference in New Issue
Block a user