|
|
|
|
@ -8,6 +8,9 @@
|
|
|
|
|
#include "CheckUtil.hpp"
|
|
|
|
|
#include "CheckConfigDefine.h"
|
|
|
|
|
|
|
|
|
|
// Analysis_AD_Bind 返回码: 主通道为空(配置为空或本次无匹配通道), 调用方回退执行 Analysis_AD
|
|
|
|
|
static const int AD_BIND_RE_MAIN_EMPTY = 2;
|
|
|
|
|
|
|
|
|
|
QX_Merge_Analysis::QX_Merge_Analysis()
|
|
|
|
|
{
|
|
|
|
|
m_bExit = false;
|
|
|
|
|
@ -1025,7 +1028,35 @@ int QX_Merge_Analysis::Analysis_QXtype(ALL_Qx_DataList *pALLTypeqxList, int qx_i
|
|
|
|
|
{
|
|
|
|
|
if(m_pbaseCheckFunction->ad_check.analysis_bind.bUse)
|
|
|
|
|
{
|
|
|
|
|
Analysis_AD_Bind(pALLTypeqxList, qx_idx);
|
|
|
|
|
// 主通道为空: Analysis_AD_Bind 返回回退码, 用次通道列表里的通道走 Analysis_AD 老逻辑
|
|
|
|
|
if (Analysis_AD_Bind(pALLTypeqxList, qx_idx) == AD_BIND_RE_MAIN_EMPTY)
|
|
|
|
|
{
|
|
|
|
|
// 回退过滤: 仅次通道列表(2s_second_channel + 3s_second_channel, 去重)中的通道参与
|
|
|
|
|
std::vector<std::string> fallback_channels;
|
|
|
|
|
const std::vector<std::string> &fallback_sec2 = m_pbaseCheckFunction->ad_check.analysis_bind.second_channel_2s;
|
|
|
|
|
const std::vector<std::string> &fallback_sec3 = m_pbaseCheckFunction->ad_check.analysis_bind.second_channel_3s;
|
|
|
|
|
fallback_channels.insert(fallback_channels.end(), fallback_sec2.begin(), fallback_sec2.end());
|
|
|
|
|
for (size_t k = 0; k < fallback_sec3.size(); k++)
|
|
|
|
|
{
|
|
|
|
|
if (std::find(fallback_channels.begin(), fallback_channels.end(), fallback_sec3[k]) == fallback_channels.end())
|
|
|
|
|
{
|
|
|
|
|
fallback_channels.push_back(fallback_sec3[k]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
std::string strFallbackChannels;
|
|
|
|
|
for (size_t k = 0; k < fallback_channels.size(); k++)
|
|
|
|
|
{
|
|
|
|
|
strFallbackChannels += fallback_channels[k];
|
|
|
|
|
if (k + 1 < fallback_channels.size())
|
|
|
|
|
{
|
|
|
|
|
strFallbackChannels += ",";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
m_pMergedetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD_Bind",
|
|
|
|
|
"main channel empty --> fallback Analysis_AD (only second channels: %s)",
|
|
|
|
|
fallback_channels.empty() ? "<empty>" : strFallbackChannels.c_str());
|
|
|
|
|
Analysis_AD(pALLTypeqxList, qx_idx, &fallback_channels);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
@ -1073,7 +1104,7 @@ int QX_Merge_Analysis::Judge_NG_Config()
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
|
|
|
|
|
int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx, const std::vector<std::string> *pAllowChannels)
|
|
|
|
|
{
|
|
|
|
|
AD_list.clear();
|
|
|
|
|
if (!m_pbaseCheckFunction)
|
|
|
|
|
@ -1092,6 +1123,14 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
|
|
|
|
|
{
|
|
|
|
|
QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i];
|
|
|
|
|
|
|
|
|
|
// 回退过滤: pAllowChannels 非空时仅允许列表内(次通道列表)的通道参与
|
|
|
|
|
if (pAllowChannels &&
|
|
|
|
|
std::find(pAllowChannels->begin(), pAllowChannels->end(), pQXChannelList->channel_name) == pAllowChannels->end())
|
|
|
|
|
{
|
|
|
|
|
pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD",
|
|
|
|
|
"channel %s not in allow list(fallback) --> skip", pQXChannelList->channel_name.c_str());
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (!pAd_checkParma)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
@ -1336,6 +1375,14 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
|
|
|
|
|
{
|
|
|
|
|
QX_channel_List *pQXChannelList = &pALLTypeqxList->channelqxList[i];
|
|
|
|
|
|
|
|
|
|
// 回退过滤: pAllowChannels 非空时仅允许列表内(次通道列表)的通道被判定NG
|
|
|
|
|
if (pAllowChannels &&
|
|
|
|
|
std::find(pAllowChannels->begin(), pAllowChannels->end(), pQXChannelList->channel_name) == pAllowChannels->end())
|
|
|
|
|
{
|
|
|
|
|
pQXChannelList->pChannelDetlog->AddCheckstr(PrintLevel_1, 3, "Analysis_AD",
|
|
|
|
|
"channel %s not in allow list(fallback) --> skip NG mark", pQXChannelList->channel_name.c_str());
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (!pAd_checkParma->bOpen)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
@ -1546,6 +1593,12 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
|
|
|
|
|
m_pMergedetlog->AddCheckstr(PrintLevel_2, 3, "Analysis_AD_Bind", "main_channel %d second_channel %d",
|
|
|
|
|
(int)main_channel_s_qxList.size(), (int)second_channel_s_qxList.size());
|
|
|
|
|
|
|
|
|
|
/* 主通道为空(配置为空或本次无匹配通道): 返回回退码, 由调用方改用 Analysis_AD 老逻辑 */
|
|
|
|
|
if (main_channel_s_qxList.empty())
|
|
|
|
|
{
|
|
|
|
|
return AD_BIND_RE_MAIN_EMPTY;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 画面分析 */
|
|
|
|
|
AD_list_bind.clear();
|
|
|
|
|
for(int i_main = 0; i_main < main_channel_s_qxList.size(); i_main++)
|
|
|
|
|
|