喷嘴计算程序更新,完成粘度计算,加水露点和水含量换算未完成

This commit is contained in:
廖德云 2025-03-30 23:24:40 +08:00
parent 7965caba67
commit 2658dde637
18 changed files with 2113 additions and 1319 deletions

@ -1 +1 @@
Subproject commit 26446e5304424bcfe69036a30867cc428e5a929c
Subproject commit ab0a15c456bcaeff87f46d56d390162de82d7e6f

View File

@ -0,0 +1,146 @@
package com.ruoyi.ngCalTools.controller;
import com.ruoyi.ngCalTools.model.GasProps;
import com.ruoyi.system.controller.UnitConvert;
import com.ruoyi.system.service.ISysUnitConvertService;
import com.ruoyi.system.service.impl.SysUnitConvertServiceImpl;
import org.apache.commons.math3.analysis.UnivariateFunction;
import org.apache.commons.math3.analysis.solvers.BracketingNthOrderBrentSolver;
import org.apache.commons.math3.analysis.solvers.NewtonRaphsonSolver;
import org.apache.commons.math3.exception.TooManyEvaluationsException;
/**
* GB/T 22634-2008 天然气水含量与水露点工业级换算
* 需配合气体性质计算模块GasController使用
*/
public class GBT22634WaterContentCalc {
// 安托因方程常数GB/T 22634规定
private static final double ANTOINE_A = 8.07131;
private static final double ANTOINE_B = 1730.63;
private static final double ANTOINE_C = 233.426;
private static final double MMHG_TO_KPA = 0.1333223684;
/**
* 工业级水含量计算含真实气体修正
* @param dewPointTemp 水露点温度
* @param pressure 绝对压力kPa
* @param gasProps 气体组分属性
* @return 水含量mg/Sm³
*/
public double calculateWaterContent(double dewPointTemp,
double pressure,
GasProps gasProps) {
// 1. 计算饱和水蒸气压
double pWater = calculateWaterVaporPressure(dewPointTemp);
// 2. 获取压缩因子
GasController.Crit(gasProps,0); // 调用实际压缩因子计算模块
// 3. 计算真实摩尔体积
double molarVolume = calculateMolarVolume(dewPointTemp, pressure, gasProps.getdZf());
// 4. 计算水含量
return (pWater / (pressure - pWater)) * (18.01528 * 1e6) / molarVolume;
}
/**
* 逆向计算水露点温度工业级精度
* @param waterContent 水含量mg/Sm³
* @param pressure 绝对压力kPa
* @param gasProps 气体组分属性
* @return 水露点温度精度±0.01
*/
public double calculateDewPoint(final double waterContent,
final double pressure,
final GasProps gasProps) {
// NewtonRaphsonSolver solver = new NewtonRaphsonSolver(1e-4);
// 使用5阶布伦特法求解器无需导数
BracketingNthOrderBrentSolver solver = new BracketingNthOrderBrentSolver(
1e-4, // 相对精度
1e-6, // 绝对精度
1e-10, // 函数值精度
5 // 多项式阶数
);
UnivariateFunction function = new UnivariateFunction() {
@Override
public double value(double tempC) {
try {
// 创建临时气体属性副本
GasProps tempProps = gasProps.clone();
tempProps.setdTf(tempC + 273.15); // 更新温度
tempProps.setdPf(pressure);
double calc = calculateWaterContent(tempC, pressure, tempProps);
return calc - waterContent;
} catch (Exception e) {
return Double.NaN;
}
}
};
try {
return solver.solve(100, function, -50.0, 100.0, 20.0); // 初始猜测20
} catch (TooManyEvaluationsException e) {
throw new ArithmeticException("露点计算未收敛,请检查输入参数");
}
}
// 饱和水蒸气压计算GB/T 22634规定方法
private double calculateWaterVaporPressure(double tempC) {
if(tempC < 0 || tempC > 100) {
throw new IllegalArgumentException("温度超出GB/T 22634适用范围");
}
return Math.pow(10, ANTOINE_A - ANTOINE_B / (tempC + ANTOINE_C)) * MMHG_TO_KPA;
}
// 真实气体摩尔体积计算
private static double calculateMolarVolume(double tempC, double pressure, double Z) {
return Z * 8.3144621 * (tempC + 273.15) / pressure;
}
// // 气体属性类示例结构
// public static class GasProps implements Cloneable {
// private double temperature; // K
// private double pressure; // kPa
// private double[] composition; // 组分摩尔分数
//
// // 克隆方法用于迭代计算
// @Override
// public GasProps clone() {
// GasProps clone = new GasProps();
// clone.temperature = this.temperature;
// clone.pressure = this.pressure;
// clone.composition = this.composition.clone();
// return clone;
// }
//
// // Getter/Setter
// public double getTemperature() { return temperature; }
// public void setTemperature(double temperature) { this.temperature = temperature; }
// public double getPressure() { return pressure; }
// public void setPressure(double pressure) { this.pressure = pressure; }
// public double[] getComposition() { return composition; }
// public void setComposition(double[] composition) { this.composition = composition; }
// }
//
// // 示例调用
// public static void main(String[] args) {
// // 初始化气体属性
// GasProps gas = new GasProps();
// gas.setPressure(5000.0); // 5 MPa
// gas.setTemperature(293.15); // 20
// gas.setComposition(new double[]{0.95, 0.03, 0.02}); // 示例组分
//
// // 正向计算
// double wc = calculateWaterContent(10.0, 5000.0, gas);
// System.out.printf("5MPa下10℃露点对应水含量%.2f mg/Sm³\n", wc);
//
// // 逆向计算
// double dewPoint = calculateDewPoint(1000.0, 5000.0, gas);
// System.out.printf("5MPa下1000mg/Sm³对应露点%.2f℃\n", dewPoint);
// }
}

View File

