chore:合并新框架文件与代码。

feature/Forecast-Sensitivity-Dialog-20261022
lh 3 weeks ago
parent 8faee3ea24
commit 47146b614f

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<mapping>
<!-- 每条 item = 一条基准参数 → 数据库字段 的映射 -->
<item table="B_WELL" field="FieldName" index="2" group="井基础信息" name="FieldName" alias="油田名称" unit=""/>
<item table="B_WELL" field="BlockName" index="4" group="井基础信息" name="BlockName" alias="区块名称" unit=""/>
<item table="B_WELL" field="WellName" index="6" group="井基础信息" name="WellName" alias="井名" unit=""/>
<item table="B_WELL" field="WellCode" index="5" group="井基础信息" name="WellCode" alias="井号" unit=""/>
<item table="B_WELL" field="WellClass" index="7" group="井基础信息" name="WellClass" alias="井别" unit=""/>
<item table="B_WELL" field="WellType" index="8" group="井基础信息" name="WellType" alias="井型" unit=""/>
<item table="B_WELL" field="WellRadius" index="9" group="井基础信息" name="rw" alias="井径" unit="m"/>
<item table="P_DATA_RES" field="FormationPress" index="9" group="基础参数" name="Pe" alias="原始地层压力" unit="MPa"/>
<item table="P_DATA_RES" field="EffThickness" fieldAlias="储层有效厚度" index="4" group="储层参数" name="h" alias="储层厚度" unit="m"/>
<item table="P_DATA_RES" field="Por" index="7" group="储层参数" name="Phi" alias="孔隙度" unit=""/>
<item table="P_DATA_RES" field="K" index="8" group="储层参数" name="K" alias="渗透率" unit="mD"/>
<item table="P_DATA_FLUID" field="OilCF" fieldAlias="地层原油压缩系数" index="4" group="流体性质" name="Co" alias="油压缩系数" unit="1/MPa"/>
<item table="P_DATA_FLUID" field="OilVF" fieldAlias="地层原油体积系数" index="5" group="流体性质" name="Bo" alias="油体积系数" unit=""/>
<item table="P_DATA_FLUID" field="OilDens" fieldAlias="地层原油密度" index="7" group="流体性质" name="Rhoo" alias="油密度" unit="kg/m^3"/>
<item table="P_DATA_FLUID" field="OilVisc" fieldAlias="地层原油黏度" index="6" group="流体性质" name="Miuo" alias="油相黏度" unit="mPa.s"/>
<item table="P_DATA_FLUID" field="GasDens" fieldAlias="地层天然气密度" index="11" group="流体性质" name="Rhog" alias="气体密度" unit="kg/m^3"/>
<item table="P_DATA_FLUID" field="GasVisc" fieldAlias="地层天然气黏度" index="9" group="流体性质" name="Miug" alias="气黏度" unit="mPa.s"/>
<item table="P_DATA_FLUID" field="GasVF" fieldAlias="地层天然气体积系数" index="10" group="流体性质" name="Bg" alias="气体积系数" unit=""/>
<item table="P_DATA_FLUID" field="WaterCF" fieldAlias="地层水压缩系数" index="12" group="流体性质" name="Cw" alias="水压缩系数" unit="1/MPa"/>
<item table="P_DATA_FLUID" field="WaterVF" fieldAlias="地层水体积系数" index="13" group="流体性质" name="Bw" alias="水体积系数" unit=""/>
<item table="P_DATA_FLUID" field="WaterDens" fieldAlias="地层水密度" index="15" group="流体性质" name="Rhow" alias="水密度" unit="kg/m^3"/>
<item table="P_DATA_FLUID" field="WaterVisc" fieldAlias="地层水黏度" index="14" group="流体性质" name="Miuw" alias="水相黏度" unit="mPa.s"/>
<item table="P_DATA_FLUID" field="GOR" fieldAlias="溶解气油比" index="3" group="流体性质" name="Rs" alias="气油比" unit="m^3/m^3"/>
<item table="P_DATA_RES" field="TotalCF" fieldAlias="综合压缩系数" index="11" group="流体性质" name="Ct" alias="综合压缩系数" unit="1/MPa"/>
</mapping>

@ -0,0 +1,78 @@
#dat文本格式数据
基础参数——
井径[rw](m):
原始地层压力[Pe](MPa):
参考压力[Pref](MPa):
初始压力[Pi](MPa):
地层压力[Pit](MPa):
复合半径[Ri](m):
储层参数——
井筒储集系数[C](m^3/MPa):
初末井筒储集系数比[CidRatio]:
储层厚度[h](m):
孔隙度[phi]:
内区孔隙度[phi1]:
外区孔隙度[phi2]:
渗透率[K](mD):
油相渗透率[Ko](mD):
气相渗透率[Kg](mD):
水相渗透率[Kw](mD):
水平渗透率[Kh](mD):
垂向渗透率[Kv](mD):
表皮系数[S]:
总表皮系数[St]:
界面表皮[Sinf]:
特殊储层参数——
导压系数比[sigma]:
弹性储容比[D]:
裂缝弹性储容比[omegaf]:
窜流系数[lambda]:
流度[MKu](mD/(mPa.s)):
流度比[M]:
应力敏感系数[gamma](1/MPa):
参考温度[rt](°C):
流体性质——
综合压缩系数[Ct](1/MPa):
岩石压缩系数[Cf](1/MPa):
含水率[Fw](%):
油压缩系数[Co](1/Mpa):
油体积系数[Bo]:
油密度[Rhoo](kg/m^3):
油相黏度[Miuo](mPa.s):
气体偏差因子[Zg]:
气体压缩系数[Cg](1/Mpa):
气体密度[Rhog](kg/m^3):
气相黏度[Miug](mPa.s):
气体积系数[Bg]:
水压缩系数[Cw](1/Mpa):
水体积系数[Bw]:
水密度[Rhow](kg/m^3):
水相黏度[Miuw](mPa.s):
气油比[Rs](m^3/m^3):
气水比[Rsw](m^3/m^3):
边界
边界距离1[x1](m):
边界距离2[x2](m):
边界距离3[x3](m):
边界距离4[x4](m):
其他参数
裂缝长度[Lf](m):
裂缝半长[xf](m):
裂缝倾角[theta_f](°):
裂缝宽度[wf](m):
裂缝导流能力[Fc](mD.m):

@ -5913,7 +5913,7 @@ Converted xmlfile successfully.
<message>
<location filename="../../../../../iFramework/Src/iPlot/iPlotCurveT/tCurvePlotView.cpp" line="455"/>
<source> Current Pos:%1-%2</source>
<translation type="unfinished"></translation>
<translation>当前位置:%1-%2</translation>
</message>
</context>
<context>

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

@ -0,0 +1,91 @@
#dat文本格式数据
基础参数——
油田名称[FieldName]:
区块名称[BlockName]:
井名[WellName]:
井号[WellCode]:
井别[WellClass]:
井型[WellType]:
井径[rw](m): 0.07068
原始地层压力[Pe](MPa):
参考压力[Pref](MPa): 54.7256
初始压力[Pi](MPa):
地层压力[Pit](MPa):
复合半径[Ri](MPa):
储层参数——
井筒储集系数[C](m^3/MPa):0.01616
初末井筒储集系数比[CidRatio]:
储层厚度[h](m): 7.4
孔隙度[phi]:0.188955
内区孔隙度[phi1]:
外区孔隙度[phi2]:
渗透率[K](mD):258.2
油相渗透率[Ko](mD):258.2
气相渗透率[Kg](mD):
水相渗透率[Kw](mD):
水平渗透率[Kh](mD):
垂向渗透率[Kv](mD):
表皮系数[S]:-0.36855
总表皮系数[St]:
界面表皮[Sinf]:
特殊储层参数——
导压系数比[sigma]:
弹性储容比[D]:
裂缝弹性储容比[omegaf]:
窜流系数[lambda]:
流度[MKu](mD/(mPa.s)):
流度比[M]:
应力敏感系数[gamma](1/MPa):
参考温度[rt](°C):100
流体性质——
综合压缩系数[Ct](1/MPa):0.00122234
岩石压缩系数[Cf](1/MPa):0.000559053
含水率[Fw](%):
油压缩系数[Co](1/Mpa):
油体积系数[Bo]:1.18267
油密度[Rhoo](kg/m^3):
油相黏度[Miuo](mPa.s):2.7441
气体偏差因子[Zg]:
气体压缩系数[Cg](1/Mpa):
气体密度[Rhog](kg/m^3):
气相黏度[Miug](mPa.s):
气体积系数[Bg]:
水压缩系数[Cw](1/Mpa):
水体积系数[Bw]:
水密度[Rhow](kg/m^3):
水相黏度[Miuw](mPa.s):
气油比[Rs](m^3/m^3):0
气水比[Rsw](m^3/m^3):
边界
边界距离1[x1](m):588.553
边界距离2[x2](m):
边界距离3[x3](m):
边界距离4[x4](m):
其他参数
裂缝长度[Lf](m):
裂缝半长[xf](m):
裂缝倾角[theta_f](°):
裂缝宽度[wf](m):
裂缝导流能力[Fc](mD.m):

@ -3,12 +3,13 @@
[Global]
AppID = WTAI ;AppID
AppLogo = WTAI.png ;Logo
AppDescCN = 新一代试井处理解释软件;中文
AppDescCN = 新一代试井处理解释软件;[试用版];中文
AppDescEN = iWeTai;英文
Dev = 中国石油勘探开发研究院;
DebugLevel = 0; 1 为Debug模式,可以打印更多日志,比如SQL语句
AppVer = c4ca4238a0b923820dcc509a6f75849b; 内定的编码,则为常规版本,否则为 临时版本
Customer = 研究院\r\n试井相关研究人员;
;ProductVer = Ver1.0.1.0;
Customer = 研究院、工艺院及测试公司\r\n试井相关研究人员;\r\n试用版[2027-12-31到期];
PtyAdvanced = 1; 属性采用高级模式
[GX6Config]
@ -86,7 +87,9 @@ wLineCountPerSpan = 461e8b88f5f7119a7c45dc91a59fa029; 导出word时,内部描
NaviShowMode = 1; 模型导航模式,1:为菜单模式,其它:原来模式
SegMaxToTrim = 5; 一旦流动段多于该数,则仅仅对当前段进行处理
CustomThin = 1; 是否允许定制抽稀参数
CustomAutoFitMethod = 0; 是否更换拟合方法
UnitConvert = 1; 是否允许单位转换
MixMiuSupported = 0; 是否允许设置混合黏度
TailorOffset = 0; (范围0-50,%)
BaseResolutionW = 1920; 基准分辨率 1024 1920
BaseResolutionH = 1080;768 1080

