fix(nmNum): 修复成果加载后自动拟合结果绑定丢失

feature/pebi-result-snapshot-20260831
lh 1 week ago
parent 42298f70eb
commit d7ad840956

@ -236,10 +236,12 @@ public:
// TODO:有问题,不会更新不同类型的井数据
//void updateWellData(const QVector<nmDataWellBase>& newData);
// 添加针对具体井类型的更新方法
void updateVerticalWells(const QVector<nmDataVerticalWell>& wells);
void updateVerticalFracturedWells(const QVector<nmDataVerticalFracturedWell>& wells);
void updateHorizontalFracturedWells(const QVector<nmDataHorizontalFracturedWell>& wells);
/** @brief 按稳定 UUID 回写直井数据,并恢复井与最后结果快照的弱关联。 */
void updateVerticalWells(const QVector<nmDataVerticalWell>& wells);
/** @brief 按稳定 UUID 回写压裂直井数据,并恢复井与最后结果快照的弱关联。 */
void updateVerticalFracturedWells(const QVector<nmDataVerticalFracturedWell>& wells);
/** @brief 按稳定 UUID 回写多段压裂水平井数据,并恢复井与最后结果快照的弱关联。 */
void updateHorizontalFracturedWells(const QVector<nmDataHorizontalFracturedWell>& wells);
// 返回分类后的井数据
// 获取所有直井数据

@ -1180,44 +1180,83 @@ QVector<nmDataWellBase*> nmDataAnalyzeManager::getWellDataList() const
void nmDataAnalyzeManager::updateVerticalWells(const QVector<nmDataVerticalWell>& wells)
{
bool bWellUpdated = false;
foreach(const auto& newWell, wells) {
const QString sWellInstanceId = newWell.getWellInstanceId();
if(sWellInstanceId.isEmpty()) {
qWarning() << "Cannot update vertical well without UUID:"
<< newWell.getWellName();
continue;
}
foreach(auto* existingWell, m_vWellData) {
if(auto * vWell = dynamic_cast<nmDataVerticalWell * >(existingWell)) {
if(vWell->getWellName() == newWell.getWellName()) {
// UUID 是井实例的唯一身份,禁止同名新井覆盖旧井。
if(vWell->getWellInstanceId() == sWellInstanceId) {
*vWell = newWell; // 调用赋值运算符
bWellUpdated = true;
break;
}
}
}
}
// 井赋值不复制快照绑定,并会解除目标井的弱引用,回写后必须由 Manager 统一恢复。
if(bWellUpdated) {
rebindPebiResultSnapshotToWells();
}
}
void nmDataAnalyzeManager::updateVerticalFracturedWells(const QVector<nmDataVerticalFracturedWell>& wells)
{
bool bWellUpdated = false;
foreach(const auto& newWell, wells) {
const QString sWellInstanceId = newWell.getWellInstanceId();
if(sWellInstanceId.isEmpty()) {
qWarning() << "Cannot update vertical fractured well without UUID:"
<< newWell.getWellName();
continue;
}
foreach(auto* existingWell, m_vWellData) {
if(auto * vWell = dynamic_cast<nmDataVerticalFracturedWell * >(existingWell)) {
if(vWell->getWellName() == newWell.getWellName()) {
// UUID 是井实例的唯一身份,禁止同名新井覆盖旧井。
if(vWell->getWellInstanceId() == sWellInstanceId) {
*vWell = newWell; // 调用赋值运算符
bWellUpdated = true;
break;
}
}
}
}
// 井赋值不复制快照绑定,并会解除目标井的弱引用,回写后必须由 Manager 统一恢复。
if(bWellUpdated) {
rebindPebiResultSnapshotToWells();
}
}
void nmDataAnalyzeManager::updateHorizontalFracturedWells(const QVector<nmDataHorizontalFracturedWell>& wells)
{
bool bWellUpdated = false;
foreach(const auto& newWell, wells) {
const QString sWellInstanceId = newWell.getWellInstanceId();
if(sWellInstanceId.isEmpty()) {
qWarning() << "Cannot update horizontal fractured well without UUID:"
<< newWell.getWellName();
continue;
}
foreach(auto* existingWell, m_vWellData) {
if(auto * vWell = dynamic_cast<nmDataHorizontalFracturedWell * >(existingWell)) {
if(vWell->getWellName() == newWell.getWellName()) {
// UUID 是井实例的唯一身份,禁止同名新井覆盖旧井。
if(vWell->getWellInstanceId() == sWellInstanceId) {
*vWell = newWell; // 调用赋值运算符
bWellUpdated = true;
break;
}
}
}
}
// 井赋值不复制快照绑定,并会解除目标井的弱引用,回写后必须由 Manager 统一恢复。
if(bWellUpdated) {
rebindPebiResultSnapshotToWells();
}
}
// 获取所有直井数据

Loading…
Cancel
Save