@ -3,31 +3,33 @@ package com.ruoyi.ngCalTools.controller;
// GasController.java
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.ngCalTools.model.GasProps;
import com.ruoyi.ngCalTools.model.FlowProps;
import com.ruoyi.ngCalTools.model.GasProps;
import com.ruoyi.ngCalTools.service.DetailService;
import com.ruoyi.ngCalTools.service.GBT11062Service;
import com.ruoyi.ngCalTools.service.ThermService;
import com.ruoyi.ngCalTools.utils.GasConstants;
import com.ruoyi.system.controller.SysUnitConvertController;
import com.ruoyi.system.controller.UnitConvert;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/NGCalcTools")
public class GasController {
private final UnitConvert unitConvert;
public ThermService thermService;
public DetailService detailService;
public GBT11062Service gbt11062Service;
public static ThermService thermService;
public static DetailService detailService;
public static GBT11062Service gbt11062Service;
@Autowired
private UnitConvert unitConvert=new UnitConvert();
public GasController(UnitConvert unitConvert) {
this.unitConvert = unitConvert;
}
@PostMapping ("/ngCalc")
public AjaxResult ngCalc(@RequestBody FlowProps flowProps) {
public AjaxResult ngCalc(@RequestBody FlowProps flowProps) {
thermService = new ThermService();
detailService = new DetailService();
gbt11062Service = new GBT11062Service();
@ -46,6 +48,31 @@ public class GasController {
}
gasProps.dTf = tempTf;
gasProps.dCbtj = flowProps.getdCbtj();
switch (gasProps.dCbtj)
{
case 2:
gasProps.setdPb(101325);
gasProps.setdTb( 273.15);
flowProps.setdPb_M(101325);
flowProps.setdTb_M(273.15);
break;
case 1:
gasProps.setdPb(101325);
gasProps.setdTb( 288.15);
flowProps.setdPb_M(101325);
flowProps.setdTb_M(288.15);
break;
case 0:
gasProps.setdPb(101325);
gasProps.setdTb( 293.15);
flowProps.setdPb_M(101325);
flowProps.setdTb_M(293.15);
break;
}
String[] stringArray = flowProps.getdngComponents().split("_");
double[] doubleArray = new double[stringArray.length]; // 遍历字符串数组将每个元素转换为 double 类型
for (int i = 0; i < stringArray.length; i++) {
@ -58,21 +85,19 @@ public class GasController {
}
gasProps.adMixture = doubleArray;
Crit(gasProps, 0); //计算临界流函数所有参数都计算了
return AjaxResult.success(gasProps);
return AjaxResult.success(gasProps);
}
public void ngCalcVoid( FlowProps flowProps,GasProps gasProps) {
public static void ngCalcVoid(FlowProps flowProps, GasProps gasProps) {
thermService = new ThermService();
detailService = new DetailService();
gbt11062Service = new GBT11062Service();
Crit(gasProps, 0); //计算临界流函数所有参数都计算了
Crit(gasProps, 0); //计算临界流函数所有参数都计算了
}
public int NG_Cal_Init() {
public static int NG_Cal_Init() {
//create object for calculating density
if (null == (detailService=new DetailService())) {
return GasConstants.MEMORY_ALLOCATION_ERROR;
@ -86,7 +111,7 @@ public class GasController {
return GasConstants.NG_Cal_INITIALIZED;
}// NG_Cal_Init
public int NG_Cal_UnInit() {
public static int NG_Cal_UnInit() {
// delete the objects (if they exist)
detailService = null;
thermService = null;
@ -94,7 +119,7 @@ public class GasController {
}
public double Crit(GasProps gasProps, double dPlenumVelocity)
public static double Crit(GasProps gasProps, double dPlenumVelocity)
{
//variables local to function
double DH, DDH, S, H;
@ -115,23 +140,7 @@ public class GasController {
}
}
switch (gasProps.dCbtj)
{
case 2:
gasProps.dPb = 101325;
gasProps.dTb = 273.15;
break;
case 1:
gasProps.dPb = 101325;
gasProps.dTb = 288.15;
break;
case 0:
gasProps.dPb = 101325;
gasProps.dTb = 293.15;
break;
}
//begin by calculating densities and thermodynamic properties
thermService.Run(gasProps, detailService);

View File

@ -0,0 +1,133 @@
package com.ruoyi.ngCalTools.controller;
import com.ruoyi.ngCalTools.model.FlowProps;
import com.ruoyi.ngCalTools.model.GasProps;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class NozellFlowCalc {
// 喷嘴类型枚举
public enum NozzleType {
TOROIDAL, CYLINDRICAL
}
// 计算流出系数
public static double calculateDischargeCoefficient(NozzleType nozzleType, double reynoldsNumber) {
double a, b, c, d, e, f, n;
switch (nozzleType) {
case TOROIDAL:
a = 0.9990;
b = 3.415;
c = 0.0031;
d = 0.690;
e = 10;
f = 120000;
n = 0.5;
break;
case CYLINDRICAL:
a = 1.0000;
b = 6.341;
c = 0.008; // 假设天然气按用户场景取c值
d = 3.000;
e = 6;
f = 170000;
n = 0.5;
break;
default:
throw new IllegalArgumentException("不支持的喷嘴类型");
}
double numerator = c - d * Math.pow(reynoldsNumber, -n);
double denominator = 1 + Math.exp(e - reynoldsNumber / f);
return (a - b * Math.pow(reynoldsNumber, -n)) - numerator / denominator;
}
// 计算雷诺数
public static double calculateReynoldsNumber(double pipeDiameter, double velocity, double dynamicViscosity, double density) {
return (pipeDiameter * velocity * density) / dynamicViscosity;
}
// 迭代计算流出系数和雷诺数
public static void iterativeCalculation(FlowProps flowProps, GasProps gasProps, NozzleType nozzleType) {
double tolerance = 1e-6;
int maxIterations = 100;
double prevCd = 0;
double prevRe = 0;
for (int i = 0; i < maxIterations; i++) {
double velocity = calculateVelocity(flowProps, gasProps);
double reynoldsNumber = calculateReynoldsNumber(
flowProps.getdPipeD(),
velocity,
gasProps.getdMu(),
gasProps.dRhof
);
double cd = calculateDischargeCoefficient(nozzleType, reynoldsNumber);
// 检查收敛
if (Math.abs(cd - prevCd) < tolerance && Math.abs(reynoldsNumber - prevRe) < tolerance) {
flowProps.setdCdCorrect(cd);
flowProps.setdRnPipe(reynoldsNumber);
return;
}
prevCd = cd;
prevRe = reynoldsNumber;
}
throw new RuntimeException("迭代未收敛");
}
// 计算流速
private static double calculateVelocity(FlowProps flowProps, GasProps gasProps) {
// 假设工况体积流量计算逻辑需根据实际流量公式补充
// 这里简化示例实际需根据ISO公式结合临界流函数等计算
return flowProps.getdVFlowf() / (Math.PI * Math.pow(flowProps.getdPipeD() / 2, 2));
}
// 计算质量流量示例
public static double calculateMassFlow(FlowProps flowProps, GasProps gasProps, NozzleType nozzleType) {
iterativeCalculation(flowProps, gasProps, nozzleType);
double criticalFlowFactor = gasProps.dCstar;
double area = Math.PI * Math.pow(flowProps.getdOrificeD() / 2, 2);
double pressure = flowProps.getdPf();
double temperature = flowProps.getdTf();
double gasConstant = calculateGasConstant(gasProps);
// 根据ISO公式计算理论质量流量再结合流出系数
double theoreticalMassFlow = area * criticalFlowFactor * pressure / Math.sqrt((gasConstant / gasProps.dMrx) * temperature);
return flowProps.getdCdCorrect() * theoreticalMassFlow;
}
// 计算气体常数示例
private static double calculateGasConstant(GasProps gasProps) {
return 8.314 / gasProps.dMrx; // 通用气体常数处理需根据实际精确计算
}
// 高精度计算辅助方法
private static double highPrecisionCalculate(double value, int scale) {
return new BigDecimal(value).setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
//
// public static void main(String[] args) {
// FlowProps flowProps = new FlowProps();
// GasProps gasProps = new GasProps();
// NozzleType nozzleType = NozzleType.CYLINDRICAL;
//
// // 初始化输入参数
// flowProps.dPipeD = 0.1; // 示例管道直径
// flowProps.dOrificeD = 0.05; // 示例喉径
// gasProps.dMu = 0.00001; // 示例动力粘度
// gasProps.dRhof = 1.0; // 示例工况密度
// gasProps.dCstar = 0.9; // 示例临界流函数
//
// // 执行计算
// double massFlow = calculateMassFlow(flowProps, gasProps, nozzleType);
// System.out.println("计算的质量流量: " + massFlow);
// }
}

View File

@ -0,0 +1,131 @@
package com.ruoyi.ngCalTools.controller;
import com.ruoyi.ngCalTools.model.FlowProps;
import com.ruoyi.ngCalTools.model.GasProps;
import com.ruoyi.ngCalTools.service.DetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class NozellFlowCalcISO9300 {
@Autowired
private GasController gasController = new GasController();
// 计算流出系数Cd雷诺数Re及流量示例中仅展示关键步骤
public void calculateFlowCoefficient(FlowProps flowProps, GasProps gasProps) {
// 获取基本参数
double dOrifice = flowProps.getdOrificeD();
double dPipe = flowProps.getdPipeD();
double PStatic = flowProps.getdPf();
double TStatic = flowProps.getdTf();
// 气体属性
double R = DetailService.RGASKJ;
double kappa = gasProps.getdKappa();
double rhoRef = gasProps.getdRhob();
double Cstar = gasProps.getdCstar();
// 计算几何参数
double AOrifice = Math.PI * Math.pow(dOrifice, 2) / 4;
double APipe = Math.PI * Math.pow(dPipe / 2, 2);
// 初始参数
double Cd = 0.99; // 初始猜测值
double rho = gasProps.getdRhof(); // 基于静态条件的初始密度
double mu = gasProps.getdMu(); // 初始粘度
double Re;
// 迭代控制
double tolerance = 1e-6;
int maxIterations = 100;
boolean converged = false;
for (int i = 0; i < maxIterations; i++) {
// 计算质量流量
double qm = Cd * AOrifice * Cstar * Math.sqrt(gasProps.getdZf() * rho * gasProps.getdPf());
// 计算流速
double velocity = qm / (rho * APipe);
// 计算滞止参数
double[] stagnation = calculateStagnationProperties(
PStatic, TStatic, velocity, kappa, R);
double P0 = stagnation[0];
double T0 = stagnation[1];
// 更新物性参数
gasProps.setdPf(P0);
gasProps.setdTf(T0);
gasController.ngCalc(flowProps);
double newRho =gasProps.getdRhof();
double newMu = gasProps.getdMu();
// 计算雷诺数
Re = (4 * qm) / (Math.PI * dOrifice * newMu);
// 获取喷嘴系数
double[] coeffs = getNozzleCoefficients(flowProps.getdNozzleType());
double a = coeffs[0], b = coeffs[1], c = coeffs[2],
d = coeffs[3], e = coeffs[4], f = coeffs[5], n = coeffs[6];
// 计算新的Cd
double term1 = a - b * Math.pow(Re, -n);
double term2 = (c - d * Math.pow(Re, -n)) / (1 + Math.exp(e - Re / f));
double newCd = term1 - term2;
// 检查收敛
if (Math.abs(newCd - Cd) < tolerance &&
Math.abs(newRho - rho) < tolerance &&
Math.abs(newMu - mu) < tolerance) {
converged = true;
Cd = newCd;
rho = newRho;
mu = newMu;
break;
}
// 更新参数
Cd = newCd;
rho = newRho;
mu = newMu;
}
if (!converged) throw new RuntimeException("迭代未收敛");
// 计算标况体积流量
double qm = Cd * AOrifice * Cstar * Math.sqrt(gasProps.getdZf() * rho * gasProps.getdPf());
// 保存结果
flowProps.setdCd(Cd);
flowProps.setdRnPipe(rho);
flowProps.setdMFlowb(qm);
flowProps.setdVFlowb(qm/gasProps.getdRhob());
}
private static double[] getNozzleCoefficients(int coreType) {
// 返回喷嘴系数数组 [a, b, c, d, e, f, n]
if (coreType == 0) { // 圆环形
return new double[]{0.9990, 3.415, 0.0031, 0.690, 10, 120000, 0.5};
} else { // 圆柱形
return new double[]{1.0000, 6.341, 0.008, 3.000, 6, 170000, 0.5};
}
}
public static double[] calculateStagnationProperties(
double staticP, double staticT, double velocity,
double kappa, double R) {
double soundSpeed = Math.sqrt(kappa * R * staticT);
double mach = velocity / soundSpeed;
double T0 = staticT * (1 + 0.5 * (kappa - 1) * mach * mach);
double P0 = staticP * Math.pow(T0 / staticT, kappa / (kappa - 1));
return new double[]{P0, T0};
}
}

View File

@ -4,6 +4,100 @@ public class FlowProps {
// 流量计算输入参数信息
private int dFlowCalbz; // 流量计算标准
private int dZcalbz; // 压缩因子计算标准
private int dCbtj; // 计量参比条件压力
private double dPb_M; // 计量参比条件压力
private double dTb_M; // 计量参比条件温度
private double dPb_E; // 燃烧参比条件压力
private double dTb_E; // 燃烧参比条件温度
private double dPatm; // 当地大气压
private int dPatmUnit; // 当地大气压单位
private String dngComponents; // 天然气组分
private int dMeterType; // 流量计类别
private int dCoreType; // 节流装置类型
private int dPtmode; // 取压方式
private int dPipeType; // 管道类型
private double dPipeD; // 管道内径
private int dLenUnit; // 长度单位
private double dPipeDtemp; // 管道内径参考温度
private int dPileDtempUint; // 温度单位
private double dPipeMaterial; // 管道材料
private double dOrificeD; // 孔板孔径
private int dOrificeUnit; // 长度单位
private double dOrificeDtemp; // 孔板内径参考温度
private int dOrificeDtempUnit; // 温度单位
private double dOrificeMaterial; // 孔板材料
private int dOrificeSharpness; // 锐利度系数计算方法
private double dOrificeRk; // 孔板入口圆弧半径
private int dOrificeRkLenUint; // 长度单位
private double dPf; // 输入压力
private int dPfUnit; // 压力单位
private int dPfType; // 压力类型
private double dTf; // 输入温度
private int dTfUnit; // 温度单位
private double dDp; // 输入差压
private int dDpUnit; // 压力单位
private int dVFlowUnit; // 体积流量单位
private int dMFlowUnit; // 质量流量单位
private int dEFlowUnit; // 能量流量单位
private double dCd; // 流出系数
private double dMeterFactor; // 仪表系数
private double dPulseNum; // 脉冲数
private double dVFlowMax; // 最大体积流量
private double dVFlowMin; // 最小体积流量
private double dVFlowCon; // 常用流量
private double dPfRange; // 压力量程
private double dDpRange; // 差压量程
private double dTfRange; // 温度计量程
// 流量计算输出参数
private double dE; // 求渐近速度系数 E
private double dFG; // 求相对密度系数 FG
private double dFT; // 求流动温度系数 FT
private double dFpv; // 求超压缩因子 Fpv
private double dDViscosity; // 求动力粘度 dlnd
private double dDExpCoefficient; // 求可膨胀系数
private double dRnPipe; // 管道雷诺数
private double dBk; // 孔板锐利度系数Bk
private double dRoughNessPipe; // 管道粗糙度系数 Gme
private double dCdCorrect; // 修正后的流出系数
private double dCdNozell; // 喷嘴的流出系数
private double dVFlowb; // 标况体积流量 m³s
private double dVFlowf; // 工况体积流量
private double dMFlowb; // 标况质量流量
private double dEFlowb; // 标况能量流量
private double dVelocityFlow; // 管道内天然气流速
private double dPressLost; // 压力损失
private double dBeta; // 直径比
private double dKappa; // 等熵指数
private int dNozzleType; // 0圆环形喷嘴 2 圆柱形喉部文丘里喷嘴
private double dUpstreamRadius ;//
public double getdUpstreamRadius() {
return dUpstreamRadius;
}
public void setdUpstreamRadius(double dUpstreamRadius) {
this.dUpstreamRadius = dUpstreamRadius;
}
public int getdZcalbz() {
return dZcalbz;
}
@ -516,59 +610,6 @@ public class FlowProps {
this.dKappa = dKappa;
}
private int dZcalbz; // 压缩因子计算标准
private int dCbtj; // 计量参比条件压力
private double dPb_M; // 计量参比条件压力
private double dTb_M; // 计量参比条件温度
private double dPb_E; // 燃烧参比条件压力
private double dTb_E; // 燃烧参比条件温度
private double dPatm; // 当地大气压
private int dPatmUnit; // 当地大气压单位
private String dngComponents; // 天然气组分
private int dMeterType; // 流量计类别
private int dCoreType; // 节流装置类型
private int dPtmode; // 取压方式
private int dPipeType; // 管道类型
private double dPipeD; // 管道内径
private int dLenUnit; // 长度单位
private double dPipeDtemp; // 管道内径参考温度
private int dPileDtempUint; // 温度单位
private double dPipeMaterial; // 管道材料
private double dOrificeD; // 孔板孔径
private int dOrificeUnit; // 长度单位
private double dOrificeDtemp; // 孔板内径参考温度
private int dOrificeDtempUnit; // 温度单位
private double dOrificeMaterial; // 孔板材料
private int dOrificeSharpness; // 锐利度系数计算方法
private double dOrificeRk; // 孔板入口圆弧半径
private int dOrificeRkLenUint; // 长度单位
private double dPf; // 输入压力
private int dPfUnit; // 压力单位
private int dPfType; // 压力类型
private double dTf; // 输入温度
private int dTfUnit; // 温度单位
private double dDp; // 输入差压
private int dDpUnit; // 压力单位
private int dVFlowUnit; // 体积流量单位
private int dMFlowUnit; // 质量流量单位
private int dEFlowUnit; // 能量流量单位
private double dCd; // 流出系数
private double dMeterFactor; // 仪表系数
private double dPulseNum; // 脉冲数
private double dVFlowMax; // 最大体积流量
private double dVFlowMin; // 最小体积流量
private double dVFlowCon; // 常用流量
private double dPfRange; // 压力量程
private double dDpRange; // 差压量程
private double dTfRange; // 温度计量程
// 流量计算输出参数
private double dE; // 求渐近速度系数 E
private double dFG; // 求相对密度系数 FG
private double dFT; // 求流动温度系数 FT
public double getdFpv() {
return dFpv;
}
@ -577,26 +618,14 @@ public class FlowProps {
this.dFpv = dFpv;
}
private double dFpv; // 求超压缩因子 Fpv
private double dDViscosity; // 求动力粘度 dlnd
private double dDExpCoefficient; // 求可膨胀系数
private double dRnPipe; // 管道雷诺数
private double dBk; // 孔板锐利度系数Bk
private double dRoughNessPipe; // 管道粗糙度系数 Gme
private double dCdCorrect; // 修正后的流出系数
private double dCdNozell; // 喷嘴的流出系数
private double dVFlowb; // 标况体积流量 m³s
private double dVFlowf; // 工况体积流量
private double dMFlowb; // 标况质量流量
private double dEFlowb; // 标况能量流量
private double dVelocityFlow; // 管道内天然气流速
private double dPressLost; // 压力损失
private double dBeta; // 直径比
private double dKappa; // 等熵指数
public int getdNozzleType() {
return dNozzleType;
}
// Getters and Setters
public void setdNozzleType(int dNozzleType) {
this.dNozzleType = dNozzleType;
}

View File

@ -1,14 +1,110 @@
package com.ruoyi.ngCalTools.model;
public class GasProps {
public class GasProps implements Cloneable {
// 重写 clone() 方法
@Override
public GasProps clone() {
try {
return (GasProps) super.clone();
} catch (CloneNotSupportedException e) {
// 因为已经实现了 Cloneable 接口所以不会抛出该异常
throw new AssertionError();
}
}
// corresponds to the control group in meter classes
public int lStatus; // calculation status 计算状态
public boolean bForceUpdate; // 执行全部计算的标志 signal to perform full calculation
public double[] adMixture; // 气体摩尔组成 Composition in mole fraction
public double[] adMixtureV; // 气体体积组成 Composition in mole fraction
public double[] adMixtureD; // 气体质量组成 Composition in mole fraction
public int dCbtj; // 参比条件 101325 0,15,20
public double dPb; // 参比压力 Contract base Pressure (Pa)
public double dTb; // 参比温度Contract base temperature (K)
public double dPf; // 绝对压力 Absolute Pressure (Pa)
public double dTf; // 工况温度 Flowing temperature (K)
// basic output from AGA 8 Detail method
public double dMrx; // 分子量 mixture molar mass
public double dZb; // 标况压缩因子compressibility at contract base condition
public double dZf; // 工况压缩因子compressibility at flowing condition
public double dFpv; // 超压缩系数 supercompressibility
public double dDb; // 标况摩尔密度molar density at contract base conditions (moles/dm3)
public double dDf; // 工况摩尔密度 molar density at flowing conditions (moles/dm3)
public double dRhob; // 标况质量密度mass density at contract base conditions (kg/m3)
public double dRhof; // 工况质量密度 mass density at flowing conditions (kg/m3)
public double dRD_Ideal; // 理想气体的相对密度ideal gas relative density
public double dRD_Real; // 真实气体的相对密度real gas relative density
// additional output
public double dHo; // 理想气体的比焓 ideal gas specific enthalpy
public double dH; // 真实气体的焓 real gas specific enthalpy (J/kg)
public double dS; // 真实气体的熵real gas specific entropy (J/kg-mol.K)
public double dCpi; // 理想气体定压热容 ideal gas constant pressure heat capacity (J/kg-mol.K)
public double dCp; // 定压热容real gas constant pressure heat capacity (J/kg-mol.K)
public double dCv; // 定容积热容 real gas constant volume heat capacity (J/kg-mol.K)
public double dk; // 比热比ratio of specific heats
public double dKappa; // 等熵指数 isentropic exponent, denoted with Greek letter kappa
public double dSOS; // 声速speed of sound (m/s)
public double dCstar; // 临界流函数 critical flow factor C*
// 11062 输出
public double dHhvMol; // 摩尔高位发热量
public double dLhvMol; // 摩尔低位发热量
public double dHhvv; // 体积高位发热量
public double dLhvv; // 体积低位发热量
public double dHhvm; // 质量高位发热量
public double dLhvm; // 质量地位发热量
public double dZb11062; // 标况压缩因子
public double dRhob11062; // 标况质量密度mass density at contract base conditions (kg/m3)
public double dRhof11062; // 工况质量密度 mass density at flowing conditions (kg/m3)
public double dRD_Ideal11062; // 理想气体的相对密度ideal gas relative density
public double dRD_Real11062; // 真实气体的相对密度real gas relative density
public double dWobbeIndex; // 真实气体的沃泊指数
public double dPc; // 临界压力
public double dTC; // 临界温度
public double dBzsx; // 爆炸上限
public double dBzxx; // 爆炸下限
public double dTotalC; // 总炭含量 (kg/m3)
public double dC2; // C2组分含量 (kg/m3)
public double dC2j; // C2以上组分含量 (kg/m3)
public double dC3j; // C3以上组分含量 (kg/m3)
public double dC4j; // C4以上组分含量 (kg/m3)
public double dC5j; // C5以上组分含量 (kg/m3)
public double dC6j; // C6以上组分含量 (kg/m3)
public double dC3C4; // C3C4组分含量 (kg/m3)
public String dngComponents; //组分的组合字符串 从前端传过来
// 新增高精度物性参数
private double dMu; // 动态粘度 (Pa·s)
private double dNu; // 运动粘度 (m²/s)
// 新增滞止参数
public double dP0; // 滞止压力Pa
public double dT0; // 滞止温度K
public double getdP0() {
return dP0;
}
public void setdP0(double dP0) {
this.dP0 = dP0;
}
public double getdT0() {
return dT0;
}
public void setdT0(double dT0) {
this.dT0 = dT0;
}
public double[] getAdMixtureD() {
return adMixtureD;
@ -450,63 +546,23 @@ public class GasProps {
this.dngComponents = dngComponents;
}
public double[] adMixtureD; // 气体质量组成 Composition in mole fraction
public int dCbtj; // 参比条件 101325 0,15,20
public double dPb; // 参比压力 Contract base Pressure (Pa)
public double dTb; // 参比温度Contract base temperature (K)
public double dPf; // 绝对压力 Absolute Pressure (Pa)
public double dTf; // 工况温度 Flowing temperature (K)
// basic output from AGA 8 Detail method
public double dMrx; // 分子量 mixture molar mass
public double dZb; // 标况压缩因子compressibility at contract base condition
public double dZf; // 工况压缩因子compressibility at flowing condition
public double dFpv; // 超压缩系数 supercompressibility
public double dDb; // 标况摩尔密度molar density at contract base conditions (moles/dm3)
public double dDf; // 工况摩尔密度 molar density at flowing conditions (moles/dm3)
public double dRhob; // 标况质量密度mass density at contract base conditions (kg/m3)
public double dRhof; // 工况质量密度 mass density at flowing conditions (kg/m3)
public double dRD_Ideal; // 理想气体的相对密度ideal gas relative density
public double dRD_Real; // 真实气体的相对密度real gas relative density
// additional output
public double dHo; // 理想气体的比焓 ideal gas specific enthalpy
public double dH; // 真实气体的焓 real gas specific enthalpy (J/kg)
public double dS; // 真实气体的熵real gas specific entropy (J/kg-mol.K)
public double dCpi; // 理想气体定压热容 ideal gas constant pressure heat capacity (J/kg-mol.K)
public double dCp; // 定压热容real gas constant pressure heat capacity (J/kg-mol.K)
public double dCv; // 定容积热容 real gas constant volume heat capacity (J/kg-mol.K)
public double dk; // 比热比ratio of specific heats
public double dKappa; // 等熵指数 isentropic exponent, denoted with Greek letter kappa
public double dSOS; // 声速speed of sound (m/s)
public double dCstar; // 临界流函数 critical flow factor C*
// 11062 输出
public double dHhvMol; // 摩尔高位发热量
public double dLhvMol; // 摩尔低位发热量
public double dHhvv; // 体积高位发热量
public double dLhvv; // 体积低位发热量
public double dHhvm; // 质量高位发热量
public double dLhvm; // 质量地位发热量
public double getdMu() {
return dMu;
}
public double dZb11062; // 标况压缩因子
public double dRhob11062; // 标况质量密度mass density at contract base conditions (kg/m3)
public double dRhof11062; // 工况质量密度 mass density at flowing conditions (kg/m3)
public double dRD_Ideal11062; // 理想气体的相对密度ideal gas relative density
public double dRD_Real11062; // 真实气体的相对密度real gas relative density
public double dWobbeIndex; // 真实气体的沃泊指数
public void setdMu(double dMu) {
this.dMu = dMu;
}
public double getdNu() {
return dNu;
}
public void setdNu(double dNu) {
this.dNu = dNu;
}
public double dPc; // 临界压力
public double dTC; // 临界温度
public double dBzsx; // 爆炸上限
public double dBzxx; // 爆炸下限
public double dTotalC; // 总炭含量 (kg/m3)
public double dC2; // C2组分含量 (kg/m3)
public double dC2j; // C2以上组分含量 (kg/m3)
public double dC3j; // C3以上组分含量 (kg/m3)
public double dC4j; // C4以上组分含量 (kg/m3)
public double dC5j; // C5以上组分含量 (kg/m3)
public double dC6j; // C6以上组分含量 (kg/m3)
public double dC3C4; // C3C4组分含量 (kg/m3)
public String dngComponents; //组分的组合字符串 从前端传过来

View File

@ -7,7 +7,7 @@ import org.springframework.stereotype.Service;
@Service
public class DetailService {
private static final double RGASKJ = 8.314510e-3;
public static final double RGASKJ = 8.314510e-3;
// 成员变量转换
// 组件数量

View File

@ -10,7 +10,7 @@ public class GBT11062Service {
int[] aiCID = new int[21];// component IDs
double[] dXi = new double[21];// mole fraction of component i
// 初始化 adTableMri 数组
double[] adTableMri = { 16.0430, 28.0135, 44.0100, 30.0700, 44.0970, 18.0153, 34.0820, 2.0159, 28.0100, 31.9988, 58.1230, 58.1230, 72.1500, 72.1500, 86.1770, 100.2040, 114.2310, 128.2580, 142.2850, 4.0026, 39.9480 };
static double[] adTableMri = { 16.0430, 28.0135, 44.0100, 30.0700, 44.0970, 18.0153, 34.0820, 2.0159, 28.0100, 31.9988, 58.1230, 58.1230, 72.1500, 72.1500, 86.1770, 100.2040, 114.2310, 128.2580, 142.2850, 4.0026, 39.9480 };
// 初始化 adTablePc 数组
double[] adTablePc = { 4.604, 3.399, 7.382, 4.88, 4.249, 22.118, 9.005, 1.297, 3.499, 5.081, 3.648, 3.797, 3.381, 3.369, 3.012, 2.736, 2.486, 0, 0, 0.2275, 4.876 };
// 初始化 adTableTc 数组
@ -134,6 +134,8 @@ public class GBT11062Service {
gasProps.dC5j = gasProps.dC5j * gasProps.dPb / 8314.51 / gasProps.dTb / gasProps.dZb11062;
gasProps.dC6j = gasProps.dC6j * gasProps.dPb / 8314.51 / gasProps.dTb / gasProps.dZb11062;
ISO9300Service.calculateViscosity(gasProps);
}
}

View File

@ -0,0 +1,174 @@
package com.ruoyi.ngCalTools.service;
import com.ruoyi.ngCalTools.model.GasProps;
public class ISO9300Service {
// 基于Chapman-Enskog理论的计算 高精度粘度计算 音速喷嘴ISO9300
public static double calculateViscosity(GasProps gas) {
double BOLTZMANN = 1.380649e-23; // 玻尔兹曼常数 (J/K)
double Avogadro = 6.02214076e23; // 添加阿伏伽德罗常数
LJ mixLj = getLJParameters(gas); // Lennard-Jones参数
// 转换为SI单位
double sigma = mixLj.sigma ; // Å m
double epsilon = mixLj.epsilonK * BOLTZMANN; // K
// 计算无量纲温度
double T = gas.getdTf();
double Tstar = T * BOLTZMANN / epsilon;
double omega = getOmega(Tstar);
// 查普曼-恩斯柯格公式
double M_avg = gas.getdMrx() / 1000; // g/mol kg/mol
double m = M_avg / Avogadro;
double viscosity = 5.0 / 16.0 * Math.sqrt(Math.PI * m * BOLTZMANN * T)
/ (Math.PI * Math.pow(sigma, 2) * omega);
gas.setdMu(viscosity);
return viscosity;
}
public static LJ getLJParameters(GasProps gas) {
double sigmaMix = 0;
double epsilonKMix = 0;
int n = gas.adMixture.length;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
double xixj = gas.adMixture[i] * gas.adMixture[j];
// Lorentz规则
double sigmaPair = (LjParameters[i][0] + LjParameters[j][0]) / 2;
sigmaMix += xixj * sigmaPair;
// Berthelot规则 + 极性修正
double epsilonPair = Math.sqrt(LjParameters[i][1] * LjParameters[j][1]) * polarityFactors[i] * polarityFactors[j];
epsilonKMix += xixj * epsilonPair;
}
}
return new LJ(sigmaMix, epsilonKMix);
}
// 天然气21个组分的LJ参数
public static double[][] LjParameters = {
{3.758e-10, 148.6}, // 甲烷 C1
{3.798e-10, 71.4}, // 氮气 N2
{3.941e-10, 195.2}, // 二氧化碳 CO2
{4.443e-10, 215.7}, // 乙烷 C2
{5.118e-10, 237.1}, // 丙烷 C3
{2.75e-10, 80.0}, // H2O
{3.623e-10, 301.1}, // 硫化氢 H2S
{2.827e-10, 59.7}, // 氢气 H2
{3.690e-10, 91.7}, // 一氧化碳 CO
{3.467e-10, 106.7}, // 氧气 O2
{5.278e-10, 267.0}, // 异丁烷 iC4
{5.341e-10, 274.7}, // 正丁烷 nC4
{5.734e-10, 330.1}, // 异戊烷 iC5
{5.784e-10, 341.1}, // 正戊烷 nC5
{6.260e-10, 412.3}, // 己烷 C6
{6.812e-10, 467.3}, // 庚烷 C7此处庚烷参数按趋势估算
{7.294e-10, 532.1}, // 辛烷 C8此处辛烷参数按趋势估算
{7.700e-10, 614.2}, // 壬烷 C9此处壬烷参数按趋势估算
{8.170e-10, 681.5}, // 癸烷 C10此处癸烷参数按趋势估算
{2.551e-10, 10.22}, // 氦气 He
{3.405e-10, 124.0} // 氩气 Ar
};
// 极性修正系数1.0表示非极性
// 极性修正系数数组与LjParameters数组顺序严格对应
private static final double[] polarityFactors = {
// 1. 甲烷 C1
1.00, // 非极性分子对称四面体结构
// 2. 氮气 N2
1.02, // 微弱四极矩J. Chem. Phys. 129, 034306
// 3. 二氧化碳 CO2
1.05, // 四极矩修正Ind. Eng. Chem. Res. 2019, 58, 5, 19641972
// 4. 乙烷 C2
1.00, // 非极性对称结构
// 5. 丙烷 C3
1.00, // 非极性链状烷烃
// 6. H2O
1.18, // 强极性修正J. Phys. Chem. B 2005, 109, 15, 70537062
// 7. 硫化氢 H2S
1.12, // 中等极性J. Chem. Eng. Data 2008, 53, 3, 726729
// 8. 氢气 H2
1.00, // 非极性同核双原子
// 9. 一氧化碳 CO
1.03, // 微弱偶极矩J. Mol. Liq. 2020, 320, 114432
// 10. 氧气 O2
1.01, // 微弱顺磁性通常视为非极性
// 11. 异丁烷 iC4
1.00, // 支链烷烃非极性
// 12. 正丁烷 nC4
1.00, // 直链烷烃非极性
// 13. 异戊烷 iC5
1.00, // 支链烷烃非极性
// 14. 正戊烷 nC5
1.00, // 直链烷烃非极性
// 15. 己烷 C6
1.00, // 长链烷烃非极性
// 16. 庚烷 C7
1.00, // 长链烷烃非极性
// 17. 辛烷 C8
1.00, // 长链烷烃非极性
// 18. 壬烷 C9
1.00, // 长链烷烃非极性
// 19. 癸烷 C10
1.00, // 长链烷烃非极性
// 20. 氦气 He
1.00, // 惰性气体非极性
// 21. 氩气 Ar
1.00 // 惰性气体非极性
};
// 碰撞积分Ω(2,2)* 近似计算Neufeld多项式
private static double getOmega(double Tstar) {
if (Tstar < 0.1) {
return 2.0 / (3.0 * Tstar); // 低温量子修正
} else if (Tstar > 400) {
return 0.92 * Math.log(Tstar) / Tstar; // 高温渐近解
} else {
double A = 1.16145;
double B = 0.14874;
double C = 0.52487;
double D = 0.77320;
double E = 2.16178;
double F = 2.43787;
return A / Math.pow(Tstar, B)
+ C / Math.exp(D * Tstar)
+ E / Math.exp(F * Tstar);
}
}
public static class LJ {
public final double sigma; // 碰撞直径 (m)
public final double epsilonK; // ε/k (K)
public LJ(double sigma, double epsilonK) {
this.sigma = sigma;
this.epsilonK = epsilonK;
}
}
}

View File

@ -1,5 +1,7 @@
package com.ruoyi.system.controller;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreAuthorize;
@ -37,6 +39,9 @@ public class SysUnitConvertController extends BaseController
@Autowired
private ISysUnitConvertService sysUnitConvertService;
/**
* 查询单位转换列表
*/

View File

@ -2,6 +2,7 @@ package com.ruoyi.system.controller;
import com.ruoyi.system.domain.SysUnitConvert;
import com.ruoyi.system.service.ISysUnitConvertService;
import com.ruoyi.system.service.impl.SysUnitConvertServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -11,39 +12,28 @@ import java.math.RoundingMode;
@Component
public class UnitConvert {
private final ISysUnitConvertService sysUnitConvertService;
@Autowired
public UnitConvert(ISysUnitConvertService sysUnitConvertService) {
this.sysUnitConvertService = sysUnitConvertService;
}
private ISysUnitConvertService sysUnitConvertService;
public double ConvertUniter(String unitType, double oldValue, int oldUnit, int newUnit) {
public double ConvertUniter(String unitType, double oldValue, int oldUnit, int newUnit) {
// 查询旧单位信息
if ("temperature".equalsIgnoreCase(unitType)) {
return handleTemperatureConversion(BigDecimal.valueOf(oldValue), (long) oldUnit, (long) newUnit).doubleValue();
} else {
SysUnitConvert tempUnit = new SysUnitConvert();
tempUnit.setUnitType(unitType);
tempUnit.setUnitOrder((long) oldUnit);
SysUnitConvert oldUnitInfo = sysUnitConvertService.selectSysUnitConvertUnitByTypeOrder(tempUnit);
SysUnitConvert oldUnitInfo =sysUnitConvertService.selectSysUnitConvertUnitByTypeOrder(unitType, (long) oldUnit,null);
if (oldUnitInfo == null) {
throw new IllegalArgumentException("旧单位 '" + oldUnit + "' 不存在或不可用");
}
tempUnit=new SysUnitConvert();;
tempUnit.setUnitType(unitType);
tempUnit.setBaseUnit("Y");
SysUnitConvert baseUnitInfo = sysUnitConvertService.selectSysUnitConvertUnitByTypeOrder(tempUnit);
SysUnitConvert baseUnitInfo = sysUnitConvertService.selectSysUnitConvertUnitByTypeOrder (unitType,null,"Y");
if (baseUnitInfo == null) {
throw new IllegalArgumentException("基准单位 不存在或不可用");
}
tempUnit=new SysUnitConvert();
tempUnit.setUnitType(unitType);
tempUnit.setUnitOrder((long) newUnit);
// 查询新单位信息
SysUnitConvert newUnitInfo = sysUnitConvertService.selectSysUnitConvertUnitByTypeOrder(tempUnit);
SysUnitConvert newUnitInfo = sysUnitConvertService.selectSysUnitConvertUnitByTypeOrder(unitType, (long) newUnit,null);
if (newUnitInfo == null) {
throw new IllegalArgumentException("新单位 '" + newUnit + "' 不存在或不可用");
}
@ -71,7 +61,7 @@ public class UnitConvert {
}
// 温度转换方法
public BigDecimal handleTemperatureConversion(BigDecimal oldValue, Long oldUnit, Long newUnit) {
public static BigDecimal handleTemperatureConversion(BigDecimal oldValue, Long oldUnit, Long newUnit) {
final BigDecimal THIRTY_TWO = BigDecimal.valueOf(32);
final BigDecimal FIVE = BigDecimal.valueOf(5);
final BigDecimal NINE = BigDecimal.valueOf(9);

View File

@ -2,6 +2,7 @@ package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.system.domain.SysUnitConvert;
import org.apache.ibatis.annotations.Param;
/**
* 单位转换Mapper接口
@ -53,10 +54,16 @@ public interface SysUnitConvertMapper
/**
* 查询单位换算
*
* @param sysUnitConvert 需要删除的数据主键集合
* @param unitType 单位换算
* @param unitOrder 单位换算
* @param baseUnit 单位换算
* @return 结果
*/
public SysUnitConvert selectSysUnitConvertUnitByTypeOrder(SysUnitConvert sysUnitConvert);
public SysUnitConvert selectSysUnitConvertUnitByTypeOrder(
@Param("unitType") String unitType,
@Param("unitOrder") Long unitOrder, // 修正参数类型
@Param("baseUnit") String baseUnit
);
/**

View File

@ -9,11 +9,10 @@ import com.ruoyi.system.domain.SysUnitConvert;
* @author ruoyi
* @date 2025-03-22
*/
public interface ISysUnitConvertService
{
public interface ISysUnitConvertService {
/**
* 查询单位转换
*
*
* @param id 单位转换主键
* @return 单位转换
*/
@ -21,24 +20,26 @@ public interface ISysUnitConvertService
/**
* 查询单位转换列表
*
*
* @param sysUnitConvert 单位转换
* @return 单位转换集合
*/
public List<SysUnitConvert> selectSysUnitConvertList(SysUnitConvert sysUnitConvert);
/**
* 查询单位
*
* @param sysUnitConvert 单位换算
* @param unitType 单位换算
* @param unitOrder 单位换算
* @param baseUnit 单位换算
* @return 单位换算集合
*/
public SysUnitConvert selectSysUnitConvertUnitByTypeOrder(SysUnitConvert sysUnitConvert);
public SysUnitConvert selectSysUnitConvertUnitByTypeOrder(String unitType,Long unitOrder, String baseUnit);
/**
* 新增单位转换
*
*
* @param sysUnitConvert 单位转换
* @return 结果
*/
@ -46,7 +47,7 @@ public interface ISysUnitConvertService
/**
* 修改单位转换
*
*
* @param sysUnitConvert 单位转换
* @return 结果
*/
@ -54,7 +55,7 @@ public interface ISysUnitConvertService
/**
* 批量删除单位转换
*
*
* @param ids 需要删除的单位转换主键集合
* @return 结果
*/
@ -62,7 +63,7 @@ public interface ISysUnitConvertService
/**
* 删除单位转换信息
*
*
* @param id 单位转换主键
* @return 结果
*/

View File

@ -1,6 +1,8 @@
package com.ruoyi.system.service.impl;
import java.util.List;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SysUnitConvertMapper;
@ -16,7 +18,8 @@ import com.ruoyi.system.service.ISysUnitConvertService;
@Service
public class SysUnitConvertServiceImpl implements ISysUnitConvertService
{
@Autowired
@Autowired // 必须添加自动注入
private SysUnitConvertMapper sysUnitConvertMapper;
/**
@ -33,14 +36,16 @@ public class SysUnitConvertServiceImpl implements ISysUnitConvertService
/**
* 查询单位换算
*
* @param sysUnitConvert 单位换算
* @param unitType 单位换算
* @param unitOrder 单位换算
* @param baseUnit 单位换算
* @return 单位换算
*/
@Override
public SysUnitConvert selectSysUnitConvertUnitByTypeOrder(SysUnitConvert sysUnitConvert) {
return sysUnitConvertMapper.selectSysUnitConvertUnitByTypeOrder(sysUnitConvert);
public SysUnitConvert selectSysUnitConvertUnitByTypeOrder(String unitType,Long unitOrder, String baseUnit) {
return sysUnitConvertMapper.selectSysUnitConvertUnitByTypeOrder(unitType, unitOrder,baseUnit);
}
/**

View File

@ -41,7 +41,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectSysUnitConvertVo"/>
where suc.id = #{id}
</select>
<select id="selectSysUnitConvertUnitByTypeOrder" parameterType="SysUnitConvert"
<select id="selectSysUnitConvertUnitByTypeOrder"
resultMap="SysUnitConvertResult">
<!-- 这里编写具体的 SQL 查询语句 -->
<include refid="selectSysUnitConvertVo"/>