@ -84,10 +84,73 @@ div.block_latest
<div class='block_latest'>
<h2 class="title_latest">软件版本:20260819</h2>
<ol>
<li class="li_important_latest">优化:气相拟压力换算问题,解决压力史锯齿问题</li>
<li class="li_important_latest">优化:不再启用两条实际压力导数,模型统一进行处理</li>
<h2 class="title_latest">软件版本:20261021</h2>
<ol>
<li class="li_important_latest">新增:DAT格式数据批量导入[新建井时]</li>
<li class="li_important_latest">新增:解释参数批量修改[处理解释]</li>
<li class="li_important_latest">新增:整合智能模块(打包方式待定)</li>
<li>新增:反褶积功能集成,增加双对数曲线显示</li>
<li>新增:西安华线模型拟合更新为开源方法,索引为40(但是只给了Release版本)</li>
<li class="li_important_latest">新增:底层增加日期时间类型坐标轴,基本测试通过,待后续功能挂接</li>
<li>新增:混合黏度计算功能,待具体功能挂接</li>
<li class="li_important_latest">优化:优化besselk,支持小数(不仅仅0,1),H震荡问题优化</li>
<li>优化:直井+圆形边界震荡优化,误差函数问题</li>
<li>优化:数据库db改用引用&来调用,提高并发访问稳定性</li>
<li>优化:测试ZxSysmtem空闲iDle函数,暂时屏蔽,因为其eventFilter常引起无所谓的异常</li>
<li>优化:Ribbon高度优化,以更好地支持跨平台</li>
<li>优化:Icon/Scaled大小处理与判断,Pixmap is a null pixmap</li>
<li>优化:日志单例改为QObject,日志保存问题优化,规避死锁,提高稳定性</li>
<li>优化:加载成果,总是弹出错误日志,C找不到</li>
<li>优化:去除信号找不到的Warning,提高稳定性</li>
<li>优化:更改iWxWelcomeNew的eventFilter(map、detach),提高稳定性</li>
<li class="li_important_latest">修复:自动拟合过程稳定性修复,算法与图形刷新死锁</li>
<li>修复:自动拟合界面表格参数叠影问题</li>
<li>修复:自动拟合次数偏小时进度条不刷新</li>
<li>修复:Ribbo收缩后,弹窗,无法恢复的问题</li>
<li class="li_important_latest">修复:加载成果、解释、保存、关闭工区崩溃</li>
<li>修复:纹理格式刷修复:QBrush: Incorrect use of TexturePattern</li>
<li>修复:光标跨线程通讯修复:QObject::connect: Cannot queue arguments of type 'QTextCursor'</li>
<li>修复:文件夹循环拷贝问题</li>
<li>修复:文件/文件夹原生对话框启用问题</li>
<li>修复:读取旧日志内容中文乱码修复</li>
<li>调整:复合半径与裂缝半长关系</li>
<li>调整:完善工区管理按钮</li>
<li>调整:数据加载界面,时间格式改为中文</li>
<li>调整:调整产能曲线显示</li>
<li>调整:产能图例默认置于右上</li>
<li>调整:更新代码行统计工具</li>
</ol>
<h2 class="title">软件版本:V1.0(20260906)试用版</h2>
<ol>
<li class="li_important">新增:整合集成数值试井模块</li>
<li class="li_important">新增:线性复合模型</li>
<li class="li_important">新增:干扰试井模型</li>
<li>新增:针对多相,放开主相、次相的物性参数</li>
<li>优化:更改小数位置(坐标轴范围)</li>
<li>优化:参数特殊配置,saveBk/restoreBk逻辑处理优化</li>
<li>优化:更新光滑因子后实时刷新</li>
<li>优化:PVT高级计算中So/Sg/Sw小数位数调整</li>
<li>优化:PVT页面调整综合压缩系数的顺序</li>
<li>修复:PVT参数传递(孔隙度/岩石压缩系数),原先是可以的,是修改单位之后引起</li>
<li class="li_important">修复:拖拽加载解释成果,然后直接拖动特征线,左侧K/S未改动(信号未关联)</li>
<li>修复:Ribbon返回按钮</li>
<li>修复:保存的分析里,表格标题异常,1.储层名称 列为空,2.岩石压缩系数列,标题只有单位</li>
<li>修复:首页面操作崩溃,未复现,盲猜盲改</li>
<li>调整:产能计算放开参数结果刷新</li>
<li>调整:产能模块、智能模块默认暂时不再发布</li>
<li>规范:版本信息,V1.0</li>
</ol>
<h2 class="title">软件版本:20260819</h2>
<ol>
<li class="li_important">优化:气相拟压力换算问题,解决压力史锯齿问题</li>
<li class="li_important">优化:不再启用两条实际压力导数,模型统一进行处理</li>
<li>调整:流动段选择压力曲线改为点模式</li>
<li>修复:表皮系数输入负值,在切换不同模型之后,保持红色的问题</li>
<li>修复:所有水平井模型下井储系数单位不显示</li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -72,6 +72,13 @@
<Tab ID="0" Name="WelCome" Alias="开始(O)" >
<Group Name="ProjManager" Alias="项目管理">
<Cmd ID="1001" Bounds="0,0,2,1" Name="ProjNew" Alias="新建项目" Icon="NewProj" />
<Cmd ID="1002" Bounds="0,1,2,1" Name="ProjOpen" Alias="打开项目" Icon="OpenProj" />
<Cmd ID="1005" Bounds="0,2,2,1" Name="ProjSave" Alias="保存项目" Icon="SaveProj" />
<Cmd ID="1003" Bounds="0,3,2,1" Name="ProjClose" Alias="关闭项目" Icon="CloseProj" />
</Group>
<Group Name="DataManager" Alias="数据准备">
<Cmd ID="1099" Bounds="0,0,2,1" Name="WellNew" Alias="新建井(W)" Icon="WellNew" />
<Cmd ID="2005" Bounds="0,1,2,1" Name="DataRate" Alias="流量数据(Q)" ExtInfo="P_DATA_GAUGE_F" Icon="RateData" />
@ -85,7 +92,7 @@
<Cmd ID="9102" Bounds="1,1" Name="VisibleAnalPVT" Alias="PVT数据" Icon="InputFluid" />
</Group>
<Group Name="Analytical" Alias="流动段分析">
<Group Name="FlowSegment" Alias="流动段分析">
<Cmd ID="3003" Bounds="0,0,2,1" Name="AnalPF" Alias="流动段选择" ExtInfo="PF" Icon="PF" />
<Cmd ID="3004" Bounds="0,1,2,1" Name="AnalFlowSeg" Alias="流动段分析" Icon="FlowPeriod" />
</Group>
@ -107,16 +114,11 @@
<Cmd ID="5202" Bounds="0,3,2,1" Name="AnalPF" Alias="辅助拟合" ExtInfo="PF" Icon="RunOther" Visible="0"/>
</Group>
<Group Name="Jobs" Alias="成果管理">
<Group Name="Rsts" Alias="成果管理">
<Cmd ID="1008" Bounds="0,0" Name="RstLoad" Alias="加载成果" Icon="LoadJobs" />
<Cmd ID="1009" Bounds="1,0" Name="RstSave" Type="1" ExtNames="RstSaveCur;RstSaveAll" ExtInfo="保存当前成果;保存所有成果" Alias="保存成果" Icon="SaveJobs" />
<Cmd ID="1005" Bounds="0,1,2,1" Name="ProjSave" Alias="保存项目" Icon="SaveProj" />
</Group>
<Group Name="WellMap" Alias="井位图">
<Cmd ID="3008" Bounds="0,0,2,1" Name="AnalMap" Alias="井位图" Icon="Map2D" Visible="1" />
<Cmd ID="3018" Bounds="0,1,2,1" Name="AnalInterfere" Alias="干扰设定" Icon="Map2D" Visible="0" />
@ -140,18 +142,18 @@
<Tab ID="2" Name="DataManager" Alias="数据管理(D)" >
<Group Name="DataManager" Alias="井">
<Group Name="DataWell" Alias="井">
<Cmd ID="1099" Bounds="0,0,2,1" Name="WellNew" Alias="新建井(W)" Icon="WellNew" />
</Group>
<Group Name="DataManager" Alias="基础数据">
<Group Name="DataBasic" Alias="基础数据">
<Cmd ID="2001" Bounds="0,0,2,1" Name="DataWellBasic" Alias="井基础数据(B)" ExtInfo="B_WELL" Icon="BasicData" />
<Cmd ID="2002" Bounds="0,1,2,1" Name="DataLayer" Alias="地质分层数据(L)" ExtInfo="B_LAYER" Icon="LayerData" />
<Cmd ID="2003" Bounds="0,2,2,1" Name="DataRes" Alias="储层数据(R)" ExtInfo="P_DATA_RES" Icon="ResData" />
<Cmd ID="2004" Bounds="0,3,2,1" Name="DataFlu" Alias="流体性质数据(F)" ExtInfo="P_DATA_FLUID" Icon="FluidProperty" />
</Group>
<Group Name="DataManager" Alias="压力流量">
<Group Name="DataPF" Alias="压力流量">
<Cmd ID="2005" Bounds="0,0,2,1" Name="DataRate" Alias="流量数据(Q)" ExtInfo="P_DATA_GAUGE_F" Icon="RateData" />
<Cmd ID="2006" Bounds="0,1,2,1" Name="DataPre" Alias="压力数据(P)" ExtInfo="P_DATA_GAUGE_P" Icon="PressureData" />
</Group>
@ -213,7 +215,7 @@
<Cmd ID="9201" Bounds="0,1,2,1" Name="MixViscosity" Alias="混合黏度(Debug)" Icon="MixViscosity" Visible="0" />
</Group>-->
<Group Name="Jobs" Alias="成果管理">
<Group Name="Rsts" Alias="成果管理">
<Cmd ID="1008" Bounds="0,0" Name="RstLoad" Alias="加载成果" Icon="LoadJobs" />
<Cmd ID="1009" Bounds="1,0" Name="RstSave" Type="1" ExtNames="RstSaveCur;RstSaveAll" ExtInfo="保存当前成果;保存所有成果" Alias="保存成果" Icon="SaveJobs" />
<Cmd ID="1011" Bounds="0,1,2,1" Name="ToNumerical" Alias="To-数值" Icon="LoadJobs" Visible="0" />
@ -299,7 +301,6 @@
<Cmd ID="5999" Bounds="0,0,2,1" Name="NmDebug" Alias="框架代码调试" Icon="PrepareGrid" />
</Group>
</Tab>
<Tab ID="4" Name="MiniFrac" Alias="小型压裂(F)(Debug)" >
@ -319,14 +320,13 @@
<Cmd ID="4007" Bounds="2,3" Name="CalLogLog" Alias="双对数" Icon="RunOther" />
</Group>
<Group Name="FA" Alias="排量分析">
<Cmd ID="4102" Bounds="0,0,2,1" Name="MiniFrAnalFA" Alias="排量准备" ExtInfo="IPR" Icon="MiniFrAnalFA" />
<Cmd ID="4103" Bounds="0,1" Name="MiniFrFAUp" Alias="阶梯升" Icon="StepUp" />
<Cmd ID="4104" Bounds="1,1" Name="MiniFrFADown" Alias="阶梯降" Icon="StepDown" />
</Group>
<Group Name="Jobs" Alias="成果管理" Visible="0">
<Group Name="Rsts" Alias="成果管理" Visible="0">
<Cmd ID="1008" Bounds="0,0" Name="RstLoad" Alias="加载成果" Icon="LoadJobs" />
<Cmd ID="1009" Bounds="1,0" Name="RstSave" Type="1" ExtNames="RstSaveCur;RstSaveAll" ExtInfo="保存当前成果;保存所有成果" Alias="保存成果" Icon="SaveJobs" />
</Group>
@ -360,7 +360,7 @@
<Cmd ID="6104" Bounds="0,3,2,1" Name="WdtModel" Alias="基础模型" Icon="WdtModel" />
</Group>
<Group Name="IPR" Alias="产能解释">
<Group Name="WdtAnal" Alias="产能解释">
<Cmd ID="6201" Bounds="0,0,2,1" Name="WdtCal" ExtInfo="WDT" Alias="储层产能计算" Icon="WdtCal" />
<Cmd ID="6202" Bounds="0,1,2,1" Name="WdtAnal" Alias="储层产能分析" Icon="WdtAnal" />
</Group>
@ -370,20 +370,20 @@
</Group>
<Group Name="IPR" Alias="一体化分析">
<Group Name="WdtRpc" Alias="一体化分析">
<Cmd ID="6301" Bounds="0,0,2,1" Name="WdtGwlcc" Alias="气井携液能力" Icon="WdtGwlcc" />
<Cmd ID="6302" Bounds="0,1,2,1" Name="WdtIpc" Alias="一体化产能分析" Icon="WdtTipc" />
<Cmd ID="6303" Bounds="0,2,2,1" Name="WdtRpc" Alias="合理产能计算" Icon="WdtRpc" />
<Cmd ID="6302" Bounds="0,1,2,1" Name="WdtIpc" Alias="一体化产能分析" Icon="WdtTipc" Visible="0"/>
<Cmd ID="6303" Bounds="0,2,2,1" Name="WdtRpc" Alias="一体化产能计算" Icon="WdtRpc" />
<Cmd ID="6304" Bounds="0,3,2,1" Name="WdtPdp" Alias="生产动态潜力" Icon="WdtPdp" />
<Cmd ID="6305" Bounds="0,4,2,1" Name="WdtExt" Alias="产能试井[扩展]" Icon="WdtExt"/>
<Cmd ID="6305" Bounds="0,4,2,1" Name="WdtExt" Alias="产能试井[扩展]" Icon="WdtExt" Visible="0"/>
</Group>
<Group Name="IPR" Alias="产能计算">
<Group Name="Run" Alias="产能计算">
<Cmd ID="6901" Bounds="0,0,2,1" Name="WdtRun" Alias="计算" ExtInfo="WDT" Icon="RunEx" />
</Group>
<Group Name="Jobs" Alias="成果管理">
<Group Name="Rsts" Alias="成果管理">
<Cmd ID="1008" Bounds="0,0" Name="RstLoad" Alias="加载成果" Icon="LoadJobs" />
<Cmd ID="1009" Bounds="1,0" Name="RstSave" Type="1" ExtNames="RstSaveCur;RstSaveAll" ExtInfo="保存当前成果;保存所有成果" Alias="保存成果" Icon="SaveJobs" />
</Group>
@ -435,7 +435,7 @@
<Cmd ID="9201" Bounds="0,1,2,1" Name="MixViscosity" Alias="混合黏度(Debug)" Icon="MixViscosity" />
</Group>
<Group Name="Jobs" Alias="成果管理" Visible="0">
<Group Name="Rsts" Alias="成果管理" Visible="0">
<Cmd ID="1008" Bounds="0,0" Name="RstLoad" Alias="加载成果" Icon="LoadJobs" />
<Cmd ID="1009" Bounds="1,0" Name="RstSave" Type="1" ExtNames="RstSaveCur;RstSaveAll" ExtInfo="保存当前成果;保存所有成果" Alias="保存成果" Icon="SaveJobs" />
</Group>
@ -451,34 +451,56 @@
</Tab>
<Tab ID="7" Name="AiTest" Alias="智能试井(I)(Debug)">
<Tab ID="7" Name="AiTest" Alias="智能试井(I)">
<Group Name="Demo1" Alias="智能试井">
<Cmd ID="7001" Bounds="0,0,2,1" Name="SmartRecommendation" Alias="智能推荐" Icon="AssisAnal" />
<Cmd ID="7002" Bounds="0,1,2,1" Name="SmartFitting" Alias="智能拟合" Icon="AutoFit" />
<Cmd ID="7003" Bounds="0,2,2,1" Name="SmartFeedbackFitting" Alias="反馈拟合" Icon="QuickMatch" Visible="0" />
</Group>
<Group Name="Demo1" Alias="样例菜单1">
<Cmd ID="7001" Bounds="0,0,2,1" Name="ActionName1" Alias="临时测试1" Icon="TODO1" />
<Cmd ID="7002" Bounds="0,1,2,1" Name="ActionName2" Alias="临时测试2" Icon="TODO2" />
<Group Name="WellTestLLM" Alias="试井大模型" Visible="1">
<Cmd ID="7998" Bounds="0,0,2,1" Name="WellTestLLM" Alias="试井大模型" Icon="aiOpenAI32" Visible="1" />
<Cmd ID="7989" Bounds="0,1,2,1" Name="WellTestModelConfig" Alias="配置模型" Icon="WTAI32" Visible="1" />
</Group>
<Group Name="Demo2" Alias="样例菜单2">
<Group Name="AiTools" Alias="软件助手" Visible="1">
<Cmd ID="7997" Bounds="0,0,2,1" Name="SoftwareAssistant" Alias="智能解释" Icon="Help32" Visible="1" />
</Group>
<Group Name="AiReport" Alias="智能报告" Visible="1">
<Cmd ID="7988" Bounds="0,0,2,1" Name="AiReportOneClick" Alias="一键报告" Icon="jReport" Visible="1" />
<Cmd ID="7996" Bounds="0,1" Name="AiReportSettings" Alias="报告设置" Icon="jReport" Visible="1" />
<Cmd ID="7995" Bounds="0,2" Name="AiReportDataEdit" Alias="数据修改" Icon="VisibleParameters" Visible="1" />
<Cmd ID="7994" Bounds="0,3" Name="AiReportAnalyze" Alias="生成分析" Icon="aiOpenAI" Visible="1" />
<Cmd ID="7993" Bounds="1,1" Name="AiReportPreview" Alias="报告预览" Icon="PrePrint" Visible="1" />
<Cmd ID="7992" Bounds="1,2" Name="AiReportPrint" Alias="打印/PDF" Icon="Print" Visible="1" />
<Cmd ID="7991" Bounds="1,3" Name="AiReportExportWord" Alias="导出Word" Icon="Word16" Visible="1" />
</Group>
<Group Name="AiDataExtraction" Alias="数据智能拾取" Visible="1">
<Cmd ID="7990" Bounds="0,0,2,1" Name="AiDataExtraction" Alias="数据智能拾取" Icon="AssisAnal" Visible="1" />
</Group>
<Group Name="Demo2" Alias="样例菜单2" Visible="0">
<Cmd ID="7101" Bounds="0,0,2,1" Name="ActionName3" Alias="临时测试3" Icon="TODO3" />
<Cmd ID="7102" Bounds="0,1,2,1" Name="ActionName4" Alias="临时测试4" Icon="TODO4" />
</Group>
<Group Name="Demo3" Alias="样例菜单3">
<Group Name="Demo3" Alias="样例菜单3" Visible="0">
<Cmd ID="7201" Bounds="0,0,2,1" Name="ActionName4" Alias="临时测试5" Icon="TODO5" />
<Cmd ID="7202" Bounds="0,1,2,1" Name="ActionName5" Alias="临时测试6" Icon="TODO6" />
</Group>
<Group Name="NmDebug" Alias="框架测试(Debug)">
<Group Name="NmDebug" Alias="框架测试(Debug)" Visible="0">
<Cmd ID="7999" Bounds="0,0,2,1" Name="NmDebug" Alias="框架代码调试" Icon="PrepareGrid" />
</Group>
</Tab>
<Tab ID="8" Name="Result" Alias="成果管理(R)" >
<Group Name="Jobs" Alias="成果管理">
<Group Name="Rsts" Alias="成果管理">
<Cmd ID="1008" Bounds="0,0" Name="RstLoad" Alias="加载成果" Icon="LoadJobs" />
<Cmd ID="1009" Bounds="1,0" Name="RstSave" Type="1" ExtNames="RstSaveCur;RstSaveAll" ExtInfo="保存当前成果;保存所有成果" Alias="保存成果" Icon="SaveJobs" />
</Group>
@ -541,7 +563,7 @@
<Cmd ID="10008" Bounds="0,2,2,1" Name="UpdateLists" Alias="更新列表(I)" Icon="UpdateLists" />
</Group>
<Group Name="Lang" Alias="语言">
<Group Name="Lang" Alias="语言(Debug)">
<Cmd ID="10009" Bounds="0,0,2,1" Name="LangSwap" Alias="切换语言" Icon="LangSwap" />
</Group>

