|  | @@ -1185,7 +1185,7 @@ void CResistAlarmMng::JudgeAlarm(CResistAlarmMng* pService, RETENSION_FORCE_DROP
 | 
	
		
			
				|  |  |  								ctAlarmTime.GetAsSystemTime(pAlarm->recoveryTime);
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -							g_p315ClientManager->GetTcpClient()->SendAlarmData(zzjno, 2, CTime(pAlarmInfo->time).GetTime(), alarm_time / 1000,
 | 
	
		
			
				|  |  | +							g_p315ClientManager->GetTcpClient()->SendAlarmData(zzjno, 2, CTime(pAlarmInfo->time).GetTime(), ctAlarmTime.GetTime(),
 | 
	
		
			
				|  |  |  								pAlarmInfo->type, posi == eSuoBiPosi::SB_FIX ? eDaoChaPosi::DCP_FIX : eDaoChaPosi::DCP_INVERT, pAlarmInfo->level, pAlarm->loworhigh,
 | 
	
		
			
				|  |  |  								TIEDA_ACQ_VALUE(pAlarm->val, TIEDA_VAL_STATE::TVS_AFTER_MOVE), TIEDA_ACQ_VALUE(pAlarm->refer_val, TIEDA_VAL_STATE::TVS_AFTER_MOVE), 0);
 | 
	
		
			
				|  |  |  						}
 | 
	
	
		
			
				|  | @@ -1284,6 +1284,199 @@ void CResistAlarmMng::JudgeAlarm(CResistAlarmMng* pService, RETENSION_FORCE_DROP
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void CResistAlarmMng::JudgeAlarm(CResistAlarmMng* pService, RETENSION_FORCE_DROP* pConstRetensionForceWaveInfo, 
 | 
	
		
			
				|  |  | +	time_t show_time, int show_val, eSuoBiPosi posi, string mo, string mp, uint32_t zzjno, void* pInfo)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	ASSERT(pConstRetensionForceWaveInfo);
 | 
	
		
			
				|  |  | +	ST_MOMP_INFO* pMoMpInfo = (ST_MOMP_INFO*)pInfo;
 | 
	
		
			
				|  |  | +	CTime ctShowTime(show_time / 1000);
 | 
	
		
			
				|  |  | +	bool bSkylight = CSkylightMng::GetInstance()->IsSkylight(&ctShowTime);
 | 
	
		
			
				|  |  | +	int nOldVal = 0;
 | 
	
		
			
				|  |  | +	if (bSkylight && show_val == 0)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if (posi == eSuoBiPosi::SB_FIX)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			pMoMpInfo->fix_const_retension_force = INT_MIN;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			pMoMpInfo->invert_const_retension_force = INT_MIN;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	else
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if (posi == eSuoBiPosi::SB_FIX)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			nOldVal = pMoMpInfo->fix_const_retension_force;
 | 
	
		
			
				|  |  | +			if (nOldVal == INT_MIN)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				pMoMpInfo->fix_const_retension_force = show_val;
 | 
	
		
			
				|  |  | +				return;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			nOldVal = pMoMpInfo->invert_const_retension_force;
 | 
	
		
			
				|  |  | +			if (nOldVal == INT_MIN)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				pMoMpInfo->invert_const_retension_force = show_val;
 | 
	
		
			
				|  |  | +				return;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	ASSERT(pConstRetensionForceWaveInfo);
 | 
	
		
			
				|  |  | +	if (pConstRetensionForceWaveInfo->enable == false) return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (nOldVal != INT_MIN)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		int nRatio = show_val * 100 / nOldVal;
 | 
	
		
			
				|  |  | +		eLowHigh loworhigh = eLowHigh::LH_UNKNOWN;
 | 
	
		
			
				|  |  | +		int alarm_refer = 0;
 | 
	
		
			
				|  |  | +		if (nOldVal != 0)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			//下降20%或上升40% 进行预警
 | 
	
		
			
				|  |  | +			if (pConstRetensionForceWaveInfo->dw_alarm_low_drop != INT_MIN && nRatio <= (100 - pConstRetensionForceWaveInfo->dw_alarm_low_drop))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				loworhigh = eLowHigh::LH_LOW;
 | 
	
		
			
				|  |  | +				alarm_refer = nOldVal * (100 - pConstRetensionForceWaveInfo->dw_alarm_low_drop) / 100;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			else if (nRatio >= (100 + pConstRetensionForceWaveInfo->alarm_high_percent))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				loworhigh = eLowHigh::LH_HIGH;
 | 
	
		
			
				|  |  | +				alarm_refer = nOldVal * (100 + pConstRetensionForceWaveInfo->alarm_high_percent) / 100;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		ALARM_INFO* pAlarmInfo = nullptr;
 | 
	
		
			
				|  |  | +		CTime ctAlarmTime(show_time / 1000);
 | 
	
		
			
				|  |  | +		bool bNew = false;
 | 
	
		
			
				|  |  | +		//产生预警
 | 
	
		
			
				|  |  | +		if (loworhigh != eLowHigh::LH_UNKNOWN)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			//查找是否原有的报警已存在
 | 
	
		
			
				|  |  | +			int level = 0;// 预警
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				std::lock_guard<mutex> lock(pService->m_mtxAlarm);
 | 
	
		
			
				|  |  | +				for (const auto& alarm : pService->m_lstUnConfirmAlarm)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					if (alarm->no == (uint8_t)posi && alarm->type == eZL_ALARMTYPE::RETENSION_FORCE
 | 
	
		
			
				|  |  | +						&& level == alarm->level && alarm->recoveryTime.wYear < 2000 //预警和报警单独计算
 | 
	
		
			
				|  |  | +						&& alarm->mo.compare(mo) == 0 && alarm->mp.compare(mp) == 0)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pAlarmInfo = alarm;
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (pAlarmInfo == nullptr)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				bNew = true;
 | 
	
		
			
				|  |  | +				pAlarmInfo = new ALARM_INFO;
 | 
	
		
			
				|  |  | +				pAlarmInfo->event_id = hjfunc_GetGUID();
 | 
	
		
			
				|  |  | +				pAlarmInfo->id = ++pService->m_nAlarmID;
 | 
	
		
			
				|  |  | +				pAlarmInfo->level = level;// 预警
 | 
	
		
			
				|  |  | +				pAlarmInfo->mo = mo;
 | 
	
		
			
				|  |  | +				pAlarmInfo->mp = mp;
 | 
	
		
			
				|  |  | +				pAlarmInfo->no = (uint8_t)posi;
 | 
	
		
			
				|  |  | +				ctAlarmTime.GetAsSystemTime(pAlarmInfo->time);
 | 
	
		
			
				|  |  | +				pAlarmInfo->time.wMilliseconds = show_time % 1000;
 | 
	
		
			
				|  |  | +				pAlarmInfo->type = eZL_ALARMTYPE::RETENSION_FORCE;
 | 
	
		
			
				|  |  | +				pAlarmInfo->val = show_val;
 | 
	
		
			
				|  |  | +				pAlarmInfo->refer_val = alarm_refer;
 | 
	
		
			
				|  |  | +				pAlarmInfo->posi = (posi == eSuoBiPosi::SB_FIX ? eDaoChaPosi::DCP_FIX : eDaoChaPosi::DCP_INVERT);
 | 
	
		
			
				|  |  | +				pAlarmInfo->loworhigh = loworhigh;
 | 
	
		
			
				|  |  | +				pAlarmInfo->zzjno = zzjno;
 | 
	
		
			
				|  |  | +				pAlarmInfo->sunroof = CSkylightMng::GetInstance()->IsSkylight(&pAlarmInfo->time);
 | 
	
		
			
				|  |  | +				char szInfo[200] = { 0 };
 | 
	
		
			
				|  |  | +				sprintf_s(szInfo, sizeof(szInfo), "保持力异常报警,位置:%s, 报警值为%dN, 上一次值:%dN, 参考值为%dN",
 | 
	
		
			
				|  |  | +					posi == eSuoBiPosi::SB_FIX ? "定位" : "反位", show_val, nOldVal, alarm_refer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				pAlarmInfo->desc = szInfo;
 | 
	
		
			
				|  |  | +				lock_guard<mutex> lock(pService->m_mtxAlarm);
 | 
	
		
			
				|  |  | +				pService->m_lstUnConfirmAlarm.push_back(pAlarmInfo);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//主动推送315
 | 
	
		
			
				|  |  | +			if (bNew)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				g_p315ClientManager->GetTcpClient()->SendAlarmData(zzjno, 1, CTime(pAlarmInfo->time).GetTime(), 0xFFFFFFFF,
 | 
	
		
			
				|  |  | +					pAlarmInfo->type, posi == eSuoBiPosi::SB_FIX ? eDaoChaPosi::DCP_FIX : eDaoChaPosi::DCP_INVERT, pAlarmInfo->level, loworhigh,
 | 
	
		
			
				|  |  | +					TIEDA_ACQ_VALUE(pAlarmInfo->val, TIEDA_VAL_STATE::TVS_AFTER_MOVE), TIEDA_ACQ_VALUE(pAlarmInfo->refer_val, TIEDA_VAL_STATE::TVS_AFTER_MOVE), 0);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (bNew) 
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				CString sql;
 | 
	
		
			
				|  |  | +				sql.Format("INSERT INTO [rm_alarm]([ID],[mo],[mp],[no],[type],[occur_time],[level],[desc],[suggest],[val],[event_id],[rel_id],posi,loworhigh,referval,[sunroof]) "\
 | 
	
		
			
				|  |  | +					"VALUES(%d, '%s', '%s', %d, %d, '%s', %d, '%s', '%s', %d, '%s', '%s',%d,%d,%d,%d);",
 | 
	
		
			
				|  |  | +					pAlarmInfo->id, pAlarmInfo->mo.c_str(), pAlarmInfo->mp.c_str(), pAlarmInfo->no, pAlarmInfo->type,
 | 
	
		
			
				|  |  | +					ctAlarmTime.Format("%Y-%m-%d %H:%M:%S"), pAlarmInfo->level, pAlarmInfo->desc.c_str(), pAlarmInfo->suggest.c_str(), pAlarmInfo->val,
 | 
	
		
			
				|  |  | +					pAlarmInfo->event_id.c_str(), pAlarmInfo->rel_id.c_str(), uint8_t(pAlarmInfo->posi), uint8_t(pAlarmInfo->loworhigh), pAlarmInfo->refer_val,
 | 
	
		
			
				|  |  | +					pAlarmInfo->sunroof);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (false == CDBConnectPool::Instance()->DBExecuteSQL(sql))
 | 
	
		
			
				|  |  | +					CSimpleLog::Error("执行语句失败" + sql);
 | 
	
		
			
				|  |  | +				else
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					uint8_t* pack = nullptr; int len = 0;
 | 
	
		
			
				|  |  | +					auto packno = CResistAlarmMng::GeneralNewAlarmData(pAlarmInfo, &pack, &len);
 | 
	
		
			
				|  |  | +					if (packno) CSuperManager::Instance()->SendPack(pack, len, packno, E_ZL_PROTOCAL::ZL_ALARM_DATA, true);
 | 
	
		
			
				|  |  | +					delete[] pack;
 | 
	
		
			
				|  |  | +					pack = nullptr;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			//恢复
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				std::lock_guard<mutex> lock(pService->m_mtxAlarm);
 | 
	
		
			
				|  |  | +				for (auto it = pService->m_lstUnConfirmAlarm.begin(); it != pService->m_lstUnConfirmAlarm.end();)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					auto pAlarm = *it;
 | 
	
		
			
				|  |  | +					if (pAlarm->no == (uint8_t)posi && pAlarm->type == eZL_ALARMTYPE::RETENSION_FORCE && pAlarm->recoveryTime.wYear < 2000 //预警和报警单独计算
 | 
	
		
			
				|  |  | +						&& pAlarm->mo.compare(mo) == 0 && pAlarm->mp.compare(mp) == 0)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pAlarmInfo = pAlarm;
 | 
	
		
			
				|  |  | +						if (pAlarmInfo)
 | 
	
		
			
				|  |  | +						{
 | 
	
		
			
				|  |  | +							//恢复
 | 
	
		
			
				|  |  | +							//1. 更新数据库
 | 
	
		
			
				|  |  | +							//2. 更新内存数据
 | 
	
		
			
				|  |  | +							//3. 上送恢复消息
 | 
	
		
			
				|  |  | +							if (ctAlarmTime.GetTime() == 0) ctAlarmTime = CTime::GetCurrentTime();
 | 
	
		
			
				|  |  | +							string recovery_time = ctAlarmTime.Format("%Y-%m-%d %H:%M:%S");
 | 
	
		
			
				|  |  | +							CString sql;
 | 
	
		
			
				|  |  | +							sql.Format("UPDATE [rm_alarm] SET [recovery_time]='%s' WHERE ID = %d;", recovery_time.c_str(), pAlarmInfo->id);
 | 
	
		
			
				|  |  | +							CDBConnectPool::Instance()->DBExecuteSQL(sql);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +							if (pAlarmInfo->ack_result == 1)
 | 
	
		
			
				|  |  | +							{
 | 
	
		
			
				|  |  | +								it = pService->m_lstUnConfirmAlarm.erase(it);
 | 
	
		
			
				|  |  | +								continue;
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +							else
 | 
	
		
			
				|  |  | +							{
 | 
	
		
			
				|  |  | +								ctAlarmTime.GetAsSystemTime(pAlarm->recoveryTime);
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +							g_p315ClientManager->GetTcpClient()->SendAlarmData(zzjno, 2, CTime(pAlarmInfo->time).GetTime(), ctAlarmTime.GetTime(),
 | 
	
		
			
				|  |  | +								pAlarmInfo->type, posi == eSuoBiPosi::SB_FIX ? eDaoChaPosi::DCP_FIX : eDaoChaPosi::DCP_INVERT, pAlarmInfo->level, pAlarm->loworhigh,
 | 
	
		
			
				|  |  | +								TIEDA_ACQ_VALUE(pAlarm->val, TIEDA_VAL_STATE::TVS_AFTER_MOVE), TIEDA_ACQ_VALUE(pAlarm->refer_val, TIEDA_VAL_STATE::TVS_AFTER_MOVE), 0);
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					it++;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void CResistAlarmMng::JudgeAlarm1(CResistAlarmMng* pService, RETENSION_FORCE_DROP* pRetensionForceDropInfo, time_t show_time, int show_val, 
 | 
	
		
			
				|  |  |  	eSuoBiPosi posi, string mo, string mp, uint32_t zzjno)
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -2190,6 +2383,13 @@ void CResistAlarmMng::ThreadProcAlarmSet(DWORD_PTR param)
 | 
	
		
			
				|  |  |  				else
 | 
	
		
			
				|  |  |  					continue;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +				//zzj位置是否变化
 | 
	
		
			
				|  |  | +				bool bEPOSChanged = CMonitorObjectMng::Instance()->IsZZJEPOSChanged(momp,
 | 
	
		
			
				|  |  | +					(eSuoBiPosi)pAlarmSet->no == eSuoBiPosi::SB_FIX ? DAOCHA_POSITION::MP_FIX : DAOCHA_POSITION::MP_INVERT, tt);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				//位置变化后不能使用
 | 
	
		
			
				|  |  | +				if (bEPOSChanged) continue;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  				int  nMinVal = INT_MAX;
 | 
	
		
			
				|  |  |  				time_t tMinTime = 0;
 | 
	
		
			
				|  |  |  				{
 | 
	
	
		
			
				|  | @@ -2220,6 +2420,9 @@ void CResistAlarmMng::ThreadProcAlarmSet(DWORD_PTR param)
 | 
	
		
			
				|  |  |  				if (nMinVal != INT_MAX)
 | 
	
		
			
				|  |  |  					JudgeAlarm(pService, pAlarmSet, tMinTime, nMinVal, (eSuoBiPosi)pAlarmSet->no, pInfo->mo, pInfo->mp, pInfo->zzjno);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//清理无效位置
 | 
	
		
			
				|  |  | +			CMonitorObjectMng::Instance()->ClearZZJHistroyEPOS(tt);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	} while (pService->m_bWork);
 | 
	
	
		
			
				|  | @@ -2689,6 +2892,22 @@ void CResistAlarmMng::ThreadProcMove(DWORD_PTR param)
 | 
	
		
			
				|  |  |  					auto pFixSuobiOverInfo = (SUOBI_OVER_LIMIT_INFO*)pService->Find(mo, mp, (uint8_t)eSuoBiPosi::SB_FIX, eZL_ALARMTYPE::SUOBI_LOCK_LIMIT);
 | 
	
		
			
				|  |  |  					//反位
 | 
	
		
			
				|  |  |  					auto pInvertSuobiOverInfo = (SUOBI_OVER_LIMIT_INFO*)pService->Find(mo, mp, (uint8_t)eSuoBiPosi::SB_INVERT, eZL_ALARMTYPE::SUOBI_LOCK_LIMIT);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					//定位保持力报警设置项
 | 
	
		
			
				|  |  | +					auto pFixConstRetensionForceWaveInfo = (RETENSION_FORCE_DROP*)pService->Find(mo, mp, (uint8_t)eSuoBiPosi::SB_FIX, eZL_ALARMTYPE::RETENSION_FORCE);
 | 
	
		
			
				|  |  | +					if (pFixConstRetensionForceWaveInfo == nullptr)//默认开启
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pFixConstRetensionForceWaveInfo = new RETENSION_FORCE_DROP;
 | 
	
		
			
				|  |  | +						pService->Insert(mo, mp, (uint8_t)eSuoBiPosi::SB_FIX, (uint8_t)eZL_ALARMTYPE::RETENSION_FORCE, pFixConstRetensionForceWaveInfo);
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					//反位
 | 
	
		
			
				|  |  | +					auto pInvertConstRetensionForceWaveInfo = (RETENSION_FORCE_DROP*)pService->Find(mo, mp, (uint8_t)eSuoBiPosi::SB_INVERT, eZL_ALARMTYPE::RETENSION_FORCE);
 | 
	
		
			
				|  |  | +					if (pInvertConstRetensionForceWaveInfo == nullptr)//默认开启
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pInvertConstRetensionForceWaveInfo = new RETENSION_FORCE_DROP;
 | 
	
		
			
				|  |  | +						pService->Insert(mo, mp, (uint8_t)eSuoBiPosi::SB_INVERT, (uint8_t)eZL_ALARMTYPE::RETENSION_FORCE, pInvertConstRetensionForceWaveInfo);
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  					//获取报警设置 end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					eDaoChaPosi posiLock0;
 | 
	
	
		
			
				|  | @@ -2710,7 +2929,7 @@ void CResistAlarmMng::ThreadProcMove(DWORD_PTR param)
 | 
	
		
			
				|  |  |  							CResistAlarmMng::InsertToDBByMove(mo, mp, it.first, 0, 0,
 | 
	
		
			
				|  |  |  								(int)it.second, show_val, i, (uint8_t)eDaoChaPosi::DCP_FIX, (uint8_t)ePowerName::PN_RETENTION, fmt::format("保持力:{}", show_val));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -							//JudgeAlarm(pService, pFixSuobiOverInfo, it.first, show_val, eSuoBiPosi::SB_FIX, mo, mp, zzjno);
 | 
	
		
			
				|  |  | +							JudgeAlarm(pService, pFixConstRetensionForceWaveInfo, it.first, show_val, eSuoBiPosi::SB_FIX, mo, mp, pMompInfo->zzjno, pMompInfo);
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  						for (auto& it : maxlock1)
 | 
	
	
		
			
				|  | @@ -2728,7 +2947,7 @@ void CResistAlarmMng::ThreadProcMove(DWORD_PTR param)
 | 
	
		
			
				|  |  |  							CResistAlarmMng::InsertToDBByMove(mo, mp, it.first, 0, 0,
 | 
	
		
			
				|  |  |  								(int)it.second, show_val, i, (uint8_t)eDaoChaPosi::DCP_INVERT, (uint8_t)ePowerName::PN_RETENTION, fmt::format("保持力:{}", show_val));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -							//JudgeAlarm(pService, pFixSuobiOverInfo, it.first, show_val, eSuoBiPosi::SB_FIX, mo, mp, zzjno);
 | 
	
		
			
				|  |  | +							JudgeAlarm(pService, pInvertConstRetensionForceWaveInfo, it.first, show_val, eSuoBiPosi::SB_FIX, mo, mp, pMompInfo->zzjno, pMompInfo);
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					}
 | 
	
	
		
			
				|  | @@ -2750,7 +2969,7 @@ void CResistAlarmMng::ThreadProcMove(DWORD_PTR param)
 | 
	
		
			
				|  |  |  							CResistAlarmMng::InsertToDBByMove(mo, mp, it.first, 0, 0, (int)it.second, show_val, i,
 | 
	
		
			
				|  |  |  								(uint8_t)eDaoChaPosi::DCP_INVERT, (uint8_t)ePowerName::PN_RETENTION, fmt::format("保持力:{}", show_val));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -							//JudgeAlarm(pService, pInvertSuobiOverInfo, it.first, show_val, eSuoBiPosi::SB_INVERT, mo, mp, zzjno);
 | 
	
		
			
				|  |  | +							JudgeAlarm(pService, pInvertConstRetensionForceWaveInfo, it.first, show_val, eSuoBiPosi::SB_INVERT, mo, mp, pMompInfo->zzjno);
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  						for (auto& it : maxlock1)
 | 
	
	
		
			
				|  | @@ -2768,7 +2987,7 @@ void CResistAlarmMng::ThreadProcMove(DWORD_PTR param)
 | 
	
		
			
				|  |  |  							CResistAlarmMng::InsertToDBByMove(mo, mp, it.first, 0, 0, (int)it.second, show_val, i,
 | 
	
		
			
				|  |  |  								(uint8_t)eDaoChaPosi::DCP_FIX, (uint8_t)ePowerName::PN_RETENTION, fmt::format("保持力:{}", show_val));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -							//JudgeAlarm(pService, pFixSuobiOverInfo, it.first, show_val, eSuoBiPosi::SB_FIX, mo, mp, zzjno);
 | 
	
		
			
				|  |  | +							JudgeAlarm(pService, pFixConstRetensionForceWaveInfo, it.first, show_val, eSuoBiPosi::SB_FIX, mo, mp, pMompInfo->zzjno, pMompInfo);
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  					}
 |