|
|
|
|
@ -3,6 +3,12 @@
|
|
|
|
|
#include "iParameter.h"
|
|
|
|
|
#include "iSysParaHelper.h"
|
|
|
|
|
|
|
|
|
|
// 按字符串长度降序比较(用于最长前缀优先匹配)
|
|
|
|
|
static bool longerStringFirst(const QString& a, const QString& b)
|
|
|
|
|
{
|
|
|
|
|
return a.length() > b.length();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ================================================================
|
|
|
|
|
// 构造与析构
|
|
|
|
|
// ================================================================
|
|
|
|
|
@ -26,7 +32,7 @@ void nmGridRowUtils::initUI()
|
|
|
|
|
iGridRowUtils::initUI();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmGridRowUtils::setWellNames(QMap<int, QString> map)
|
|
|
|
|
void nmGridRowUtils::setWellNames(QMap<QString, QString> map)
|
|
|
|
|
{
|
|
|
|
|
m_mapWellNames = map;
|
|
|
|
|
}
|
|
|
|
|
@ -37,7 +43,7 @@ bool nmGridRowUtils::buildRowUtils(QStringList listParas,
|
|
|
|
|
{
|
|
|
|
|
// 分离储层参数和井参数
|
|
|
|
|
QStringList listRes;
|
|
|
|
|
QMap<int, QStringList> mapWellParas;
|
|
|
|
|
QMap<QString, QStringList> mapWellParas;
|
|
|
|
|
splitWellParas(listParas, listRes, mapWellParas);
|
|
|
|
|
|
|
|
|
|
// 构建储层参数(基类处理)
|
|
|
|
|
@ -210,62 +216,61 @@ void nmGridRowUtils::bindItems()
|
|
|
|
|
|
|
|
|
|
void nmGridRowUtils::splitWellParas(QStringList listParas,
|
|
|
|
|
QStringList& listRes,
|
|
|
|
|
QMap<int, QStringList>& mapWellParas)
|
|
|
|
|
QMap<QString, QStringList>& mapWellParas)
|
|
|
|
|
{
|
|
|
|
|
listRes.clear();
|
|
|
|
|
mapWellParas.clear();
|
|
|
|
|
|
|
|
|
|
// 按长度降序排列wellCode,确保最长匹配优先
|
|
|
|
|
QList<QString> listCodes = m_mapWellNames.keys();
|
|
|
|
|
qSort(listCodes.begin(), listCodes.end(), longerStringFirst);
|
|
|
|
|
|
|
|
|
|
foreach (QString sPara, listParas)
|
|
|
|
|
{
|
|
|
|
|
// 检查是否匹配 "WN_" 格式(N为井永久ID)
|
|
|
|
|
if (sPara.length() >= 2
|
|
|
|
|
&& sPara.at(0).toUpper() == 'W'
|
|
|
|
|
&& sPara.at(1).isDigit())
|
|
|
|
|
bool bMatched = false;
|
|
|
|
|
foreach (QString sCode, listCodes)
|
|
|
|
|
{
|
|
|
|
|
// 提取井ID
|
|
|
|
|
int i = 1;
|
|
|
|
|
while (i < sPara.length() && sPara.at(i).isDigit())
|
|
|
|
|
QString sPrefix = sCode + "_";
|
|
|
|
|
if (sPara.startsWith(sPrefix))
|
|
|
|
|
{
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
if (i < sPara.length() && sPara.at(i) == '_')
|
|
|
|
|
{
|
|
|
|
|
int nWellId = sPara.mid(1, i - 1).toInt();
|
|
|
|
|
QString sBaseName = sPara.mid(i + 1); // 剥掉 "WN_" 前缀
|
|
|
|
|
mapWellParas[nWellId] << sBaseName;
|
|
|
|
|
continue;
|
|
|
|
|
QString sBaseName = sPara.mid(sPrefix.length());
|
|
|
|
|
mapWellParas[sCode] << sBaseName;
|
|
|
|
|
bMatched = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 非井参数,归入储层
|
|
|
|
|
listRes << sPara;
|
|
|
|
|
if (!bMatched)
|
|
|
|
|
{
|
|
|
|
|
listRes << sPara;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmGridRowUtils::buildWellGroups(QMap<int, QStringList>& mapWellParas,
|
|
|
|
|
void nmGridRowUtils::buildWellGroups(QMap<QString, QStringList>& mapWellParas,
|
|
|
|
|
bool bDnMode)
|
|
|
|
|
{
|
|
|
|
|
bool bProperOrder = true;
|
|
|
|
|
|
|
|
|
|
// 按井ID排序遍历
|
|
|
|
|
QList<int> listIds = mapWellParas.keys();
|
|
|
|
|
qSort(listIds);
|
|
|
|
|
// 按wellCode排序遍历
|
|
|
|
|
QList<QString> listCodes = mapWellParas.keys();
|
|
|
|
|
qSort(listCodes);
|
|
|
|
|
|
|
|
|
|
foreach (int nWellId, listIds)
|
|
|
|
|
foreach (QString sCode, listCodes)
|
|
|
|
|
{
|
|
|
|
|
QStringList listParas = mapWellParas[nWellId];
|
|
|
|
|
QStringList listParas = mapWellParas[sCode];
|
|
|
|
|
if (listParas.isEmpty())
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 井前缀,如 "W0_"
|
|
|
|
|
QString sPrefix = QString("W%1_").arg(nWellId);
|
|
|
|
|
// 井前缀,如 "W001_"
|
|
|
|
|
QString sPrefix = sCode + "_";
|
|
|
|
|
|
|
|
|
|
// 显示名称
|
|
|
|
|
QString sWellName = tr("Well #%1").arg(nWellId);
|
|
|
|
|
if (m_mapWellNames.contains(nWellId))
|
|
|
|
|
QString sWellName = sCode;
|
|
|
|
|
if (m_mapWellNames.contains(sCode))
|
|
|
|
|
{
|
|
|
|
|
sWellName = m_mapWellNames[nWellId];
|
|
|
|
|
sWellName = m_mapWellNames[sCode];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建井分组(纯标题,不需要编辑器)
|
|
|
|
|
|