@ -430,12 +430,10 @@
<Tab ID="7" Name="SysTool" Alias="System Configuration Tools(T)" Visible="0" >
<Group Name="SysTool" Alias="Configuration Tools">
<Cmd ID="7001" Bounds="0,1,2,1" Name="SysTools" Alias="System Configuration Tools" Icon="SysTools" />
</Group>
<Group Name="ModelManager" Alias="Model Management">
<Cmd ID="7002" Bounds="0,0,2,1" Name="ModelScan" Alias="Model View" Icon="ModelScan" />
<Group Name="Demo1" Alias="AI Well Testing">
<Cmd ID="7001" Bounds="0,0,2,1" Name="SmartRecommendation" Alias="Smart Recommendation" Icon="AssisAnal" />
<Cmd ID="7002" Bounds="0,1,2,1" Name="SmartFitting" Alias="Smart Fitting" Icon="AutoFit" />
<Cmd ID="7003" Bounds="0,2,2,1" Name="SmartFeedbackFitting" Alias="Feedback Fitting" Icon="QuickMatch" Visible="0" />
</Group>
</Tab>

@ -189,7 +189,7 @@
<ParaItem Name="Pe" Alias="原始地层压力" LayerMode="1" Unit="MPa" Default="30" Max="500" Min="0.1" Digit="5" Desc="initial formation pressure"/>
<ParaItem Name="Pref" Alias="参考压力" LayerMode="1" Unit="MPa" Default="30" Max="500" Min="0.1" Digit="5" Desc="Reference pressure"/>
<ParaItem Name="Pi" Alias="初始压力" LayerMode="1" Unit="MPa" Default="30" Max="500" Min="0.1" Digit="5" Desc="initial pressure"/>
<ParaItem Name="Pit" Alias="地层压力" LayerMode="1" Unit="MPa" Default="30" Max="100" Min="1e-05" Digit="5" Desc="initial pressure1"/>
<ParaItem Name="Pit" Alias="地层压力" LayerMode="1" Unit="MPa" Default="30" Max="200" Min="1e-05" Digit="5" Desc="initial pressure1"/>
<ParaItem Name="N" Alias="储量" Unit="m^3" Default="100000" Max="1e+30" Min="1e-05" Digit="3" Desc="reserves"/>
<ParaItem Name="gamma" Alias="渗透率模量" Unit="1/MPa" Default="0.001" Max="1" Min="0" Scientific="1" Digit="10" Desc="stress sensitivity coefficient"/>
@ -208,7 +208,7 @@
<ParaGroup Name="" Alias="储层参数">
<ParaItem Name="Transmissibility" Alias="地层系数" LayerMode="1" Unit="mD.m" Default="100" Max="1e+30" Min="0" Digit="6" UseMode="7" Desc="Transmissibility"/>
<ParaItem Name="Rc" Alias="探测半径" LayerMode="1" Unit="m" Default="100" Max="1e+30" Min="0" Digit="3" UseMode="7" Desc="radius of investigation"/>
<ParaItem Name="Rc" Alias="探测半径" Unit="m" UseMode="7" LayerMode="1" Default="100" Max="1e+30" Min="0" Digit="3" Desc="radius of investigation"/>
<ParaItem Name="dt" Alias="测试时间" LayerMode="1" Unit="h" Default="100" Max="1e+30" Min="0" Digit="6" UseMode="7" Desc="test time"/>
<ParaItem Name="K" Alias="渗透率" Unit="mD" Default="5" Max="10000" Min="0" Digit="6" Desc="permeability"/>
@ -339,7 +339,7 @@
<ParaItem Name="lambdavf" Alias="溶孔向裂缝窜流系数" Unit="" Default="0.000001" Max="1" Min="0" Scientific="1" Digit="10" Desc="cross flow coefficient of inner vug"/>
<!--XA"-->
<ParaItem Name="MKu" Alias="流度" Unit="mD/(mPa.s)" Default="5" Max="100000" Min="1e-05" Digit="3" UseMode="7" Desc="mobility"/>
<ParaItem Name="MKu" Alias="流度" Unit="mD/(mPa.s)" UseMode="7" Default="5" Max="100000" Min="1e-05" Digit="3" Desc="mobility"/>
<ParaItem Name="M" Alias="流度比" Unit="" Default="5" Max="1000" Min="0.001" Digit="3" Desc="mobility ratio"/>
<ParaItem Name="ML1" Alias="层一流度比" Unit="" Default="1" Max="1000" Min="0.001" Digit="3" Desc="mobility ratio of layer1"/>
<ParaItem Name="ML2" Alias="层二流度比" Unit="" Default="1" Max="1000" Min="0.001" Digit="3" Desc="mobility ratio of layer2"/>

