feat:分析计算bug

This commit is contained in:
houjunxiang
2026-02-25 15:50:21 +08:00
parent 46edadbd43
commit 749ac7f507

View File

@@ -84,6 +84,14 @@ const FORMULA_FUNCTIONS = {
Get_C_KNO3_bySValue, Get_C_KNO3_bySValue,
Get_C_KNO3 Get_C_KNO3
} }
function isEndsWithNumber(str) {
// 正则解释:
// ^[a-zA-Z]+ : 以一个或多个字母开头
// \d+$ : 以一个或多个数字结尾
const regex = /^[a-zA-Z]+\d+$/
return regex.test(str)
}
/* /*
* 计算当前样品分析值*/ * 计算当前样品分析值*/
export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) { export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) {
@@ -102,12 +110,15 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) {
let formulaVal = '' let formulaVal = ''
formulas.forEach(f => { formulas.forEach(f => {
let value = '' let value = ''
if (f.charAt(0) === 'p') { if (f.charAt(0) === 'p' && isEndsWithNumber(f)) {
let o = findFieldInGroup(f, group, 'p') let o = findFieldInGroup(f, group, 'p')
value = o.value || 0 value = o.value || 0
} else if (f.charAt(0) === 'e') { } else if (f.charAt(0) === 'e' && isEndsWithNumber(f)) {
let o = findFieldInGroup(f, group, 'e') let o = findFieldInGroup(f, group, 'e')
value = o.value || 0 value = o.value || 0
} else if (f.charAt(0) === 'a' && isEndsWithNumber(f)) {
let o = findFieldInGroup(f, group, 'a')
value = o.value || 0
} else if (f.charAt(0) === '<' || f.charAt(0) === '>') { } else if (f.charAt(0) === '<' || f.charAt(0) === '>') {
value = "'" + f + "'" value = "'" + f + "'"
} else { } else {
@@ -119,8 +130,6 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) {
let v = '' let v = ''
if (formulaVal.startsWith('Get_')) { if (formulaVal.startsWith('Get_')) {
console.log(111, formulaVal, ele.title)
//计算公式为Get开头的都是执行方法,只有人工配料才执行 //计算公式为Get开头的都是执行方法,只有人工配料才执行
if (taskIngredientsWay !== 'manual') continue if (taskIngredientsWay !== 'manual') continue
v = eval(formulaVal) v = eval(formulaVal)
@@ -155,7 +164,7 @@ export function evaluateGetFromFormula(formula, parse, externalFormData, current
} }
} }
try { try {
console.log(relFormulaVal) console.log('解析公式', relFormulaVal)
let v = math.evaluate(relFormulaVal).toString() let v = math.evaluate(relFormulaVal).toString()
v = isFinite(v) ? v : 0 v = isFinite(v) ? v : 0
@@ -173,16 +182,22 @@ function parseFormula(formula, row, dynamicsColumns) {
let formulas = formula.split('|') let formulas = formula.split('|')
let formulaVal = '' let formulaVal = ''
formulas.forEach(f => { formulas.forEach(f => {
if (f.charAt(0) === 'p') { if (f.charAt(0) === 'p' && isEndsWithNumber(f)) {
let o = dynamicsColumns.find(i => 'p' + i.paramNo === f && i.type !== 'project') let o = dynamicsColumns.find(i => 'p' + i.paramNo === f && i.type !== 'project')
const currentColumnData = row[o.fieldIndex] const currentColumnData = row[o.fieldIndex]
if (!currentColumnData) return if (!currentColumnData) return
formulaVal += currentColumnData.value ? currentColumnData.value : 0 formulaVal += currentColumnData.value ? currentColumnData.value : 0
} else if (f.charAt(0) === 'e') { } else if (f.charAt(0) === 'e' && isEndsWithNumber(f)) {
let o = dynamicsColumns.find(i => 'e' + i.paramNo === f) let o = dynamicsColumns.find(i => 'e' + i.paramNo === f)
const currentColumnData = row[o.fieldIndex] const currentColumnData = row[o.fieldIndex]
if (!currentColumnData) return if (!currentColumnData) return
formulaVal += currentColumnData.value ? currentColumnData.value : 0 formulaVal += currentColumnData.value ? currentColumnData.value : 0
} else if (f.charAt(0) === 'a' && isEndsWithNumber(f)) {
//新增的分析任务属性 公式
let o = dynamicsColumns.find(i => 'a' + i.paramNo === f)
const currentColumnData = row[o.fieldIndex]
if (!currentColumnData) return
formulaVal += currentColumnData.value ? currentColumnData.value : 0
} else { } else {
formulaVal += f formulaVal += f
} }
@@ -196,8 +211,15 @@ export function calcRowAnalysisValue(row, columnObj, dynamicsColumns, externalFo
for (let i = 0; i < dynamicsColumns.length; i++) { for (let i = 0; i < dynamicsColumns.length; i++) {
let curItem = dynamicsColumns[i] let curItem = dynamicsColumns[i]
if (curItem.fieldIndex === columnObj.fieldIndex) continue if (curItem.fieldIndex === columnObj.fieldIndex) continue
let param = ''
let param = columnObj.fieldIndex.charAt(0) === 'p' ? 'p' + columnObj.paramNo : 'e' + columnObj.paramNo const fieldIndexBegin = columnObj.fieldIndex.charAt(0)
if (fieldIndexBegin === 'p') {
param = 'p' + columnObj.paramNo
} else if (fieldIndexBegin === 'e') {
param = 'e' + columnObj.paramNo
} else if (fieldIndexBegin === 'a') {
param = 'a' + columnObj.paramNo
}
if (curItem.formula && curItem.formula.includes(param)) { if (curItem.formula && curItem.formula.includes(param)) {
let formula = curItem.formula let formula = curItem.formula
let formulaVal = parseFormula(formula, row, dynamicsColumns) let formulaVal = parseFormula(formula, row, dynamicsColumns)