| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114 | 
							- #include "stdafx.h"
 
- #include "LNHandle.h"
 
- #include <Simplelog.h>
 
- #include "AppService.h"
 
- #include "Device.h"
 
- #include <yyjson.h>
 
- #include "MGWSServer.h"
 
- #include "Device.h"
 
- #include "ResistAlarm.h"
 
- #include <gbk2utf8.h>
 
- using namespace jsonxx;
 
- CTask::CTask(LPBYTE pPack, int nPackLen, SOCKADDR* psa, void* pClientContext)
 
- 	: addr(*psa)
 
- {
 
- 	pdata = new BYTE[nPackLen];
 
- 	memcpy(pdata, pPack, nPackLen);
 
- 	nlen = nPackLen;
 
- }
 
- void CTask::join()
 
- {
 
- 	delete this;
 
- }
 
- CTask::~CTask()
 
- {
 
- 	delete[] pdata;
 
- 	pdata = nullptr;
 
- 	nlen = 0;
 
- }
 
- CLNHandle::CLNHandle()
 
- {
 
- 	m_dl_sync = new uint8_t[100];
 
- 	m_dl_len = CHjDataConver::conver_sendpack(m_dl_sync, nullptr, 0, 0, 0, E_ZL_PROTOCAL::DL_SYNC, OR_DATA_INFO(0,0, 1, 3, OPT_TYPE::OPT_SYNC));
 
- 	for (auto i = 0; i < MAX_HANDLE_THREAD_NUM; i++)
 
- 		pThread[i] = nullptr;
 
- 	Create();
 
- }
 
- CLNHandle::~CLNHandle()
 
- {
 
- 	delete[] m_dl_sync;
 
- 	m_dl_sync = nullptr;
 
- 	m_dl_len = 0;
 
- 	Close();
 
- }
 
- BOOL CLNHandle::HandlePack(LPBYTE pPack, int nPackLen, SOCKADDR* psa, void* pClientContext /*= NULL*/)
 