@ -218,7 +218,7 @@
<FieldInfo eDataType="4" Alias="流量2" FieldName="GaugeDataEx2"/>
<FieldInfo eDataType="4" Alias="流量3" FieldName="GaugeDataEx3"/>
<FieldInfo eDataType="1" Alias="多相" FieldName="MultiPhase" Visible="0"/>
<FieldInfo Alias="阶梯类型" FieldName="StepType"/>
<FieldInfo Alias="阶梯类型" FieldName="StepType" Visible="0"/>
<FieldInfo Alias="创建人" FieldName="Creator"/>
<FieldInfo Alias="创建时间" FieldName="CreatedTime"/>
<FieldInfo Alias="修改人" FieldName="Modifier"/>

@ -13,6 +13,17 @@ public:
public:
// TODO 注意,对于matlab的bessel函数,其实是有 besseli(0, q1, 1) 这种写法的
// 即:存在 第三个参数 1,即修正bessel方式,
// 如果不输入这个参数(或输入 0)时,besseli 直接计算函数值。
// 当自变量 q1 较大时,函数值会急剧增大,很容易超出双精度浮点数的上限(即“上溢”),
// 导致计算结果变为 Inf 而失效
// 如果输入这个参数 1 之后,MATLAB 会计算 缩放后的值,也就是说,它会乘上一个指数衰减因子
// exp(-abs(x)) 来抵消函数本身的高速增长。
// 即:
// besseli(0, q1) → 等价于 besseli(0, q1, 0) → 不乘衰减因子,直接算原函数值。
// besseli(0, q1, 1) → 才乘衰减因子 exp(-abs(q1))
// 贝塞尔函数(基础函数部分)
bool besselI0(double x, double &b);
double getbesselI0(double x);

@ -51,6 +51,9 @@ public:
// 注:该函数目前被yinw算法+xieh算法中均有应用
static double besselk(double nu, double z);
// 20260908 xieh 再次针对震荡情形,对besselk函数做了优化升级
static double besselk_opt(double nu, double z);
// 伽马函数 Gamma(z)
static double gamma(double z);

@ -1,11 +1,17 @@
#pragma once
#include <QObject>
#include <QTextEdit>
#include "Defines.h"
#include "iLogs_global.h"
class I_LOGSSHARED_EXPORT zxLogInstance
// 日志单例
// 202609020 改为QObject 以支持跨线程写入
class I_LOGSSHARED_EXPORT zxLogInstance : public QObject
{
Q_OBJECT
public:
// 获取对象,单例模式
@ -40,6 +46,36 @@ public:
// 该函数返回的结果是ini中配置的AppDescEN,如CNPC-TEST
QString getAppDescEN();
signals:
///////////////////////////////////////////////////////
// 由工作线程 emit,交由 MainWindow 主线程执行
// 参数只用基础类型,确保跨线程安全
// 追加日志内容
void sigAppendLog(const QString& msg, \
const QColor& color);
// 清空日志内容
void sigClearLog();
///////////////////////////////////////////////////////
private slots:
///////////////////////////////////////////////////////
// 以下槽函数在 zxLogInstance 所属线程(MainWindow 主线程)执行,
// 在这里才真正操作 QTextEdit
// 追加日志内容
void onAppendLog(const QString& msg, \
const QColor& color);
// 清空日志内容
void onClearLog();
///////////////////////////////////////////////////////
private:
zxLogInstance();
@ -55,7 +91,3 @@ private:
QString m_sAppDescCN;
QString m_sAppDescEN;
};

@ -16,7 +16,7 @@ public:
static ZxDbSimple* getInstance();
// 关闭
static void closeDb();
static void exit();
// 设置路径,如果_s_ini非空,则从ini文件获取
static void setURL(QString _s_url,
@ -24,15 +24,18 @@ public:
bool bForceReopen = false);
// 获得数据库连接
virtual QSqlDatabase getSimpleDb();
virtual QSqlDatabase& getSimpleDb();
virtual QSqlDatabase* getSimpleDbPtr();
// 是否数据载体(链接)
virtual void releaseDb();
#ifdef _SINGLE_WELL_MODE_
// 针对湛江模式,启用一口井一个db文件模式
bool isDbExtActivated();
void setDbUrlExt(QString url,
bool bForceReopen = false);
virtual QSqlDatabase getSimpleDbExt();
virtual QSqlDatabase& getSimpleDbExt();
virtual QSqlDatabase* getSimpleDbExtPtr();
#endif
@ -41,6 +44,9 @@ public:
void connCommit(QString connectionStr = "");
void connRollback(QString connectionStr = "");
// 尝试长路径,暂未成功
static QString toUncPath(const QString& s);
public:
ZxDbSimple();

@ -163,6 +163,8 @@ protected:
QToolButton* m_pGroupBt;
//内容区容器(折叠时隐藏,展开时显示)
QWidget* m_pContentWx;
// 内容区原先所在的布局,弹窗关闭后需放回原位置。
QLayout* m_pContentHostLayout;
//主布局
QVBoxLayout* m_pLayoutMain;
@ -179,4 +181,6 @@ protected:
// 弹出过程中标志,防止 setParent 引起的 hide 触发恢复逻辑
bool m_bPopupShowing;
int m_nContentMinHeight;
int m_nContentMaxHeight;
};

@ -13,7 +13,7 @@ class I_GUI_RIBBON_EXPORT iWxGroupBar : public QWidget
public:
explicit iWxGroupBar(iRibbonXmlGroup* pGroupXml = NULL, \
explicit iWxGroupBar(iRibbonXmlGroup* pGroupXml = nullptr, \
QWidget *parent = 0);
~iWxGroupBar();
@ -32,6 +32,9 @@ public:
// 返回该 Group 内创建的所有子控件
QVector<QWidget*>& getSubCtrls() ;
//得到里面控件个数是否需要折叠按钮
bool bCollapse();
public:
//初始化
virtual void initUI();
@ -45,6 +48,10 @@ protected:
void initGroupBt();
//初始化控件上部分(主要功能区)
void initCtrlTopUI();
//两种布局
void initCtrlTopGridUI();//网格
void initCtrlTopHorUI(); //水平
//初始化控件下部分(标签区+折叠按钮)
void initCtrlBotUI();
@ -52,7 +59,6 @@ protected:
QWidget* createTabBy(iRibbonXmlTab* pTab);
QWidget* createGroupBy(iRibbonXmlGroup* pGroup);
QWidget* createCmdBy(iRibbonXmlCmd* pCmd, bool bAdd = true);
QWidget* createCmdBy_Btn(iRibbonXmlCmd* pCmd);
QWidget* createCmdBy_Combo(iRibbonXmlCmd* pCmd);
QWidget* createCmdBy_Check(iRibbonXmlCmd* pCmd);

@ -40,6 +40,13 @@ public:
bool fillUIOfRecentProjects(); //更新最近打开菜单项
bool removeFromRecentProjects(QString sUrl);
// 对于
/// @brief 设置某个Tab下某个Group是否
/// @param sID菜单ID
/// @param sName菜单名称
//void setTabGroupCollapse(QString sID, QString sName);
protected:
// paint
@ -134,7 +141,6 @@ protected:
QString m_sAppDescCN;
QString m_sAppDescEN;
// 最近打开项目
enum { MaxRecentProjects = 5 };
QAction* m_oRecentProjectActs[MaxRecentProjects];

@ -27,7 +27,7 @@ public:
double& w, double& h);//预估大小
virtual void drawAxis(QPainter* painter); //绘制坐标
virtual void drawGrids(QPainter* painter, QRectF& rtInner);//Plot网格线
virtual QRectF getAxisRect(); //最大外范围
virtual QRectF getAxisRect(); //坐标轴的最大外范围(含刻度和标题)
// 获取类型
AxisType getAxisType();

