diff --git a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp index 81897a9..276281a 100644 --- a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp +++ b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp @@ -16,6 +16,7 @@ #include "ZxDataWell.h" #include "ZxBaseUtil.h" +#include #include #include #include @@ -375,10 +376,10 @@ bool nmDataAnalyzeManager::readFrameworkWellCurves( return false; } - // 第一步:枚举全部压力记录,不再只取第一条。 + // 第一步:读取全部压力记录并统计非空 Code,不在读取顺序中决定身份有效性。 const ZxDataObjectList listGaugeP = pWellData->getChildren(iDataModelType::sTypeDataGaugeP); - QSet setSeenPressureCodes; + QHash mapPressureCodeCounts; for(int nIndex = 0; nIndex < listGaugeP.size(); ++nIndex) { ZxDataGaugeP* pGaugeP = dynamic_cast(listGaugeP[nIndex]); if(pGaugeP == nullptr) { @@ -391,21 +392,26 @@ bool nmDataAnalyzeManager::readFrameworkWellCurves( oRecord.sGaugeTime = pGaugeP->getGaugeTime(); oRecord.eStatus = readBlockAndClassify( pGaugeP->getGaugeData(), oRecord.vecPressurePoints); + if(!oRecord.sGaugeCode.isEmpty()) { + mapPressureCodeCounts.insert(oRecord.sGaugeCode, + mapPressureCodeCounts.value(oRecord.sGaugeCode) + 1); + } + vecPressureRecords.append(oRecord); + } - // 空 Code 或同井重复 Code 属于身份问题,覆盖内容判定结果。 + // 第二步:空 Code 或重复 Code 的全部压力记录都属于身份无效。 + for(int nIndex = 0; nIndex < vecPressureRecords.size(); ++nIndex) { + nmPressureGaugeRecord& oRecord = vecPressureRecords[nIndex]; if(oRecord.sGaugeCode.isEmpty() || - setSeenPressureCodes.contains(oRecord.sGaugeCode)) { + mapPressureCodeCounts.value(oRecord.sGaugeCode) > 1) { oRecord.eStatus = NM_GaugeRecord_InvalidIdentity; - } else { - setSeenPressureCodes.insert(oRecord.sGaugeCode); } - vecPressureRecords.append(oRecord); } - // 第二步:枚举全部流量记录,不再只取第一条。 + // 第三步:读取全部流量记录并统计非空 Code。 const ZxDataObjectList listGaugeF = pWellData->getChildren(iDataModelType::sTypeDataGaugeF); - QSet setSeenFlowCodes; + QHash mapFlowCodeCounts; for(int nIndex = 0; nIndex < listGaugeF.size(); ++nIndex) { ZxDataGaugeF* pGaugeF = dynamic_cast(listGaugeF[nIndex]); if(pGaugeF == nullptr) { @@ -427,15 +433,20 @@ bool nmDataAnalyzeManager::readFrameworkWellCurves( pGaugeF, eWellCategory, oRecord.vecOilPoints, oRecord.vecGasPoints, oRecord.vecWaterPoints); + if(!oRecord.sGaugeCode.isEmpty()) { + mapFlowCodeCounts.insert(oRecord.sGaugeCode, + mapFlowCodeCounts.value(oRecord.sGaugeCode) + 1); + } + vecFlowRecords.append(oRecord); + } - // 空 Code 或同井重复 Code 属于身份问题,覆盖内容判定结果。 + // 第四步:空 Code 或重复 Code 的全部流量记录都属于身份无效。 + for(int nIndex = 0; nIndex < vecFlowRecords.size(); ++nIndex) { + nmFlowGaugeRecord& oRecord = vecFlowRecords[nIndex]; if(oRecord.sGaugeCode.isEmpty() || - setSeenFlowCodes.contains(oRecord.sGaugeCode)) { + mapFlowCodeCounts.value(oRecord.sGaugeCode) > 1) { oRecord.eStatus = NM_GaugeRecord_InvalidIdentity; - } else { - setSeenFlowCodes.insert(oRecord.sGaugeCode); } - vecFlowRecords.append(oRecord); } return true;