- {
 
- 	if (!m_bWork) return true;
 
- 	auto pContext = ((CLNContext*)pClientContext);
 
- 	if ((pPack == NULL || nPackLen == 0) && pClientContext)
 
- 	{
 
- 		pContext->SetIPAdress();
 
- 		SPDLOG_INFO("10090 发现新连接:{}", pContext->GetIPAdress());
 
- 		pContext->Send(m_dl_sync, m_dl_len);
 
- 		return TRUE;
 
- 	}
 
- 	if (CHjDataConver::conver_recvpack(pPack, nPackLen) == false)
 
- 		return FALSE;
 
- 	LPHJDATAHEAD2 lpHead = (HJDATAHEAD2*)pPack;
 
- 	auto addr = (SOCKADDR_IN*)psa;
 
- 	auto it = m_mapUser.find(addr->sin_addr.S_un.S_addr);
 
- 	if (lpHead->protocol == E_ZL_PROTOCAL::ZL_KEEP)
 
- 		return TRUE;
 
- 	//SPDLOG_INFO("packno:{} recv {}", lpHead->packno, uint8_t(lpHead->protocol));
 
- 	switch (lpHead->protocol)
 
- 	{
 
- 	case E_ZL_PROTOCAL::ZL_MO:
 
- 		HandleMoSync(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_MP:
 
- 		HandleMpSync(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_SVG:
 
- 		HandleSvgSync(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_REFER:
 
- 		HandleReferSync(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_ALARM_SET:
 
- 		HandleAlarmSetSync(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_ALARM_UNACK:
 
- 		HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_RESIST_DATA:
 
- 		HandleResistData(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_TEMP_HUMI:
 
- 		HandleTempHumiData(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_MOVE:
 
- 		HandleMove(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	case E_ZL_PROTOCAL::ZL_ALARM_DATA:
 
- 		HandleAlarmData(lpHead, (char*)pPack + sizeof(HJDATAHEAD2), lpHead->len, (CLNContext*)pClientContext);
 
- 		break;
 
- 	default:
 
- 		SPDLOG_WARN("收到未解析的命令:{}", uint8_t(lpHead->protocol));
 
- 		break;
 
- 	}
 
- 	return TRUE;
 
- }
 
- void CLNHandle::SendAllClientSync()
 
- {
 
- 	auto pAcceptor = CAppService::Instance()->GetAcceptor();
 
- 	if (!pAcceptor) return;
 
- 	pAcceptor->SendDataAllContexts(m_dl_sync, m_dl_len);
 
- }
 
- void CLNHandle::SendSubNotify(string momp)
 
- {
 
- 	jsonxx::Object obj;
 
- 	obj << "momp" << momp;
 
- 	auto data = obj.json();
 
- 	BYTE send[100];
 
- 	int len = CHjDataConver::conver_sendpack(send, (BYTE*)data.c_str(), data.length(), 0, 0, E_ZL_PROTOCAL::DL_SUB_NOTIFY, OR_DATA_INFO(0, 0, 1, 3, OPT_TYPE::OPT_ADD));
 
- 	auto pAcceptor = CAppService::Instance()->GetAcceptor();
 
- 	if (!pAcceptor) return;
 
- 	pAcceptor->SendDataAllContexts(send, len);
 
- }
 
- void CLNHandle::HandleMoSync(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	jsonxx::Object doc;
 
- 	doc.parse(string(json, json_len));
 
- 	if (doc.empty()) return;
 
- 	auto id = doc.get<string>("id");
 
- 	
 
- 	ASSERT(id.compare("100000") == 0);
 
- 	auto pObj = CMonitorObjectMng::Instance()->GetTreeByID(id);
 
- 	auto child = doc.get<jsonxx::Array>("child");
 
- 	auto n = child.size();
 
- 	for (int i = 0; i < n; i++)
 
- 	{
 
- 		auto obj = child.get<Object>(i);
 
- 		CompareMoSync(obj, pObj);
 
- 	}
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- }
 
- void CLNHandle::HandleMpSync(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	using namespace jsonxx;
 
- 	jsonxx::Array doc;
 
- 	doc.parse(string(json, json_len));
 
- 	if (doc.empty()) return;
 
- 	size_t n = doc.size();
 
- 	for (size_t i = 0; i < n; i++)
 
- 	{
 
- 		auto obj = doc.get<Object>(i); 
 
- 		CompareMpSync(obj);
 
- 	}
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- }
 
- BOOL CLNHandle::HandleSvgSync(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	auto strSvgFolderPath = g_strExepath + "svg\\";
 
- 	string strFileName(json);
 
- 	auto strSvgPath = strSvgFolderPath + strFileName + ".svg";
 
- 	BOOL bSave = true;
 
- 	WIN32_FILE_ATTRIBUTE_DATA attrs = { 0 };
 
- 	if (0 != ::GetFileAttributesEx(strSvgPath.c_str(), ::GetFileExInfoStandard, &attrs))
 
- 	{
 
- 		auto len = ((uint64_t)attrs.nFileSizeHigh << 32) + attrs.nFileSizeLow;
 
- 		if (len == json_len - 64)
 
- 			bSave = false;  //大小相等不存储
 
- 	}
 
- 	if (bSave)
 
- 	{
 
- 		CFile file;
 
- 		if (file.Open(strSvgPath.c_str(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary) == FALSE)
 
- 		{
 
- 			SPDLOG_ERROR("打开文件{}失败", strSvgPath);
 
- 			return FALSE;
 
- 		}
 
- 		else
 
- 		{
 
- 			file.Write(json + 64, json_len - 64);
 
- 			file.Close();
 
- 		}
 
- 	}
 
- 	return TRUE;
 
- }
 
- BOOL CLNHandle::HandleReferSync(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	auto strSvgFolderPath = g_strExepath + "refer\\";
 
- 	string strFileName(json);
 
- 	auto strSvgPath = strSvgFolderPath + strFileName + ".json";
 
- 	BOOL bSave = true;
 
- 	WIN32_FILE_ATTRIBUTE_DATA attrs = { 0 };
 
- 	if (0 != ::GetFileAttributesEx(strSvgPath.c_str(), ::GetFileExInfoStandard, &attrs))
 
- 	{
 
- 		auto len = ((uint64_t)attrs.nFileSizeHigh << 32) + attrs.nFileSizeLow;
 
- 		if (len == json_len - 64)
 
- 			bSave = false;  //大小相等不存储
 
- 	}
 
- 	if (bSave)
 
- 	{
 
- 		CFile file;
 
- 		if (file.Open(strSvgPath.c_str(), CFile::modeCreate | CFile::modeWrite | CFile::typeBinary) == FALSE)
 
- 		{
 
- 			SPDLOG_ERROR("打开文件{}失败", strSvgPath);
 
- 			return FALSE;
 
- 		}
 
- 		else
 
- 		{
 
- 			file.Write(json + 64, json_len - 64);
 
- 			file.Close();
 
- 		}
 
- 	}
 
- 	return TRUE;
 
- }
 
- BOOL CLNHandle::HandleResistData(LPHJDATAHEAD2 lpHead, char* json, int len, CLNContext* pContext)
 
- {
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	static string sz_utf_fix = ANSItoUTF8("定位测力曲线");
 
- 	static string sz_utf_invert = ANSItoUTF8("反位测力曲线");
 
- 	static string sz_utf_convert = ANSItoUTF8("转换阻力曲线");
 
- 	Object doc;
 
- 	string strJson(json, len);
 
- 	doc.parse(strJson);
 
- 	if (doc.empty())
 
- 	{
 
- 		SPDLOG_WARN("json格式未正确 {}", strJson);
 
- 		return FALSE;
 
- 	}
 
- 	auto station = doc.get<string>("station");
 
- 	auto mo = doc.get<string>("mo");
 
- 	auto mp = doc.get<string>("mp");
 
- 	auto time = doc.get<Array>("time");
 
- 	auto fix_data = doc.get<Array>("fix_data");
 
- 	auto invert_data = doc.get<Array>("invert_data");
 
- 	auto convert_data = doc.get<Array>("convert_data");
 
- 	size_t n = time.size();
 
- 	size_t n1 = fix_data.size();
 
- 	size_t n2 = invert_data.size();
 
- 	size_t n3 = convert_data.size();
 
- 	ASSERT(n == n1 && n == n2 && n == n3);
 
- 	if (n != n1 || n != n2 || n != n3)
 
- 	{
 
- 		SPDLOG_WARN("time fix_data invert_data convert_data not = {}", strJson);
 
- 		return FALSE;
 
- 	}
 
- 	if (n < 1)
 
- 	{
 
- 		SPDLOG_WARN("size < 1 {}", strJson);
 
- 		return FALSE;
 
- 	}
 
- 	auto momp = fmt::format("{}.{}", mo, mp);
 
- 	auto tt = time.get<string>(0);
 
- 	int year, month, day;
 
- 	auto s_num = sscanf_s(tt.c_str(), "%d-%d-%d ", &year, &month, &day);
 
- 	ASSERT(s_num == 3);
 
- 	auto tablename = fmt::format("rm_resistance_{:0>4}{:0>2}{:0>2}", year, month, day);
 
- 	auto ii = fix_data.get<Value>(0);
 
- 	auto pDevice = CDeviceMng::Instance()->Find(momp);
 
- 	if (pDevice) pDevice->updateActive();
 
- 	static auto mg_server = CAppService::Instance()->GetMgServer();
 
- 	auto bSub = mg_server->IsClientSubReal(momp); //判断客户端是否订阅
 
- 	char* json_res = nullptr;
 
- 	yyjson_mut_doc* doc_y = nullptr;
 
- 	yyjson_mut_val* points_fix = nullptr;
 
- 	yyjson_mut_val* points_invert = nullptr;
 
- 	yyjson_mut_val* points_convert = nullptr;
 
- 	if (bSub)
 
- 	{
 
- 		doc_y = yyjson_mut_doc_new(nullptr);
 
- 		auto root = yyjson_mut_obj(doc_y);
 
- 		yyjson_mut_doc_set_root(doc_y, root);
 
- 		auto data = yyjson_mut_arr(doc_y);
 
- 		yyjson_mut_obj_add_val(doc_y, root, "data", data);
 
- 		auto curve_fix = yyjson_mut_obj(doc_y);//定
 
- 		auto curve_invert = yyjson_mut_obj(doc_y);//反
 
- 		auto curve_convert = yyjson_mut_obj(doc_y);//转换
 
- 		yyjson_mut_arr_add_val(data, curve_fix);
 
- 		yyjson_mut_arr_add_val(data, curve_invert);
 
- 		yyjson_mut_arr_add_val(data, curve_convert);
 
- 		yyjson_mut_obj_add_str(doc_y, root, "cmd", "new_data_notify");
 
- 		yyjson_mut_obj_add_strcpy(doc_y, root, "tag", (momp + ".resist").c_str());
 
- 		yyjson_mut_obj_add_str(doc_y, root, "data_fmt", "curve");
 
- 		yyjson_mut_obj_add_str(doc_y, root, "unit", "N");
 
- 		yyjson_mut_obj_add_strcpy(doc_y, root, "up", ANSItoUTF8(station).c_str());
 
- 		yyjson_mut_obj_add_strcpy(doc_y, root, "tag_name", pDevice ? (pDevice->mo_name + "." + pDevice->mp_name).c_str() : momp.c_str());
 
- 		yyjson_mut_obj_add_str(doc_y, curve_fix, "name", sz_utf_fix.c_str());
 
- 		yyjson_mut_obj_add_str(doc_y, curve_invert, "name", sz_utf_invert.c_str());
 
- 		yyjson_mut_obj_add_str(doc_y, curve_convert, "name", sz_utf_convert.c_str());
 
- 		points_fix = yyjson_mut_arr(doc_y);
 
- 		yyjson_mut_obj_add_val(doc_y, curve_fix, "points", points_fix);
 
- 		points_invert = yyjson_mut_arr(doc_y);
 
- 		yyjson_mut_obj_add_val(doc_y, curve_invert, "points", points_invert);
 
- 		points_convert = yyjson_mut_arr(doc_y);
 
- 		yyjson_mut_obj_add_val(doc_y, curve_convert, "points", points_convert);
 
- 	}
 
- 	CString sql;
 
- 	for (size_t i = 0; i < n; i++)
 
- 	{
 
- 		auto t = time.get<string>(i);
 
- 		int f = int(fix_data.get<Number>(i));
 
- 		int v = int(invert_data.get<Number>(i));
 
- 		int c = int(convert_data.get<Number>(i));
 
- 		sql += fmt::format("INSERT INTO {}(momp,acquisitiontime,data0,data1,data2) VALUES ('{}','{}',{},{},{});",
 
- 			tablename, momp, t, f, v, c).c_str();
 
- 		if (bSub)
 
- 		{
 
- 			int hour, min, second, fra;
 
- 			auto s_num = sscanf_s(t.c_str(), "%d-%d-%d %d:%d:%d.%d", &year, &month, &day, &hour, &min, &second, &fra);
 
- 			if (s_num == 7)
 
- 			{
 
- 				uint64_t ttt = CTime(year, month, day, hour, min, second).GetTime() * 1000 + fra;
 
- 				{
 
- 					auto item = yyjson_mut_arr(doc_y);
 
- 					yyjson_mut_arr_add_val(points_fix, item);
 
- 					yyjson_mut_arr_add_uint(doc_y, item, ttt);
 
- 					yyjson_mut_arr_add_int(doc_y, item, f);
 
- 				}
 
- 				{
 
- 					auto item = yyjson_mut_arr(doc_y);
 
- 					yyjson_mut_arr_add_val(points_invert, item);
 
- 					yyjson_mut_arr_add_uint(doc_y, item, ttt);
 
- 					yyjson_mut_arr_add_int(doc_y, item, v);
 
- 				}
 
- 				{
 
- 					auto item = yyjson_mut_arr(doc_y);
 
- 					yyjson_mut_arr_add_val(points_convert, item);
 
- 					yyjson_mut_arr_add_uint(doc_y, item, ttt);
 
- 					yyjson_mut_arr_add_int(doc_y, item, c);
 
- 				}
 
- 			}
 
- 			else
 
- 				ASSERT(false);
 
- 		}
 
- 	}
 
- 	auto pConn = CDBConnectPool::Instance()->GetConnection();
 
- 	COdbcStatement stmt(pConn);
 
- 	auto iret = pConn->SetAutoCommit(false);
 
- 	iret = stmt.Prepare(sql);
 
- 	if (ISODBCSUCCESS(stmt.Execute()))
 
- 	{
 
- 	}
 
- 	else
 
- 	{
 
- 		SPDLOG_ERROR("语句执行错误{}", sql);
 
- 	}
 
- 	iret = pConn->Commit();
 
- 	pConn->SetAutoCommit(true);
 
- 	if (bSub)
 
- 	{
 
- 		size_t json_len;
 
- 		json_res = yyjson_mut_write(doc_y, 0, &json_len);
 
- 		mg_server->SendClientSubReal(momp, json_res, json_len);
 
- 	}
 
- 	//释放
 
- 	CDBConnectPool::Instance()->FreeConnection(pConn);
 
- 	if (json_res) free(json_res);
 
- 	yyjson_mut_doc_free(doc_y);
 
- 	return TRUE;
 
- }
 
- BOOL CLNHandle::HandleTempHumiData(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	Object doc;
 
- 	string strJson(json, json_len);
 
- 	doc.parse(strJson);
 
- 	if (doc.empty())
 
- 	{
 
- 		SPDLOG_WARN("json格式未正确 {}", strJson);
 
- 		return FALSE;
 
- 	}
 
- 	auto station = doc.get<string>("station");
 
- 	auto mo = doc.get<string>("mo");
 
- 	auto mp = doc.get<string>("mp");
 
- 	auto time = doc.get<string>("time");
 
- 	int temp = doc.get<Number>("temp");
 
- 	int humi = doc.get<Number>("humi");
 
- 	int year, month, day;
 
- 	auto s_num = sscanf_s(time.c_str(), "%d-%d-%d ", &year, &month, &day);
 
- 	ASSERT(s_num == 3);
 
- 	auto tablename = fmt::format("rm_temphumidity_{:0>4}{:0>2}", year, month);
 
- 	CString sql = fmt::format("INSERT INTO {}(mo,mp,acquisitiontime,temperature,humidity) VALUES ('{}','{}','{}',{},{});",
 
- 			tablename, mo, mp, time, temp, humi).c_str();
 
- 	if (!CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 	{
 
- 		SPDLOG_ERROR("语句执行错误{}", sql);
 
- 		return FALSE;
 
- 	}
 
- 	return TRUE;
 
- }
 
- BOOL CLNHandle::HandleAlarmSetSync(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	BOOL bRet = false;
 
- 	do {
 
- 		Array arr;
 
- 		arr.parse(string(json, json_len));
 
- 		if (arr.empty())
 
- 		{
 
- 			ASSERT(0);
 
- 			break;
 
- 		}
 
- 		size_t n = arr.size();
 
- 		for (int i = 0; i < n; i++)
 
- 		{
 
- 			auto obj = arr.get<Object>(i);
 
- 			auto mo = obj.get<string>("mo");
 
- 			auto mp = obj.get<string>("mp");
 
- 			auto station = obj.get<string>("station");
 
- 			uint8_t no = obj.get<Number>("no");
 
- 			eZL_ALARMTYPE type = (eZL_ALARMTYPE)obj.get<Number>("type");
 
- 			auto pBaseInfo = CResistAlarmMng::Instance()->Find(mo, mp, no, type);
 
- 			static auto InsertAlarmSetToDB = [](string& mo, string& mp, uint8_t no, eZL_ALARMTYPE type, string& conf) {
 
- 				time_t tt;
 
- 				time(&tt);
 
- 				CString sql = fmt::format("INSERT INTO[rm_alarm_set]([mo], [mp], [no], [type], [conf], [time]) VALUES('{}', '{}', {}, {}, '{}', '{}')",
 
- 					mo, mp, no, uint8_t(type), conf, tt).c_str();
 
- 				if (FALSE == CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 				{
 
- 					ASSERT(0);
 
- 					SPDLOG_ERROR("插入语句执行错误:{}", sql);
 
- 					return FALSE;
 
- 				}
 
- 				return TRUE;
 
- 			};
 
- 			static auto UpdateAlarmSetToDB = [](string& mo, string& mp, uint8_t no, eZL_ALARMTYPE type, string& conf) {
 
- 				time_t tt;
 
- 				time(&tt);
 
- 				CString sql = fmt::format("UPDATE rm_alarm_set SET [conf] = '{}',[time] = {} WHERE mo='{}' AND mp='{}' AND no = {} AND type = {}",
 
- 					conf, tt, mo, mp, no, uint8_t(type)).c_str();
 
- 				if (FALSE == CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 				{
 
- 					ASSERT(0);
 
- 					SPDLOG_ERROR("更新语句执行错误:{}", sql);
 
- 					return FALSE;
 
- 				}
 
- 				return TRUE;
 
- 			};
 
- 			string strConfig;
 
- 			Array conf_array;
 
- 			Object conf_obj;
 
- 			if (type == eZL_ALARMTYPE::MAX_OVER_LIMIT || type == eZL_ALARMTYPE::FRICTION_OVER_LIMIT)
 
- 			{
 
- 				conf_array = obj.get<Array>("conf");
 
- 				strConfig = conf_array.json();
 
- 			}
 
- 			else if (type == eZL_ALARMTYPE::SUOBI_LOCK_LIMIT || type == eZL_ALARMTYPE::CONVERT_LIMIT)
 
- 			{
 
- 				conf_obj = obj.get<Object>("conf");
 
- 				strConfig = conf_obj.json();
 
- 			}
 
- 			else
 
- 				ASSERT(FALSE);
 
- 			if (pBaseInfo == nullptr)
 
- 			{//不存在,新增
 
- 				//插入数据库
 
- 				if (FALSE == InsertAlarmSetToDB(mo, mp, no, type, strConfig))
 
- 					break;
 
- 				switch (type)
 
- 				{
 
- 				case eZL_ALARMTYPE::MAX_OVER_LIMIT:
 
- 				{
 
- 					auto pInfo = new MAX_OVER_LIMIT_INFO;
 
- 					pBaseInfo = pInfo;
 
- 					pInfo->no = no;
 
- 					pInfo->type = type;
 
- 					bool enable = false;
 
- 					short alarm_high_limit = MAXSHORT;
 
- 					short warn_high_limit = MAXSHORT;
 
- 					short f_alarm_high_limit = MAXSHORT;
 
- 					short f_warn_high_limit = MAXSHORT;
 
- 					size_t n = conf_array.size();
 
- 					for (size_t i = 0; i < n; i++)
 
- 					{
 
- 						auto obj = conf_array.get<Object>(i);
 
- 						auto key = obj.get<string>("name");
 
- 						auto value = obj.get<string>("val");
 
- 						if (key.compare("enable") == 0)
 
- 						{
 
- 							enable = (value.compare("true") == 0);
 
- 						}
 
- 						else if (key.compare("lock_alarm_high_limit") == 0)
 
- 						{
 
- 							alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("lock_warn_high_limit") == 0)
 
- 						{
 
- 							warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("d_alarm_high_limit") == 0)
 
- 						{
 
- 							alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("d_warn_high_limit") == 0)
 
- 						{
 
- 							warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("f_alarm_high_limit") == 0)
 
- 						{
 
- 							f_alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("f_warn_high_limit") == 0)
 
- 						{
 
- 							f_warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("keep_alarm_high_limit") == 0)
 
- 						{
 
- 							f_alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("keep_warn_high_limit") == 0)
 
- 						{
 
- 							f_warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else
 
- 						{
 
- 							ASSERT(0);
 
- 						}
 
- 					}
 
- 					pInfo->alarm_high_limit = alarm_high_limit;
 
- 					pInfo->warn_high_limit = warn_high_limit;
 
- 					pInfo->f_alarm_high_limit = f_alarm_high_limit;
 
- 					pInfo->f_warn_high_limit = f_warn_high_limit;
 
- 					CResistAlarmMng::Instance()->Insert(mo, mp, no, uint8_t(type), pInfo);
 
- 				}
 
- 					break;
 
- 				case eZL_ALARMTYPE::FRICTION_OVER_LIMIT:
 
- 				{
 
- 					auto pInfo = new FRICTION_OVER_LIMIT_INFO;
 
- 					pBaseInfo = pInfo;
 
- 					pInfo->no = no;
 
- 					pInfo->type = type;
 
- 					size_t n = conf_array.size();
 
- 					for (size_t i = 0; i < n; i++)
 
- 					{
 
- 						auto obj = conf_array.get<Object>(i);
 
- 						auto name = obj.get<string>("name");
 
- 						auto val = obj.get<string>("val");
 
- 						if (name.compare("enable") == 0)
 
- 						{
 
- 							pInfo->enable = val.compare("true") == 0 ? 1 : 0;
 
- 						}
 
- 						else if (name.compare("up_alarm_low_limit") == 0)
 
- 						{
 
- 							pInfo->up_alarm_low_limit = atoi(val.c_str());
 
- 						}
 
- 						else if (name.compare("up_warn_low_limit") == 0)
 
- 						{
 
- 							pInfo->up_warn_low_limit = atoi(val.c_str());
 
- 						}
 
- 						else if (name.compare("dw_alarm_high_limit") == 0)
 
- 						{
 
- 							pInfo->dw_alarm_high_limit = atoi(val.c_str());
 
- 						}
 
- 						else if (name.compare("dw_warn_high_limit") == 0)
 
- 						{
 
- 							pInfo->dw_warn_high_limit = atoi(val.c_str());
 
- 						}
 
- 						else
 
- 							ASSERT(0);
 
- 					}
 
- 					CResistAlarmMng::Instance()->Insert(mo, mp, no, uint8_t(type), pInfo);
 
- 				}
 
- 					break;
 
- 				case eZL_ALARMTYPE::SUOBI_LOCK_LIMIT:
 
- 				{
 
- 					auto pInfo = new SUOBI_OVER_LIMIT_INFO;
 
- 					pBaseInfo = pInfo;
 
- 					pInfo->no = no;
 
- 					pInfo->type = type;
 
- 					pInfo->enable = conf_obj.get<Boolean>("enable");
 
- 					pInfo->alarm_low_limit = conf_obj.get<Number>("alarm_low_limit");
 
- 					pInfo->warn_low_limit = conf_obj.get<Number>("warn_low_limit");
 
- 					pInfo->alarm_high_limit = conf_obj.get<Number>("alarm_high_limit");
 
- 					pInfo->warn_high_limit = conf_obj.get<Number>("warn_high_limit");
 
- 					CResistAlarmMng::Instance()->Insert(mo, mp, no, uint8_t(type), pInfo);
 
- 				}
 
- 					break;
 
- 				case eZL_ALARMTYPE::CONVERT_LIMIT:
 
- 				{
 
- 					auto pInfo = new CONVERT_RESIST_OVER_LIMIT;
 
- 					pBaseInfo = pInfo;
 
- 					pInfo->no = no;
 
- 					pInfo->type = type;
 
- 					pInfo->enable = conf_obj.get<Boolean>("enable");
 
- 					pInfo->dw_alarm_low_limit = conf_obj.get<Number>("dw_alarm_low_limit");
 
- 					pInfo->dw_warn_low_limit = conf_obj.get<Number>("dw_warn_low_limit");
 
- 					pInfo->up_alarm_high_limit = conf_obj.get<Number>("up_alarm_high_limit");
 
- 					pInfo->up_warn_high_limit = conf_obj.get<Number>("up_warn_high_limit");
 
- 					CResistAlarmMng::Instance()->Insert(mo, mp, no, uint8_t(type), pInfo);
 
- 				}
 
- 					break;
 
- 				default:
 
- 					ASSERT(0);
 
- 					break;
 
- 				}
 
- 			}
 
- 			else
 
- 			{//存在 对比数值
 
- 				switch (type)
 
- 				{
 
- 				case eZL_ALARMTYPE::MAX_OVER_LIMIT:
 
- 				{
 
- 					bool enable = false;
 
- 					short alarm_high_limit = MAXSHORT;
 
- 					short warn_high_limit = MAXSHORT;
 
- 					short f_alarm_high_limit = MAXSHORT;
 
- 					short f_warn_high_limit = MAXSHORT;
 
- 					size_t n = conf_array.size();
 
- 					for (size_t i = 0; i < n; i++)
 
- 					{
 
- 						auto obj = conf_array.get<Object>(i);
 
- 						auto key = obj.get<string>("name");
 
- 						auto value = obj.get<string>("val");
 
- 						if (key.compare("enable") == 0)
 
- 						{
 
- 							enable = (value.compare("true") == 0);
 
- 						}
 
- 						else if (key.compare("lock_alarm_high_limit") == 0)
 
- 						{
 
- 							alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("lock_warn_high_limit") == 0)
 
- 						{
 
- 							warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("d_alarm_high_limit") == 0)
 
- 						{
 
- 							alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("d_warn_high_limit") == 0)
 
- 						{
 
- 							warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("f_alarm_high_limit") == 0)
 
- 						{
 
- 							f_alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("f_warn_high_limit") == 0)
 
- 						{
 
- 							f_warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("keep_alarm_high_limit") == 0)
 
- 						{
 
- 							f_alarm_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else if (key.compare("keep_warn_high_limit") == 0)
 
- 						{
 
- 							f_warn_high_limit = atoi(value.c_str());
 
- 						}
 
- 						else
 
- 						{
 
- 							ASSERT(0);
 
- 						}
 
- 					}
 
- 					auto pInfo = (MAX_OVER_LIMIT_INFO*)pBaseInfo;
 
- 					if (enable != pInfo->enable || alarm_high_limit != pInfo->alarm_high_limit || warn_high_limit != pInfo->warn_high_limit ||
 
- 						f_alarm_high_limit != pInfo->f_alarm_high_limit || f_warn_high_limit != pInfo->f_warn_high_limit)
 
- 					{
 
- 						if (UpdateAlarmSetToDB(mo, mp, no, type, strConfig))
 
- 						{
 
- 							pInfo->alarm_high_limit = alarm_high_limit;
 
- 							pInfo->warn_high_limit = warn_high_limit;
 
- 							pInfo->f_alarm_high_limit = f_alarm_high_limit;
 
- 							pInfo->f_warn_high_limit = f_warn_high_limit;
 
- 							pInfo->enable = enable;
 
- 						}
 
- 					}
 
- 				}
 
- 					break;
 
- 				case eZL_ALARMTYPE::FRICTION_OVER_LIMIT:
 
- 				{
 
- 					bool enable = false;
 
- 					short up_alarm_low_limit = MAXSHORT;
 
- 					short up_warn_low_limit = MAXSHORT;
 
- 					short dw_alarm_high_limit = MAXSHORT;
 
- 					short dw_warn_high_limit = MAXSHORT;
 
- 					size_t n = conf_array.size();
 
- 					for (size_t i = 0; i < n; i++)
 
- 					{
 
- 						auto obj = conf_array.get<Object>(i);
 
- 						auto name = obj.get<string>("name");
 
- 						auto val = obj.get<string>("val");
 
- 						if (name.compare("enable") == 0)
 
- 						{
 
- 							enable = val.compare("true") == 0 ? 1 : 0;
 
- 						}
 
- 						else if (name.compare("up_alarm_low_limit") == 0)
 
- 						{
 
- 							up_alarm_low_limit = atoi(val.c_str());
 
- 						}
 
- 						else if (name.compare("up_warn_low_limit") == 0)
 
- 						{
 
- 							up_warn_low_limit = atoi(val.c_str());
 
- 						}
 
- 						else if (name.compare("dw_alarm_high_limit") == 0)
 
- 						{
 
- 							dw_alarm_high_limit = atoi(val.c_str());
 
- 						}
 
- 						else if (name.compare("dw_warn_high_limit") == 0)
 
- 						{
 
- 							dw_warn_high_limit = atoi(val.c_str());
 
- 						}
 
- 						else
 
- 							ASSERT(0);
 
- 					}
 
- 					auto pInfo = (FRICTION_OVER_LIMIT_INFO*)pBaseInfo;
 
- 					if (enable != pInfo->enable || up_alarm_low_limit != pInfo->up_alarm_low_limit || up_warn_low_limit != pInfo->up_warn_low_limit ||
 
- 						dw_alarm_high_limit != pInfo->dw_alarm_high_limit || dw_warn_high_limit != pInfo->dw_warn_high_limit)
 
- 					{
 
- 						if (UpdateAlarmSetToDB(mo, mp, no, type, strConfig))
 
- 						{
 
- 							pInfo->up_alarm_low_limit = up_alarm_low_limit;
 
- 							pInfo->up_warn_low_limit = up_warn_low_limit;
 
- 							pInfo->dw_alarm_high_limit = dw_alarm_high_limit;
 
- 							pInfo->dw_warn_high_limit = dw_warn_high_limit;
 
- 							pInfo->enable = enable;
 
- 						}
 
- 					}
 
- 				}
 
- 					break;
 
- 				case eZL_ALARMTYPE::SUOBI_LOCK_LIMIT:
 
- 				{
 
- 					auto pInfo = (SUOBI_OVER_LIMIT_INFO*)pBaseInfo;
 
- 					bool enable = conf_obj.get<Boolean>("enable");
 
- 					int alarm_low_limit = conf_obj.get<Number>("alarm_low_limit");
 
- 					int warn_low_limit = conf_obj.get<Number>("warn_low_limit");
 
- 					int alarm_high_limit = conf_obj.get<Number>("alarm_high_limit");
 
- 					int warn_high_limit = conf_obj.get<Number>("warn_high_limit");
 
- 					if (enable != pInfo->enable || alarm_low_limit != pInfo->alarm_low_limit || warn_low_limit != pInfo->warn_low_limit ||
 
- 						alarm_high_limit != pInfo->alarm_high_limit || warn_high_limit != pInfo->warn_high_limit)
 
- 					{
 
- 						if (UpdateAlarmSetToDB(mo, mp, no, type, strConfig))
 
- 						{
 
- 							pInfo->alarm_low_limit = alarm_low_limit;
 
- 							pInfo->warn_low_limit = warn_low_limit;
 
- 							pInfo->alarm_high_limit = alarm_high_limit;
 
- 							pInfo->warn_high_limit = warn_high_limit;
 
- 							pInfo->enable = enable;
 
- 						}
 
- 					}
 
- 				}
 
- 					break;
 
- 				case eZL_ALARMTYPE::CONVERT_LIMIT:
 
- 				{
 
- 					auto pInfo = (CONVERT_RESIST_OVER_LIMIT*)pBaseInfo;
 
- 					bool enable = conf_obj.get<Boolean>("enable");
 
- 					int dw_alarm_low_limit = conf_obj.get<Number>("dw_alarm_low_limit");
 
- 					int dw_warn_low_limit = conf_obj.get<Number>("dw_warn_low_limit");
 
- 					int up_alarm_high_limit = conf_obj.get<Number>("up_alarm_high_limit");
 
- 					int up_warn_high_limit = conf_obj.get<Number>("up_warn_high_limit");
 
- 					if (enable != pInfo->enable || dw_alarm_low_limit != pInfo->dw_alarm_low_limit || dw_warn_low_limit != pInfo->dw_warn_low_limit ||
 
- 						up_alarm_high_limit != pInfo->up_alarm_high_limit || up_warn_high_limit != pInfo->up_warn_high_limit)
 
- 					{
 
- 						if (UpdateAlarmSetToDB(mo, mp, no, type, strConfig))
 
- 						{
 
- 							pInfo->dw_alarm_low_limit = dw_alarm_low_limit;
 
- 							pInfo->dw_warn_low_limit = dw_warn_low_limit;
 
- 							pInfo->up_alarm_high_limit = up_alarm_high_limit;
 
- 							pInfo->up_warn_high_limit = up_warn_high_limit;
 
- 							pInfo->enable = enable;
 
- 						}
 
- 					}
 
- 				}
 
- 					break;
 
- 				default:
 
- 					ASSERT(0);
 
- 					break;
 
- 				}
 
- 			}
 
- 		}
 
- 	} while (false);
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	return bRet;
 
- }
 
- BOOL CLNHandle::HandleMove(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	BOOL bRet = false;
 
- 	do {
 
- 		Array arr;
 
- 		arr.parse(string(json, json_len));
 
- 		if (arr.empty())
 
- 		{
 
- 			ASSERT(0);
 
- 			break;
 
- 		}
 
- 		size_t n = arr.size();
 
- 		CString sql;
 
- 		for (int i = 0; i < n; i++)
 
- 		{
 
- 			auto obj = arr.get<Object>(i);
 
- 			auto mo = obj.get<string>("mo");
 
- 			auto mp = obj.get<string>("mp");
 
- 			auto show_time = obj.get<string>("show_time");
 
- 			auto start_time = obj.get<string>("start_time");
 
- 			auto end_time = obj.get<string>("end_time");
 
- 			auto mark = obj.get<string>("mark");
 
- 			int curr_val = obj.get<Number>("curr_val");
 
- 			int show_val = obj.get<Number>("show_val");
 
- 			uint8_t idx = obj.get<Number>("idx");
 
- 			uint8_t posi = obj.get<Number>("posi");
 
- 			int year, month, day;
 
- 			auto num = sscanf_s(show_time.c_str(), "%d-%d-%d ", &year, &month, &day);
 
- 			auto tablename = fmt::format("rm_move_{:0>4}{:0>2}", year, month);
 
- 			sql += fmt::format("IF NOT EXISTS (SELECT TOP 1 * FROM {0} WHERE mo = '{1}' and mp = '{2}' and show_time = '{3}')\
 
- 				BEGIN\
 
- 				INSERT INTO {0}([mo], [mp], [show_time], [start_time], [end_time], [curr_val], [show_val], [idx], [posi], [mark])\
 
- 				VALUES('{1}', '{2}', '{3}', '{4}', '{5}', {6}, {7}, {8}, {9}, '{10}')\
 
- 				END ", tablename, mo, mp, show_time, start_time, end_time, curr_val, show_val, idx, posi, mark).c_str();
 
- 		}
 
- 		if (CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 		{
 
- 			bRet = true;
 
- 			SPDLOG_INFO("{} 同步move {}条记录,语句长度:{}", pContext->GetIPAdressNew(), n, sql.GetLength());
 
- 		}
 
- 		else
 
- 			SPDLOG_ERROR("{} 同步move {}条记录失败!语句长度:{}", pContext->GetIPAdressNew(), n, sql.GetLength());
 
- 	} while (false);
 
- 	
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	return bRet;
 
- }
 
- BOOL CLNHandle::HandleAlarmData(LPHJDATAHEAD2 lpHead, char* json, int json_len, CLNContext* pContext)
 
- {
 
- 	BOOL bRet = false;
 
- 	do {
 
- 		Array arr;
 
- 		arr.parse(string(json, json_len));
 
- 		if (arr.empty())
 
- 		{
 
- 			ASSERT(0);
 
- 			break;
 
- 		}
 
- 		const OPT_TYPE  opt_type = lpHead->datainfo.opt;
 
- 		size_t n = arr.size();
 
- 		CString sql;
 
- 		ALARM_INFO* pInfo = nullptr;
 
- 		for (int i = 0; i < n; i++)
 
- 		{
 
- 			auto obj = arr.get<Object>(i);
 
- 			auto event_id = obj.get<string>("event_id");
 
- 			if (opt_type == OPT_TYPE::OPT_ADD)
 
- 			{
 
- 				pInfo = new ALARM_INFO;
 
- 				pInfo->event_id = event_id;
 
- 				auto pResistServer = CResistAlarmMng::Instance();
 
- 				lock_guard<mutex> lock(pResistServer->m_mtxAlarm);
 
- 				pResistServer->m_lstUnConfirmAlarm.push_back(pInfo);
 
- 			}
 
- 			else
 
- 			{
 
- 				//TODO
 
- 				continue;
 
- 			}
 
- 			pInfo->id = obj.get<Number>("id");
 
- 			pInfo->mo = obj.get<string>("mo");
 
- 			pInfo->mp = obj.get<string>("mp");
 
- 			pInfo->no = obj.get<Number>("no");
 
- 			pInfo->type = eZL_ALARMTYPE(obj.get<Number>("type"));
 
- 			pInfo->level = obj.get<Number>("level");
 
- 			auto alarm_time = obj.get<string>("time");
 
- 			//int year, month, day, hour, min, second;
 
- 			//auto num = sscanf_s(alarm_time.c_str(), "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &min, &second);
 
- 			pInfo->desc = obj.get<string>("desc");
 
- 			pInfo->suggest = obj.get<string>("suggest");
 
- 			pInfo->val = obj.get<Number>("val");
 
- 			pInfo->ack_result = obj.get<Number>("ack_result");
 
- 			pInfo->ack_name = obj.get<string>("ack_name");
 
- 			pInfo->ack_time = obj.get<Number>("ack_time");
 
- 			pInfo->rel_id = obj.get<string>("rel_id");
 
- 			CString ss;
 
- 			if (opt_type == OPT_TYPE::OPT_ADD)
 
- 			{
 
- 				ss.Format("INSERT INTO [rm_alarm]([ID],[mo],[mp],[no],[type],[occur_time],[level],[desc],[suggest],[val],[event_id],[rel_id]) "\
 
- 					"VALUES(%d, '%s', '%s', %d, %d, '%s', %d, '%s', '%s', %d, '%s', '%s');",
 
- 					pInfo->id, pInfo->mo.c_str(), pInfo->mp.c_str(), pInfo->no, pInfo->type,
 
- 					alarm_time.c_str(), pInfo->level, pInfo->desc.c_str(), pInfo->suggest.c_str(), pInfo->val,
 
- 					pInfo->event_id.c_str(), pInfo->rel_id.c_str());
 
- 				sql += ss;
 
- 			}
 
- 		}
 
- 		if (CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 		{
 
- 			bRet = true;
 
- 			SPDLOG_INFO("{} 新增 alarm {}条记录,语句长度:{}", pContext->GetIPAdressNew(), n, sql.GetLength());
 
- 		}
 
- 		else
 
- 			SPDLOG_ERROR("{} 新增 alarm {}条记录失败!语句长度:{}", pContext->GetIPAdressNew(), n, sql.GetLength());
 
- 	} while (false);
 
- 	HandleRecvPack(pContext, lpHead->protocol, lpHead->packno);
 
- 	return bRet;
 
- }
 
- void CLNHandle::CompareMoSync(jsonxx::Object obj, CMonitorObject *pObject)
 
- {
 
- 	using namespace jsonxx;
 
- 	auto id = obj.get<string>("id");
 
- 	auto name = obj.get<string>("name");
 
- 	auto type = obj.get<string>("type");
 
- 	auto up = obj.get<string>("up");
 
- 	ASSERT(up.compare(pObject->id) == 0);
 
- 	bool bHave = false;
 
- 	CMonitorObject* pObj = nullptr;
 
- 	for (auto& it : pObject->m_lstMo)
 
- 	{
 
- 		if (it->id.compare(id) == 0)
 
- 		{
 
- 			bHave = true;
 
- 			if (name.compare(it->name) != 0)  //修改名称
 
- 			{
 
- 				CMonitorObjectMng::ReNameMO(id, name);
 
- 				it->name = name;
 
- 			}
 
- 			pObj = it;
 
- 			break;
 
- 		}
 
- 	}
 
- 	if (!bHave)
 
- 	{
 
- 		if (type.compare("mo.mp") == 0)
 
- 			CMonitorObjectMng::AddMO2(id, name, type, up);
 
- 		else
 
- 			CMonitorObjectMng::AddMO(id, name, type, up);
 
- 		pObj = new CMonitorObject;
 
- 		pObj->id = id;
 
- 		pObj->name = name;
 
- 		pObj->type = type;
 
- 		pObj->up = up;
 
- 		pObject->m_lstMo.push_back(pObj);
 
- 	}
 
- 	
 
- 	if (!obj.has<Array>("child"))
 
- 		return;
 
- 	auto child = obj.get<jsonxx::Array>("child");
 
- 	auto n = child.size();
 
- 	for (int i = 0; i < n; i++)
 
- 	{
 
- 		auto o = child.get<Object>(i);
 
- 		CompareMoSync(o, pObj);
 
- 	}
 
- }
 
- void CLNHandle::CompareMpSync(jsonxx::Object obj)
 
- {
 
- 	auto mo = obj.get<string>("mo");
 
- 	auto mp = obj.get<string>("mp");
 
- 	auto name1 = obj.get<string>("name1");
 
- 	auto name2 = obj.get<string>("name2");
 
- 	auto name3 = obj.get<string>("name3");
 
- 	auto direct1 = obj.get<string>("direct1");
 
- 	auto direct2 = obj.get<string>("direct2");
 
- 	auto station = obj.get<string>("station");
 
- 	auto mo_name = obj.get<string>("mo_name");
 
- 	auto mp_name = obj.get<string>("mp_name");
 
- 	//auto taskid = fmt::format("{}.{}.{}", station, mo, mp);
 
- 	auto taskid = fmt::format("{}.{}", mo, mp);
 
- 	auto pDevice = CDeviceMng::Instance()->Find(taskid);
 
- 	if (pDevice)
 
- 	{
 
- 		if (pDevice->name1.compare(name1) == 0 && pDevice->name2.compare(name2) == 0 && pDevice->name3.compare("name3")
 
- 			&& pDevice->direct1.compare(direct1) == 0 && pDevice->direct2.compare(direct2) == 0)
 
- 			int ii = 0;
 
- 		else
 
- 		{
 
- 			//update
 
- 			CString sql = fmt::format("UPDATE rm_map SET [name1]='{}', [name2]='{}',[name3]='{}',[direct1]='{}',[direct2]='{}' WHERE [mo]='{}' AND [mp]='{}';",
 
- 				name1, name2, name3, direct1, direct2, mo, mp).c_str();
 
- 			if (!CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 			{
 
- 				SPDLOG_ERROR("语句执行错误:{}", sql);
 
- 			}
 
- 			else
 
- 			{
 
- 				pDevice->name1 = name1;
 
- 				pDevice->name2 = name2;
 
- 				pDevice->name3 = name3;
 
- 				pDevice->direct1 = direct1;
 
- 				pDevice->direct2 = direct2;
 
- 				pDevice->mo_name = mo_name;
 
- 				pDevice->mp_name = mp_name;
 
- 			}
 
- 		}
 
- 	}
 
- 	else
 
- 	{
 
- 		//new
 
- 		CString sql = fmt::format("INSERT INTO [rm_map] ([mo],[mp],[name1],[name2],[name3],[direct1],[direct2]) VALUES('{}','{}','{}','{}','{}','{}','{}');",
 
- 			mo, mp, name1, name2, name3, direct1, direct2).c_str();
 
- 		if (!CDBConnectPool::Instance()->DBExecuteSQL(sql))
 
- 		{
 
- 			SPDLOG_ERROR("语句执行错误:{}", sql);
 
- 		}
 
- 		//else //即使数据库执行失败,内存还是更新, 以便后面实时数据
 
- 		{
 
- 			pDevice = new CDevice(taskid, station, mo, mp);
 
- 			CDeviceMng::Instance()->Insert(pDevice);
 
- 			pDevice->name1 = name1;
 
- 			pDevice->name2 = name2;
 
- 			pDevice->name3 = name3;
 
- 			pDevice->direct1 = direct1;
 
- 			pDevice->direct2 = direct2;
 
- 			pDevice->mo_name = mo_name;
 
- 			pDevice->mp_name = mp_name;
 
- 		}
 
- 	}
 
- }
 
- BOOL CLNHandle::HandleRecvPack(CLNContext* pContext, E_ZL_PROTOCAL protocal, uint32_t packno)
 
- {
 
- 	uint8_t bSend[100] = { 0 };
 
- 	auto len = CHjDataConver::conver_sendpack(bSend, nullptr, 0, 0, packno, protocal, OR_DATA_INFO(0, 1, 1, 3, OPT_TYPE::OPT_RECV));
 
- 	auto ret = pContext->Send(bSend, len) != SOCKET_ERROR;
 
- 	//if (ret) 
 
- 	//	SPDLOG_INFO("packno:{} send", packno);
 
- 	//else
 
- 	//	SPDLOG_INFO("packno:{} send fail", packno);
 
- 	return ret;
 
- }
 
 
  |