@ -1,21 +1,49 @@
#pragma once
#include <QDateTime>
#include "ZxAxisHelper.h"
// 日期类
// ============================================================================
// ZxAxisHelperDate —— 日期/时间类坐标轴的绘制辅助类
// ----------------------------------------------------------------------------
// 【约定】
// 1. 外部值 / m_dStart / m_dEnd / m_vecMainValues 的单位都是"小时"
// (与 ZxSubAxisBase 的现有约定保持一致)
//
// 2. 本 Helper 只是 把值翻译成时间字符串显示出来
// 它不修改 m_vecMainValues / m_dStart / m_dEnd,
// 不影响数据点的位置(数据点位置由 getPosForValue 决定,与本类无关)
//
// 3. 刻度的对齐、间隔的选择,全部在 Helper 内部完成,只用于"显示"
// 即使 m_dtBase 不是整点,刻度也落在 00:00 / 06:00 这类整时间上
//
// 4. m_dtBase 只做"值 ↔ 绝对时间"的映射:
// 绝对时间 = m_dtBase + 值(小时) × 3600 秒
// 它不参与刻度对齐。m_dtBase 是什么时间,都影响不了刻度的对齐
//
// 【使用场景】
// - 用户在现有 Plot 上画完图(用线性轴)
// - 调用 pAxis->setAxisType(AXIS_Date) 切换
// - ZxSubAxisBase::resetHelper 创建本类,并把 m_dtBase 传进来
// - 下一次 paint 时,getTickInfos / drawGrids 自动按"整时间"显示
//
// 【单位换算】
// 本类内部需要 QDateTime 时,临时 ×3600 换成秒;
// 对外(getTickInfos 返回的 key)仍然是"小时",与 m_vecMainValues 一致
// ============================================================================
class I_PLOTBASE_EXPORT ZxAxisHelperDate : public ZxAxisHelper
{
Q_OBJECT
public:
enum TimeTextFormat //刻度文本显示样式
// 刻度文本显示样式
enum TimeTextFormat
{
TTF_Relative_TIU = 0, //相对时间,多少分或多少秒等等
TTF_Relative_Normal, //相对时间,1'35.24'',时分秒模式
TTF_Absolute_Time //绝对时间,格式由format来定
TTF_Relative_TIU = 0, // 相对时间,带单位(如 "+1.50 h")
TTF_Relative_Normal, // 相对时间,时分秒模式(如 "+1:30:00")
TTF_Absolute_Time // 绝对时间,格式由 setTtfFormat 指定,未指定则自动选择
};
public:
@ -23,66 +51,198 @@ public:
explicit ZxAxisHelperDate(ZxSubAxisBase* p);
~ZxAxisHelperDate();
protected:
public:
virtual QRectF getAxisRect(); //最大外范围
///////////////////////////////////////////////////////////////////
// 时间格式相关
// 裁剪区
virtual void clipBounds(QPainter* painter, QRectF& rt);
// 显示模式:时间格式——相对时间、还是绝对时间
void setTtf(TimeTextFormat o);
TimeTextFormat getTtf();
// 绘制函数
virtual void drawTickAndTags(QPainter* painter, QRectF& rt);
virtual void drawOneTickTag(QPainter* painter, double dPos, QString s);
// 针对 相对时间,其 单位
void setTtfUnit(QString s);
QString getTtfUnit();
// 针对 绝对时间,其显示样式,(如 "yyyy-MM-dd HH:mm:ss"),如果为空则自动
void setTtfFormat(QString s);
QString getTtfFormat();
public:
///////////////////////////////////////////////////////////////////
// 增加 基准时间(值 = 0 对应的绝对时间)
// 注意:m_dtBase 只做"值 ↔ 绝对时间"的映射,不参与刻度对齐
void setBaseDt(QDateTime& dt);
QDateTime getBaseDt();
// 该函数暂未启用
QString getTimeBaseUnit();
///////////////////////////////////////////////////////////////////
protected:
///////////////////////////////////////////////////////////////////
// 刻度计算相关
// 取得待显示的刻度文本标识
// 本类不读 m_vecMainValues,而是根据 m_dStart/m_dEnd/m_dtBase
// 自己算"整时间刻度",只用于显示
virtual QMap<double, QString> getTickInfos();
// 预估大小
virtual QRectF getPreferedTickSumRect(QPainter* painter);
virtual void adjustPreferedSize(double& w, double& h);
// 按范围(秒)选"整时间"间隔(秒)
double chooseDateTimeInterval(double dScaleInSecond);
/// @brief 选"单位 + 步长",借鉴了 Chart.js 风格算法
/// @param dScaleInSecond 范围(秒)
/// @param nTargetTickCount 目标刻度数
/// @param nArrIndex kIntervals 索引
/// @param nArrStep 倍数
/// @return:是否成功
/// @note 流程:
/// 1) 从 millisecond 到 year 遍历 gArrTimeScaleDefines
/// 2) 对每个 common 单位,算 rough = range / unitSize
/// 3) 用 _pickOutStep 选一个 1/2/5/10... 步长
/// 4) 用 steps % step == 0 约束修正步长
/// 5) 检查刻度数是否合理
/// 6) 找到第一个有效的,返回
bool _chooseTimeInterval(double dScaleInSecond, int nTargetTickCount, \
int& nArrIndex, int& nArrStep);
// 从 rough 里选一个 1/2/5/10... 的步长
int _pickOutStep(double dRough, int nTargetTickCount);
// 找 ≤ maxStep 且能整除 steps 的最大值
int _findLargestDivisor(int nSteps, int nMaxStep);
// 把 dt 对齐到自然时间边界
// dIntervalInSecond 决定对齐粒度:< 60 → 整秒;< 3600 → 整分;< 86400 → 整时;
// < 28 天 → 当天 00:00;< 365 天 → 当月 1 号;
// ≥ 365 天 → 当年 1 月 1 日
// bDown = true → 向下对齐(地板)
// bDown = false → 向上对齐(天花板)
QDateTime _alignToNatural(const QDateTime& dt, \
double dIntervalInSecond, \
bool bDown);
// 格式化绝对时间(根据范围 + 跨级自动选格式)
// 跨天/月/年时,用 "\r\n" 分隔两行(上一行日期,下一行时间)
QString tickTimeAbsoluteOf(const QDateTime& t, \
double dScaleInSecond, \
bool bFirst, \
const QDate& dtLastDate, \
int nLastMonth, \
int nLastYear);
// 格式化相对时间(相对于 m_dtBase 的偏移)
QString tickTimeRelativeOf(double dSec, \
TimeTextFormat ttf, \
const QString& sUnit) const;
// 按"自然单位"递增
// 天/月/年用 addDays / addMonths / addYears,
// 避免"加固定秒数"在闰年、月长上产生误差
QDateTime advanceDateTime(const QDateTime& dt, \
double dIntervalInSecond);
protected:
// 获取绘制的位置信息
virtual void locateOneTickTag(QPainter* painter, double dPos, QString s, \
///////////////////////////////////////////////////////////////////
// 刻度绘制相关
// 绘制刻度线和标签
virtual void drawTickAndTags(QPainter* painter, QRectF& rt);
// 绘制单个刻度文字(支持两行:日期\r\n时间)
virtual void drawOneTickTag(QPainter* painter, double dPos, QString s);
// 获取刻度文字的位置信息
virtual void locateOneTickTag(QPainter* painter, double dPos, QString s,
QRectF& rt, int& flag);
// 文本尺寸:支持两行
virtual void metricStr(QPainter* painter, QString s, double& w, double& h);
// s1:time, s2:date
QString sumFromDateTime(QString s1, QString s2);
void parseToDateTime(QString s, QString& s1, QString& s2);
// "时间 + 日期"两行文本的解析
void _parseToDateTime(QString s, QString& s1, QString& s2);
// 是否可以显示
// 是否允许显示该刻度(防重叠)
virtual bool canTickShow(QRectF rt);
public:
// ------------------------------------------------------------------------
// 网格线绘制(覆盖基类)
// 主网格线:来自 getTickInfos 的 key → 整时间
// 次网格线:Helper 内部按"整时间"的次间隔生成 → 也是整时间
// ------------------------------------------------------------------------
virtual void drawGrids(QPainter* painter, QRectF& rtInner);
// 刻度标识
QString getLabelStr(double d);
protected:
///////////////////////////////////////////////////////////////////
// 其它
// 裁剪区
virtual void clipBounds(QPainter* painter, QRectF& rt);
// 预估大小(用于布局)
virtual QRectF getPreferedTickSumRect(QPainter* painter);
virtual void adjustPreferedSize(double& w, double& h);
// 内部调整
double adjustScaleAndTicks(double& dMin, double& dMax, \
QVector<double>* pVecTicks = nullptr, \
public:
// ------------------------------------------------------------------------
// 外部若调用,dMin/dMax 单位是"小时"
// 本类实现中不会修改 m_vecMainValues,只返回"次刻度细分数"(5.0)
// ------------------------------------------------------------------------
double adjustScaleAndTicks(double& dMin, double& dMax,
QVector<double>* pVecTicks = nullptr,
bool bConsiderRectZoom = false);
// 基准时间设置
void setBaseDt(QDateTime& dt);
QDateTime getBaseDt();
public:
// 时间设置
void setTtf(TimeTextFormat o);
TimeTextFormat getTtf();
void setTtfFormat(QString s);
QString getTtfFormat();
void setTtfUnit(QString s);
QString getTtfUnit();
QString getTimeBaseUnit();
///////////////////////////////////////////////////////////////////
// 外部显示提取接口
// 取某个值的显示字符串
QString getLabelStr(double d);
// 格式化相对时间(相对于 m_dtBase 的偏移)
QString _labelRelativeTime(double dSec, \
TimeTextFormat ttf, \
const QString& sUnit) const;
// 格式化绝对时间(优先使用用户指定格式)
QString _labelAbsoluteTime(const QDateTime& t, double dScaleInSecond) const;
public slots:
public:
// Chart.js 风格的时间间隔表
struct TimeInterval
{
const char* name; // "second", "minute", ...
double size; // 单位:秒
int steps; // 到上一级的换算步数(-1 表示无)
bool common; // 是否参与自动选择
};
protected:
// 起始时间,对应数据深度0
QDateTime m_dtBase;
// 显示模式
TimeTextFormat m_oTtf;
QString m_sTtfUnit; //对于相对时间,是单位
QString m_sTtfFormat; //对于绝对时间,是format
// 相对时间的单位(如 "sec" / "min" / "hour" / "day")
QString m_sTtfUnit;
// 绝对时间的格式(如 "yyyy-MM-dd HH:mm:ss"),空 = 自动
QString m_sTtfFormat;
// 基准时间(值 = 0 对应的绝对时间)
QDateTime m_dtBase;
// 缓存当前范围(秒),用于格式选择
mutable double m_dCurScaleInSecond;
};

@ -164,9 +164,8 @@ public:
virtual void setTickLabels(QStringList list);
// 这是设置一些辅助信息,比如Date起始,就是0的位置
void setTickExs(QVariant o);
QVariant getTickExs();
//void setTickExs(QVariant o);
//QVariant getTickExs();
// 主次刻度的画笔
QPen getBigGridPen();
@ -330,6 +329,7 @@ protected:
double m_dSpan;
// 这是设置一些辅助信息,比如Date起始,就是0的位置 20190222
// 暂不再启用
QVariant m_oTickExs;
// 临时,不涉及序列化,实时右键间隔比例,秒换成分钟

@ -1,5 +1,6 @@
#pragma once
#include <QDateTime>
#include "ZxSubAxisBase.h"
// 坐标轴X
@ -24,6 +25,21 @@ public:
// getPosForValue: 已知实际坐标,求屏幕坐标
virtual double getValueForPos(double dPos) const;
virtual double getPosForValue(double dVal) const;
// ===== 时间轴快捷方法(仅 X 轴) =====
// 约定:Value 的单位是"小时",基准时间是 m_dtBase(基类已有)
// 这些方法只在 AXIS_Date 时才有意义,其它类型也可以调但结果不保证
// 用 QDateTime 设范围(内部把秒差换算成小时)
void setRangeByDateTime(const QDateTime& dtMin, const QDateTime& dtMax);
// 屏幕位置 ↔ 绝对时间
QDateTime getDateTimeForPos(double dPos) const;
double getPosForDateTime(const QDateTime& dt) const;
// 值(小时) ↔ 绝对时间
double getValueForDateTime(const QDateTime& dt) const;
QDateTime getDateTimeForValue(double dVal) const;
};

@ -0,0 +1,63 @@
#pragma once
#include <QDateTime>
#include "ZxSubAxisX.h"
#ifdef _SCAN_OLD_CODES_
#endif
#ifdef _SCAN_OLD_CODES_
// 该类只是尝试,暂未启用
// 仅供参考
// 时间/日期格式的 X 轴
// 约定:
// - 外部 / 父类 m_dStart/m_dEnd/m_vecMainValues 单位都是"小时"
// - 不覆盖任何基类函数
// - 只提供"基准时间"和"时间快捷方法"
class I_PLOTBASE_EXPORT ZxSubAxisXDate : public ZxSubAxisX
{
Q_OBJECT
ZX_DECLARE_DYNAMIC
public:
ZxSubAxisXDate();
ZxSubAxisXDate(const QString& name);
ZxSubAxisXDate(const ZxSubAxisXDate& c);
public:
virtual void paintBack(QPainter* painter, const ZxPaintParam& param);
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void onLoadTempl(ZxSerializer* ser);
virtual void onSaveTempl(ZxSerializer* ser);
// ===== 基准时间 =====
QDateTime getBaseDateTime() const;
void setBaseDateTime(const QDateTime& dt);
// ===== 快捷方法(内部换算成小时) =====
void setRangeByDateTime(const QDateTime& dtMin, const QDateTime& dtMax);
QDateTime getDateTimeForPos(double dPos) const;
double getPosForDateTime(const QDateTime& dt) const;
double getValueForDateTime(const QDateTime& dt) const;
QDateTime getDateTimeForValue(double dVal) const;
protected:
virtual void resetHelper();
private:
QDateTime m_dtBase;
};
#endif

@ -34,6 +34,7 @@ public:
public:
// 坐标轴相关设置
// nIndexXY:0 x轴,1 左侧y轴,2 右侧y轴
virtual void setAxisX(QString sName, QString sUnit = "");
virtual void setAxisY(QString sName, QString sUnit = "", bool bY2 = false);
virtual void setAxisXY(int nIndexXY, QString sName, QString sUnit = "");
@ -42,8 +43,15 @@ public:
bool bAdjustSpan = false, double dPreferedSpan = -1.0);
virtual void setAxisScaleY2(double dMin, double dMax, VecDouble& vecTicks);
virtual void setAxisScaleXY(int nIndexXY, double& dMin, double& dMax, VecDouble& vecTicks);
///////////////////////////////////////////////////////////////////////////////
// 该函数会逐步废弃
virtual void setAxisXYLog(bool bLogAxis, int nIndexXY);
// 推荐使用该函数
virtual void setAxisXYType(int nIndexXY, AxisType o = AXIS_Linear);
///////////////////////////////////////////////////////////////////////////////
// nIndexXY:0 x轴,1 左侧y轴,2 右侧y轴
ZxSubAxisBase* getAxisOf(int nIndexXY);
void copyAxisScalesTo(iPlotBaseWxT* pDest, int nIndexXY = -1);

@ -48,6 +48,7 @@ public:
// 参数特殊处理
virtual void adjustParaName(QString& sPara);
virtual void adjustParaName_K(QString& sPara);
virtual void adjustParaName_Miu(QString& sPara);
virtual void adjustParaValue(QString sPara, double& d); //取完参数之后,允许再次调整
// 是否某个参数的数据,即从map中清除,
@ -184,7 +185,7 @@ public:
QMap<QString, QVector<WtaiMatrix> >m_mapVecMatrixParas;
//黏度是否启用混合黏度
bool m_bEnableMux;
bool m_bEnableMiux;
double m_dEndQ;

@ -172,6 +172,10 @@ enum m_Res_Type
RT_LINEAR_COMP = 211, //线性复合
RT_FV_RADIAL_COMP = 289,//均质二区径向复合,yinw 20260907,压裂直井 有限导流 径向复合
// xieh再次进行校正 参见 压裂直井-有限导流-径向复合-New.txt 20260915
RT_OW_PF_COMP = 290, //油水-聚合物复合,yinw 20260907
// 水平井
// RT_HMGE = 100, //均质油藏,注释表示前面已经定义,下同
// RT_DUALPRO_PS = 102, //双重孔隙——拟稳态
@ -187,6 +191,7 @@ enum m_Res_Type
RT_VERT_COMP_2 = 351, //直井 径向复合(两区),20260720,xieh针对直井再次增加,部分流程模拟了 RT_SR_COMP
RT_VERT_COMP_3 = 352, //直井 径向复合(三区),20260721,yinw针对直井再次增加
// xieh再次进行校正 参见 直井三区径向复合-有效井径-New.txt 20260915
// 其他废弃
@ -286,7 +291,7 @@ enum Fit_Type
FT_Model = 0, //常规生成模型,其实不属于拟合
FT_Auto, //自动拟合
FT_Plate, //图版拟合
FT_Anal, //试井设计
FT_Design, //试井设计
FT_Unknown
};
@ -294,8 +299,15 @@ enum Fit_Method
{
FM_GaussNewton = 0, //高斯牛顿
FM_GaussNewtonEx, //归一化高斯牛顿
FM_LM, //LM算法(Levenberg Marquardt)
FM_Genetic, //遗传算法
FM_ParticleSwarm, //粒子群算法(Particle Swarm Optimization)
FM_Genetic_LM, //遗传算法+LM方法校正
FM_PSO, //粒子群算法(Particle Swarm Optimization)
FM_PSO_LM, //粒子群算法(Particle Swarm Optimization)+LM方法校正
FM_Unknown
};
@ -364,3 +376,12 @@ struct zxFitParaInfo
#define s_IprPlot_Source "IprSourcePlot"
#define s_IprPlot_Result "IprResultPlot"
// 自动拟合约束条件标识
#define s_AutoFit_LoopMax "LoopMax"
#define s_AutoFit_ErrorMax "ErrorMax"
#define s_AutoFit_Weight "Weight"
#define s_AutoFit_PopulationSize "PopulationSize"
#define s_AutoFit_StagnationLimit "StagnationLimit"
#define s_AutoFit_EliteCount "EliteCount"

@ -52,9 +52,11 @@
// 自动拟合界面参数
#define s_Tag_FA_Method "FaMethod"
#define s_Tag_FA_LoopMax "FaLoopMax"
#define s_Tag_FA_ErrorMax "FaErrorMax"
#define s_Tag_FA_Weight "FaWeight"
#define s_Tag_FA_Paras "FaSelectedParas"
// 单相多相标识
@ -245,9 +247,6 @@
#define s_Wdt_P_Pseu QObject::tr("P_Pseu")
#define s_Wdt_P_Square QObject::tr("P_Square")
// 数值相关
#define s_Nm_Serie "NM"
/////////////////////////////////////////
// enums
@ -463,6 +462,7 @@ enum AnalWxIndex
/// 主要用于批量相关的处理
struct para_input_info
{
QString sNameP;
QString sName;
QString sAlias;
QString sUnit;

@ -52,6 +52,9 @@ public:
// 比如,压力数据在被 井 appendChild 之后,把压力数据的 井号 设置一下
virtual void adjustWithParent();
// 中英文时间列格式兼容
virtual void adjustTimeFormat();
public:
virtual void setCode(const QString &sCode);

@ -4,6 +4,8 @@
#include "mProjectManager_global.h"
class ZxDataObject;
// 本类的目的通过单例实现对管理表名称映射
class M_PROJECTMANAGER_EXPORT iTableNameHelper
{
@ -15,7 +17,17 @@ public:
// 关闭消耗
static void release();
QString getTableNameBy(QString sType);
// 根据类型获取表名
QString getTableNameBy(QString sObjType);
// 根据表名获取类型
QString getObjTypeBy(QString sTableName);
// 根据表名创建数据对象
ZxDataObject* createObjByTableName(QString sTableName);
// 根据类型创建数据对象
ZxDataObject* createObjByObjType(QString sObjType);
private:
@ -28,5 +40,5 @@ private:
static iTableNameHelper* _helper;
QMap<QString, QString> m_mapNames;
QMap<QString, QString> m_mapNameTypes;
};

@ -30,9 +30,9 @@ private:
virtual void initUI();
//新建一组表
bool initNewTable(QMap<QString, ZxDataObject*>& mapDataObj,QMap<QString, VecVariant>& mapDataVec);
bool initNewTable(QMap<QString, ZxDataObject*>& mapDataObjs,QMap<QString, VecVariant>& mapDataVecs);
//得到井号
bool saveWell(QMap<QString, ZxDataObject*> mapDataObj, QMap<QString, VecVariant> mapDataVec);
bool saveWell(QMap<QString, ZxDataObject*> mapDataObjs, QMap<QString, VecVariant> mapDataVecs);
//大字段特殊处理
bool dealBytPressData();
//流量大字段处理

@ -67,7 +67,7 @@ public:
void freshParams(QVector<iResultInfo>& vecResults);
// 追加式传入数据,放在Temp的Tab页
void freshResult_t(QStringList listInfo, bool bWarning = false);
void freshResult_t(QStringList listInfos, bool bWarning = false);
void clearResult_t();
// _o oneTab版

@ -32,6 +32,19 @@ public:
QVector<iCurveDesc> getCurveData();
void checkForDateMode();
/// @brief 对于图形调整坐标轴
/// @param o,即将改为的坐标轴类型
/// @param dtBegin,起始时间
virtual void changeAxisXTypeTo(AxisType o, \
const QDateTime& dtBegin = QDateTime());
/// @brief 从当前绘图对象绑定的数据对象进行获取
/// @param dtBegin,起始时间
/// @param bCheckTimeFormat,是否检测数据对象的时间格式
/// @note 如果bCheckTimeFormat=true,那么只有时间列为 时间格式 数据时才有效
bool getGaugeObjTime(QDateTime& dtBegin, bool bCheckTimeFormat = true);
// 这是在现有图形上追加数据,会自动刷新
void appendCurveData(QVector<iCurveDesc> vecCurveDesc, bool bFreshAxisX = true, bool bFreshAxisY = true);

@ -0,0 +1,87 @@
#pragma once
#include "mModuleDefines.h"
#include "mGuiSysManager_global.h"
class QSqlDatabase;
class ZxDataWell;
class ZxDataObject;
// 井数据保存的辅助Helper类
class M_GUI_SYSMANAGER_EXPORT iDataSaveHelper : public QObject
{
Q_OBJECT
public:
iDataSaveHelper();
public:
/// @brief 把单例中的数据存入数据库(当前井)
/// @param pDataWell 保存至哪口井
/// @param bDataCommonOverwrite 对于基础表格类数据,是否覆盖式保存,
/// true:如果存在则覆盖,如果不存在,则新建
/// false:新建
/// @param bDataPfOverwrite 对于压力流量类数据,是否覆盖式保存,
/// true:如果存在则覆盖,如果不存在,则新建
/// false:新建
/// @note 注:此处所说的单例,指的是数据批量准备时的单例 mToolDataStore::instance()
static bool saveInstanceDataToDb(ZxDataWell* pDataWell, \
bool bDataCommonOverwrite, \
bool bDataPfOverwrite);
private:
/// @brief 把单例中的常规数据存入
/// @param pDataWell 保存至哪口井
/// @param bDataOverwrite 是否覆盖式保存,
/// true:如果存在则覆盖,如果不存在,则新建
/// false:新建
/// @param listTablesToFresh 如果保存成功,则缓存对应的表
/// @note 注:此处所说的单例,指的是数据批量准备时的单例 mToolDataStore::instance()
static bool saveDataCommonToDb(ZxDataWell* pDataWell, \
bool bDataOverwrite, \
QStringList& listTablesToFresh);
/// @brief 把单例中的压力流量数据存入
/// @param pDataWell 保存至哪口井
/// @param bDataOverwrite 是否覆盖式保存,
/// true:如果存在则覆盖,如果不存在,则新建
/// false:新建
/// @param listTablesToFresh 如果保存成功,则缓存对应的表
/// @note 注:此处所说的单例,指的是数据批量准备时的单例 mToolDataStore::instance()
static bool saveDataPfToDb(ZxDataWell* pDataWell, \
bool bDataOverwrite, \
QStringList& listTablesToFresh);
private:
/// @brief 保存单一PF数据
/// @param pDataWell 保存至哪口井
/// @param pObj 数据对象
/// @param vvec 数据部分
/// @param bOverwrited 是否覆盖式保存
static bool saveOneGaugeObj(ZxDataWell* pDataWell, \
ZxDataObject* pObj, \
const VVecVariant& vvec, \
bool bOverwrited);
/// @brief 根据表名等获取或创建数据对象
/// @param pDataWell 保存至哪口井
/// @param sTable 表名
/// @param bDataOverwrite 是否覆盖式保存,
/// true:如果存在则覆盖,如果不存在,则新建
/// false:新建
/// @param bOverwrited 是否覆盖式保存,这是out返回结果,
/// 会根据具体情况,确认,真实的是否是 覆盖模式,即修改pObj模式
static ZxDataObject* getOrCreateDataObjOf(ZxDataWell* pDataWell, \
const QString& sTable, \
bool bDataOverwrite, \
bool& bOverwrited);
private:
};

@ -60,7 +60,6 @@ public:
bool redirectAndOpen(QString sDir, QString sProjName, bool bDbClickMode);
bool simuBtnMore(QPushButton* pBtn, QString sDir, QString sProjName, bool bDbClickMode);
// 默认工作路径
static QString getLastPrjWorkDir();
@ -68,6 +67,10 @@ public:
void setXmlFileGroup(iRibbonXmlGroup* p);
void changeLeft2Mode(bool bReorgUi = true);
// 这是由主菜单Ribbon触发的按钮,比如新建项目、打开项目,需要做的一些事情
// MainFrame可能已经做过一些事情了,在此之后,WelCome需要做什么,比如刷新状态等
bool dealwithRibbons(QString sAction) { return false; }
signals:
// 判断是否enable

@ -57,7 +57,7 @@ private slots:
void slotListWxRecentProjDblClicked(QListWidgetItem* item);
void slotListWxRecentDirDblClicked(QListWidgetItem* item);
private slots:
public slots:
void slotBtnHome();
@ -174,6 +174,10 @@ public:
QStringList& listTags, \
TreeNodeCmd o);
// 这是由主菜单Ribbon触发的按钮,比如新建项目、打开项目,需要做的一些事情
// MainFrame可能已经做过一些事情了,在此之后,WelCome需要做什么,比如刷新状态等
bool dealwithRibbons(QString sAction);
private:
protected:
@ -183,15 +187,10 @@ protected:
signals:
// 判断是否enable
//void sigBtnEnabled(QString sName, int nID, bool& bEnabled);
// 选定后即将打开(因为接口的特殊性,sDir需要带有ProjName)
void sigProjSelected(QString sDir, QString sProj, bool& bOk);
// 获取当前打开的Project的全路径
//void sigGetCurProjFullpath(QString& s);
// 删除工区后的最近打开项目的刷新
void sigProjDeleted(QString sPath);
@ -204,6 +203,18 @@ signals:
// 命令传递
void sigAction2Main(QString sAction, bool& bExecuted);
////////////////////////////////////////////////////////////
// 这些信号已经不再启用,只是为了接口统一而保留
// 判断是否enable
void sigBtnEnabled(QString sName, int nID, bool& bEnabled);
// 获取当前打开的Project的全路径
void sigGetCurProjFullpath(QString& s);
//
////////////////////////////////////////////////////////////
private:
// 当前模块,默认为WTAI

@ -2,8 +2,10 @@
#include "mModuleDefines.h"
#include "iDlgBase.h"
//#include "iDsDefines.h"
#include "mGuiSysManager_global.h"
class QFile;
class ZxDataWell;
class ZxDataObject;
@ -71,6 +73,7 @@ private:
void stepProgressBar(int nIndex);
void finishProgressBar();
signals:
private slots:
@ -82,10 +85,13 @@ private slots:
void on_cbxDataGaugeP_clicked();
void on_cbxDataGaugeT_clicked();
void on_btnBatchLoad_clicked();
void on_tbxWellName_editingFinished();
void on_btnOK_clicked();
void on_btnCancel_clicked();
protected:
Ui::iWxWellNew *ui;
@ -95,5 +101,9 @@ protected:
// 为了方便
QMap<QString, QCheckBox*> m_mapOptionCbxs;
// 临时变量,是否需要考虑单例(即批量处理数据模式)
// 前提:批量处理按钮 弹出并且正常操作
bool m_bInstanceNeeded;
};

@ -25,8 +25,8 @@ public:
void setBrother(TreeWxMain* p);
void setUnableSP(bool b);
// 根据某节点获取其父井节点的Code
virtual QString getParentWellCodeOf(TreeItemBase* p);
// 根据某节点获取其父井节点的Code或Name
virtual QString getParentWellCodeOrNameOf(TreeItemBase* p, bool bCode = true);
// 获取特定节点对应的井、成果信息
bool getObjCodeInfos(QTreeWidgetItem* p,

@ -65,6 +65,8 @@ private:
QVector<iCurveDesc> m_vecCurveDesc;
QMap<QString, QStringList> m_mapCdConfigs;
QMutex m_mutex;
};
#define _curveHelper iModelCurveDesc::getInstance()

@ -18,6 +18,7 @@ class iDockBaseWx;
class ZxDataWell;
class ZxDataGaugeBase;
class iGuiPlotPF;
class ZxPlot;
class iGuiPlot;
@ -172,6 +173,46 @@ public:
// 该信息在加载时,非常关键,在创建窗体时,就需要知晓
virtual QString _getPrevInfos4Save();
/////////////////////////////////////////////////////////////////////////////////
//
/// @brief 对于图形调整坐标轴(对于反序列过程不予考虑)
/// @param pWxPlotPF,曲线图PF
/// @param o,即将改为的坐标轴类型
/// @param pDataObjPorF 数据对象,压力或流量均可,因为二者是统一的x轴坐标,只是为了获取起始时间
virtual void changePlotAxisXTypeTo(iGuiPlotPF* pWxPlotPF, \
AxisType o, \
const ZxDataGaugeBase* pDataObjPorF = nullptr);
/// @brief 对于图形调整坐标轴(对于反序列过程不予考虑)
/// @param pWxPlotPF,曲线图PF
/// @param o,即将改为的坐标轴类型
/// @param dtBegin,起始时间
virtual void changePlotAxisXTypeTo(iGuiPlotPF* pWxPlotPF, \
AxisType o, \
const QDateTime& dtBegin /*= QDateTime()*/);
/// @brief 对于图形调整坐标轴(对于反序列过程不予考虑)
/// @param pWxPlot,曲线图
/// @param o,即将改为的坐标轴类型
/// @param pDataObj 数据对象,压力或流量
virtual void changePlotAxisXTypeTo(iGuiPlot* pWxPlot, \
AxisType o, \
const ZxDataGaugeBase* pDataObj = nullptr);
/// @brief 对于图形调整坐标轴(对于反序列过程不予考虑)
/// @param pWxPlot,曲线图
/// @param o,即将改为的坐标轴类型
/// @param dtBegin,起始时间
virtual void changePlotAxisXTypeTo(iGuiPlot* pWxPlot, \
AxisType o, \
const QDateTime& dtBegin /*= QDateTime()*/);
//
/////////////////////////////////////////////////////////////////////////////////
public:
// 相对通用的函数:某个数据对象(序列化对象)

@ -235,6 +235,12 @@ public:
/// @note 这些参数值通常存于Pvt:Header之中
bool getPvtParaValues(QStringList listParas, QMap<QString, double>& map);
/// @brief 获取 Pvt 页面中,混合黏度相关内容
/// @param map 返回结果,具体参数
/// @param bEnableMiux 返回结果,是否启用混合黏度
/// @note 这些参数值通常存于Pvt:Header之中
bool getPvtMixMiuAbouts(QMap<QString, double>& map, bool& bEnableMiux);
/// @brief 获取 Diffusion页面中,某个参数的具体数值
/// @param dso,参数,代表是相渗还是压敏还是吸附
/// @param sPara,参数,英文标识而且大小写敏感

@ -52,7 +52,7 @@ class iWxDeConv;
class iWxModelClassify;
class iWxNmBridge;
class iWxMixVis;
class iWxMixMiu;
class iDynSkinInfo;
@ -436,8 +436,9 @@ public slots:
//模型时间划分
void slotTimeScales();
// 注意:该函数暂不再启用,统一放入PVT界面之中进行处理
//计算混合黏度
void slotCalMixViscosity();
void slotMixMiu();
// 表皮
void slotToS(bool bFromTime);
@ -473,7 +474,7 @@ public slots:
void slotFreshChartsA();
// (刷新结果)拟合后拟合误差及拟合次数展示
void slotFreshResults_t(QStringList listInfo);
void slotFreshResults_t(QStringList listInfos);
void slotFreshResults_m();
// 基础参数对话框流体类型发生改变
@ -766,7 +767,8 @@ private:
iWxNmBridge* m_pWxNmBridge; //数值Nm桥接器
iWxMixVis* m_pWxMixVis;//混合黏度计算
// 注意:该变量暂不再启用,统一放入PVT界面之中进行处理
QMap<QString, double> m_mapMixMius; //混合黏度相关数据
VVecDouble m_vvecTempFitP; //反序列化获取的P拟合,临时
QString m_sTempAnalRunID; //反序列化获取的AnalRunID,临时
@ -778,6 +780,7 @@ private:
bool m_bAutoReverse;//临时,不涉及序列化
bool m_bFreshingByAutoFit;//是否正在刷新自动拟合过程曲线,临时,不涉及序列化
// TODO 20250228 对于多个流动段分析成果情况下,加载成果,右侧空白,权益之际的处理
bool m_bRelayouted;//临时,不涉及序列化

@ -1,6 +1,7 @@
#pragma once
#include "iDlgBase.h"
#include "mAlgDefines.h"
#include "mToolDeConv_global.h"
namespace Ui {
@ -20,6 +21,7 @@ class iGuiPlotPF;
class ZxObjCurvePressure;
class ZxObjCurveFlow;
class ZxObjCurveBase;
class ZxObjBase;
class ZxSegmentInfo;
class iGridRowUtils;
@ -34,10 +36,21 @@ public:
explicit iWxDeConv(QWidget* parent = 0);
~iWxDeConv();
// 设置数据及流动段信息
/// @brief 设置数据及流动段信息
/// @param pCurveP 压力史曲线
/// @param pCurveF 流量史曲线
/// @param pSegmentInfo 流动段信息载体
/// @param wft 相态,油气水相(注:此处指的是主相)
void setDvDataInfos(ZxObjCurvePressure* pCurveP, \
ZxObjCurveFlow* pCurveF, \
ZxSegmentInfo* pSegmentInfo);
ZxSegmentInfo* pSegmentInfo, \
WellFluidType wft = WFT_Oil);
/// @brief 设置数据:原始双对数中的压力和压力导数
/// @param pCurveRawSource 双对数图中的实际压力曲线
/// @param pCurveRawDeriv 双对数图中的实际压力导数
void setRawDblCurves(ZxObjBase* pCurveRawSource, \
ZxObjBase* pCurveRawDeriv);
// 初始化
virtual void initUI();
@ -68,6 +81,7 @@ protected:
// virtual void paintEvent(QPaintEvent*);
// virtual void resizeEvent(QResizeEvent*);
// 序列化接口
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
@ -89,9 +103,16 @@ public slots:
protected:
// 属性绑定
void bindDockPty(IxPtySource* pPtyObj);
void simuSelectCurve(); //模拟选择第一条曲线
// 模拟选择第一条曲线
void simuSelectCurve();
// 曲线选择后触发表个数据刷新
void changeWithCurve(ZxObjCurveBase* pCurve);
// 表头控制(关联)
QStringList getTableTitlesBy(ZxObjCurveBase* pCurve);
protected:
@ -103,15 +124,18 @@ protected:
// Plot 相关
void updateSubPlotDbLog(); //双对数(数据:从反褶积结果中获取)
void updateSubPlotDbLog_Raw(); //双对数(数据:原始双对数中的压力和压力导数)
void updateSubPlotPF(); //压力+流量(数据:从原始绑定的压力流量数据曲线中获取)
void updateSubPlotPF_BSPIN(); //BSPIN压力数据(数据:从反褶积结果中获取)
// 内部更新图形接口
void _updateSubPlot(bool bHistPF, \
QVector<iCurveDesc>& vecDescs, \
bool isAdd);
void _changeCurveAttributes(iGuiPlot* pWxPlot);
void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true); //false时,只清空曲线不清空点
// false时,只清空曲线不清空点
void clearChart(iGuiPlot* pWxPlot, bool bClearAll = true);
// 结果表
// void updateRstTables();
@ -125,6 +149,8 @@ private slots:
void on_btnCal_clicked();
void on_cbxAutoCal_clicked();
void on_cbxShowRawDblLogCurves_clicked();
void on_btnOK_clicked();
void on_btnCancel_clicked();
@ -134,17 +160,14 @@ private:
protected:
// 绘图
iGuiPlot* m_pWxPlot;
iGuiPlotPF* m_pWxPlotPF;
// 左侧输入
// 布局(左侧)
iGridRowUtils* m_pGridItemUtils;
QStringList m_listParas; //哪些参数,对应英文标识
// 参数列表(左侧)
QMap<QString, QVariant> m_mapParas;
// 中间绘图区
iGuiPlot* m_pWxPlot;
iGuiPlotPF* m_pWxPlotPF;
// 右侧属性框
ZxPtyDock* m_pDockPty;
@ -153,10 +176,20 @@ protected:
// 调用的算法
cmAlgDeConv* m_pAlg;
// 参数列表(左侧)
QMap<QString, QVariant> m_mapParas;
///////////////////////////////////////////////////
// 数据部分,从外部传入指针,此处不负责序列化
// VVecDouble* m_pVvecDataF; //流量数据
// VVecDouble* m_pVvecDataP; //压力数据
ZxSegmentInfo* m_pSegInfo;
ZxObjCurvePressure* m_pBindCurveP;
ZxObjCurveFlow* m_pBindCurveF;
ZxObjCurvePressure* m_pBindCurveP; //压力史曲线
ZxObjCurveFlow* m_pBindCurveF; //流量史曲线
ZxSegmentInfo* m_pSegInfo; //流动段信息载体
WellFluidType m_oWft; //相态,油气水相(注:此处指的是主相)
ZxObjBase* m_pCurveRawSource; //双对数图中的实际压力曲线
ZxObjBase* m_pCurveRawDeriv; //双对数图中的实际压力导数
///////////////////////////////////////////////////
};

@ -48,7 +48,8 @@ public:
#ifdef _SCAN_OLD_CODES_
// 在单模式向导弹出时,允许对界面做一些调整,比如按钮状态,以拟压力为主
virtual void adjustUiBeforeShow();
#endif''
#endif
public:
virtual void onSerialize(ZxSerializer* ser);

@ -0,0 +1,91 @@
#pragma once
#include "iDlgBase.h"
#include "mAlgDefines.h"
#include "mToolPvt_global.h"
namespace Ui {
class iWxMixMiu;
}
// 混合黏度计算的对话框
class M_TOOL_PVT_EXPORT iWxMixMiu : public iDlgBase
{
Q_OBJECT
public:
explicit iWxMixMiu(QWidget *parent = 0);
~iWxMixMiu();
virtual void initUI();
/// @brief 初始传递过来的信息
/// @param mapValues, 分别包括 Miuo、Miuw、Fw、Miux
/// @param bEnableMiux, 是否启用
/// @param wft, 相态
bool setMixInfos(const QMap<QString, double>& mapValues, \
const bool bEnableMiux, \
const WellFluidType wft);
/// @brief 返回相关信息
/// @param mapValues, 分别包括 Miuo、Miuw、Fw、Miux
/// @param bEnableMiux, 是否启用
bool getMixInfos(QMap<QString, double>& mapValues, \
bool& bEnableMiux);
/// @brief 由外界调整参数(比如PVT界面修改了Miuo)后自动刷新计算
/// @param mapValues, 分别包括 Miuo、Miuw、Fw、Miux
/// @note 内部已经包括是油气水了
bool freshByParaValue(QMap<QString, double>& mapValues);
public:
// 序列化
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void copyFrom(ZxUiBase* p);
private:
double getParaOf(QString s, QMap<QString, double>* pMapPtr, \
const double dDefault = 0.0);
void makesureFw(double& dFw, const double dMax = 100.0);
void cacheTbxValue2Map(QMap<QString, QVariant>& map, QString sPara, \
QLineEdit* pTbx, QComboBox* pCbxBinding, \
bool bNumber = true, \
bool bIgnoreIfNull = true);
public slots:
void slotCal();
void slotApply();
void slotClose();
void slotSliderChanged(int);
void slotFwEditingFinished();
protected slots:
/// @brief 对于参数/单位绑定的情形,数据编辑,允许外部进行判断是否合理
/// @param sPara 具体哪个参数,英文标识
/// @param baseValue 基准数值,并非显示数值
/// @param bValid 是否有效的数值,返回值
virtual void slotValidateParaInput(const QString sPara, const double baseValue, bool& bValid);
signals:
void sigMixMiuRsts(QMap<QString, double>&, bool);
private:
Ui::iWxMixMiu *ui;
QMap<QString, double> m_mapValues;
WellFluidType m_oWft;
bool m_bEnableMiux;
};

@ -63,6 +63,13 @@ public:
/// @note 这些参数值通常存于Header之中
bool getPvtParaValues(QStringList listParas, QMap<QString, double>& map);
/// @brief 获取 Pvt 页面中,混合黏度相关内容
/// @param map 返回结果,具体参数
/// @param bEnableMiux 返回结果,是否启用混合黏度
/// @note 这些参数值通常存于Pvt:Header之中
bool getPvtMixMiuAbouts(QMap<QString, double>& map, bool& bEnableMiux);
/// @brief 根据 Pvt页面中,各自的算法,进行重新计算(目前暂时用于CO2模块之中)
/// @param sPara,参数,通常以英文标识为准
/// @param mapInputs 该算法涉及的输入参数

@ -8,6 +8,7 @@ namespace Ui {
class iWxPvtSubHeader;
}
class iWxMixMiu;
class M_TOOL_PVT_EXPORT iWxPvtSubHeader : public iWxPvtBase
{
Q_OBJECT
@ -26,6 +27,12 @@ public:
/// @brief 根据当前的相态listPhases、以及pft来决定,当前显示哪些物性参数
QStringList getNeededParas(const QStringList& listPhases, PvtFluidType pft);
/// @brief 获取 Pvt 页面中,混合黏度相关内容
/// @param map 返回结果,具体参数
/// @param bEnableMiux 返回结果,是否启用混合黏度
/// @note 这些参数值通常存于Pvt:Header之中
bool getPvtMixMiuAbouts(QMap<QString, double>& map, bool& bEnableMiux);
// 根据当前是解析还是数值进行简单调整(该函数在initUI之前)
void adjustUI(bool bAnalMode);
@ -149,11 +156,19 @@ private slots:
// void on_cbxWater_clicked();
// void on_cbxCondense_clicked();
/// @brief 返回相关信息
/// @param mapValues, 分别包括 Miuo、Miuw、Fw、Miux
/// @param bEnableMiux, 是否启用
void slotMixMiuRsts(QMap<QString, double>& mapValues, \
bool& bEnableMiux);
void on_cbxUseAdvanced_clicked();
void on_btnFresh_clicked();
void on_btnDefault_clicked();
void on_btnMixMiu_clicked();
private:
void onFluidTypeChanged(PvtFluidClass opMain, PvtFluidType opSub);
@ -197,4 +212,9 @@ private:
bool m_bAnalMode; //临时不涉及序列化
QMap<QString,double> m_mapDefaultValues; //临时不涉及序列化
bool m_bMixMiuSupported;
QMap<QString, double> m_mapMixMius; //混合黏度相关数据
};

@ -292,4 +292,5 @@ protected:
QList<IxPtySource*> m_listProps;
bool m_bModified;
};

Loading…
Cancel
Save