Compare commits

...

2 Commits

15 changed files with 246 additions and 9 deletions

View File

@@ -92,6 +92,14 @@ public class BusinessAssayTaskDetailController implements BusinessControllerMark
return success(BeanUtils.toBean(pageResult, BusinessAssayTaskDetailRespVO.class)); return success(BeanUtils.toBean(pageResult, BusinessAssayTaskDetailRespVO.class));
} }
@GetMapping("/list")
@Operation(summary = "获得检测任务分配明细分页")
@PreAuthorize("@ss.hasPermission('qms:business-assay-task-detail:query')")
public CommonResult<List<BusinessAssayTaskDetailExtendRespVO>> getBusinessAssayTaskDetailList(@Valid BusinessAssayTaskDetailReqVO reqVO) {
List<BusinessAssayTaskDetailExtendRespVO> resultList = businessAssayTaskDetailService.getBusinessAssayTaskDetailList(reqVO);
return success(resultList);
}
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出检测任务分配明细 Excel") @Operation(summary = "导出检测任务分配明细 Excel")
@PreAuthorize("@ss.hasPermission('qms:business-assay-task-detail:export')") @PreAuthorize("@ss.hasPermission('qms:business-assay-task-detail:export')")

View File

@@ -25,9 +25,18 @@ public class BusinessAssayReportDataPageReqVO extends PageParam {
@Schema(description = "样品编号") @Schema(description = "样品编号")
private String sampleCode; private String sampleCode;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "分析数据") @Schema(description = "分析数据")
private String assayData; private String assayData;
@Schema(description = "是否已全部上报")
private Integer isAllReported;
@Schema(description = "已上报数据来源")
private String reportedSource;
@Schema(description = "流程code") @Schema(description = "流程code")
private String reportFlowCode; private String reportFlowCode;

View File

@@ -32,10 +32,19 @@ public class BusinessAssayReportDataRespVO {
@ExcelProperty("样品编号") @ExcelProperty("样品编号")
private String sampleCode; private String sampleCode;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "分析数据") @Schema(description = "分析数据")
@ExcelProperty("分析数据") @ExcelProperty("分析数据")
private String assayData; private String assayData;
@Schema(description = "是否已全部上报")
private Integer isAllReported;
@Schema(description = "已上报数据来源")
private String reportedSource;
@Schema(description = "流程code") @Schema(description = "流程code")
@ExcelProperty("流程code") @ExcelProperty("流程code")
private String reportFlowCode; private String reportFlowCode;

View File

@@ -28,9 +28,18 @@ public class BusinessAssayReportDataSaveReqVO {
@NotEmpty(message = "样品编号不能为空") @NotEmpty(message = "样品编号不能为空")
private String sampleCode; private String sampleCode;
@Schema(description = "数据来源")
private String dataSource;
@Schema(description = "分析数据") @Schema(description = "分析数据")
private String assayData; private String assayData;
@Schema(description = "是否已全部上报")
private Integer isAllReported;
@Schema(description = "已上报数据来源")
private String reportedSource;
@Schema(description = "流程code") @Schema(description = "流程code")
private String reportFlowCode; private String reportFlowCode;

View File

@@ -0,0 +1,17 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
/**
* <b>BusinessAssayTaskDetailExtendRespVO</b>
* <p>
* 更新历史:
* <pre> 版本 更新时间 更新者 更新内容<hr/>
* V1.0 2025年10月17日 wxr Add</pre>
* <b>Copyright (C) 云南志者竟成科技有限公司</b>
* </p>
* @author 王兴荣<wxr@wangxingrong.com>
* @version V1.0
* @since 2025年10月17日
*/
public class BusinessAssayTaskDetailExtendRespVO extends BusinessAssayTaskDetailRespVO {
}

View File

@@ -52,10 +52,25 @@ public class BusinessAssayReportDataDO extends BusinessBaseDO {
@TableField("SMP_CD") @TableField("SMP_CD")
private String sampleCode; private String sampleCode;
/** /**
* 数据来源
*/
@TableField("DAT_SRC")
private String dataSource;
/**
* 分析数据 * 分析数据
*/ */
@TableField("ASY_DAT") @TableField("ASY_DAT")
private String assayData; private String assayData;
/**
* 是否已全部上报0-否1-是)
*/
@TableField("IS_ALL_RPOD")
private Integer isAllReported;
/**
* 已上报数据来源
*/
@TableField("RPOD_SRC")
private String reportedSource;
/** /**
* 流程code * 流程code
*/ */

View File

@@ -25,7 +25,10 @@ public interface BusinessAssayReportDataMapper extends BaseMapperX<BusinessAssay
.eqIfPresent(BusinessAssayReportDataDO::getConfigSampleReportId, reqVO.getConfigSampleReportId()) .eqIfPresent(BusinessAssayReportDataDO::getConfigSampleReportId, reqVO.getConfigSampleReportId())
.eqIfPresent(BusinessAssayReportDataDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId()) .eqIfPresent(BusinessAssayReportDataDO::getBusinessBaseSampleId, reqVO.getBusinessBaseSampleId())
.eqIfPresent(BusinessAssayReportDataDO::getSampleCode, reqVO.getSampleCode()) .eqIfPresent(BusinessAssayReportDataDO::getSampleCode, reqVO.getSampleCode())
.eqIfPresent(BusinessAssayReportDataDO::getDataSource, reqVO.getDataSource())
.eqIfPresent(BusinessAssayReportDataDO::getAssayData, reqVO.getAssayData()) .eqIfPresent(BusinessAssayReportDataDO::getAssayData, reqVO.getAssayData())
.eqIfPresent(BusinessAssayReportDataDO::getIsAllReported, reqVO.getIsAllReported())
.eqIfPresent(BusinessAssayReportDataDO::getReportedSource, reqVO.getReportedSource())
.eqIfPresent(BusinessAssayReportDataDO::getReportFlowCode, reqVO.getReportFlowCode()) .eqIfPresent(BusinessAssayReportDataDO::getReportFlowCode, reqVO.getReportFlowCode())
.eqIfPresent(BusinessAssayReportDataDO::getDocumentDataId, reqVO.getDocumentDataId()) .eqIfPresent(BusinessAssayReportDataDO::getDocumentDataId, reqVO.getDocumentDataId())
.eqIfPresent(BusinessAssayReportDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode()) .eqIfPresent(BusinessAssayReportDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())

View File

@@ -2,6 +2,7 @@ package com.zt.plat.module.qms.business.bus.dal.mapper;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
@@ -35,6 +36,23 @@ public interface BusinessAssayTaskDetailMapper extends BaseMapperX<BusinessAssay
.orderByDesc(BusinessAssayTaskDetailDO::getId)); .orderByDesc(BusinessAssayTaskDetailDO::getId));
} }
default List<BusinessAssayTaskDetailExtendRespVO> selectList(BusinessAssayTaskDetailReqVO reqVO) {
return selectJoinList(BusinessAssayTaskDetailExtendRespVO.class, new MPJLambdaWrapperX<BusinessAssayTaskDetailDO>()
.eqIfPresent(BusinessAssayTaskDetailDO::getBusinessAssayTaskId, reqVO.getBusinessAssayTaskId())
.eqIfPresent(BusinessAssayTaskDetailDO::getSampleId, reqVO.getSampleId())
.eqIfPresent(BusinessAssayTaskDetailDO::getTaskNo, reqVO.getTaskNo())
.likeIfPresent(BusinessAssayTaskDetailDO::getSampleName, reqVO.getSampleName())
.eqIfPresent(BusinessAssayTaskDetailDO::getSampleCode, reqVO.getSampleCode())
.eqIfPresent(BusinessAssayTaskDetailDO::getCupNumber, reqVO.getCupNumber())
.eqIfPresent(BusinessAssayTaskDetailDO::getDataSourceType, reqVO.getDataSourceType())
.eqIfPresent(BusinessAssayTaskDetailDO::getSortNo, reqVO.getSortNo())
.eqIfPresent(BusinessAssayTaskDetailDO::getRollbackStatus, reqVO.getRollbackStatus())
.eqIfPresent(BusinessAssayTaskDetailDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(BusinessAssayTaskDetailDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(BusinessAssayTaskDetailDO::getRemark, reqVO.getRemark())
.orderByDesc(BusinessAssayTaskDetailDO::getId));
}
default List<BusinessAssayTaskDetailDO> selectByBusinessAssayTaskId(Long businessAssayTaskId) { default List<BusinessAssayTaskDetailDO> selectByBusinessAssayTaskId(Long businessAssayTaskId) {
return selectList(new LambdaQueryWrapperX<BusinessAssayTaskDetailDO>() return selectList(new LambdaQueryWrapperX<BusinessAssayTaskDetailDO>()
.eqIfPresent(BusinessAssayTaskDetailDO::getBusinessAssayTaskId, businessAssayTaskId)); .eqIfPresent(BusinessAssayTaskDetailDO::getBusinessAssayTaskId, businessAssayTaskId));

View File

@@ -2,14 +2,10 @@ package com.zt.plat.module.qms.business.bus.service;
import java.util.*; import java.util.*;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailPageReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailSaveReqVO;
import jakarta.validation.*; import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO;
import com.zt.plat.framework.common.pojo.PageParam;
/** /**
* 检测任务分配明细 Service 接口 * 检测任务分配明细 Service 接口
@@ -63,4 +59,12 @@ public interface BusinessAssayTaskDetailService {
*/ */
PageResult<BusinessAssayTaskDetailDO> getBusinessAssayTaskDetailPage(BusinessAssayTaskDetailPageReqVO pageReqVO); PageResult<BusinessAssayTaskDetailDO> getBusinessAssayTaskDetailPage(BusinessAssayTaskDetailPageReqVO pageReqVO);
/**
* 获得检测任务分配明细列表
*
* @param reqVO 分页查询
* @return 检测任务分配明细列表
*/
List<BusinessAssayTaskDetailExtendRespVO> getBusinessAssayTaskDetailList(BusinessAssayTaskDetailReqVO reqVO);
} }

View File

@@ -1,9 +1,7 @@
package com.zt.plat.module.qms.business.bus.service; package com.zt.plat.module.qms.business.bus.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailPageReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailSaveReqVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -90,4 +88,9 @@ public class BusinessAssayTaskDetailServiceImpl implements BusinessAssayTaskDeta
return businessAssayTaskDetailMapper.selectPage(pageReqVO); return businessAssayTaskDetailMapper.selectPage(pageReqVO);
} }
@Override
public List<BusinessAssayTaskDetailExtendRespVO> getBusinessAssayTaskDetailList(BusinessAssayTaskDetailReqVO reqVO) {
return businessAssayTaskDetailMapper.selectList(reqVO);
}
} }

View File

@@ -19,6 +19,7 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner; import com.ql.util.express.ExpressRunner;
import com.zt.plat.framework.common.exception.ServiceException; import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -46,12 +47,14 @@ import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessTeamAssessmentMapp
import com.zt.plat.module.qms.business.config.controller.vo.*; import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectAssessmentDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectAssessmentDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportFieldDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportFieldDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigRuleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSubSampleDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectAssessmentMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectAssessmentMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigProjectMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigProjectMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportFieldMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportFieldMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportTypeMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportTypeMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigRuleMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSampleReportMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSampleReportMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMapper; import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMapper;
import com.zt.plat.module.qms.core.qlexpress.cmp.AllowanceCalculatorComponent; import com.zt.plat.module.qms.core.qlexpress.cmp.AllowanceCalculatorComponent;
@@ -669,11 +672,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
} }
@Resource
private ConfigRuleMapper configRuleMapper;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public JSONObject modifyParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId, Long businessSubSampleAssessmentId, List<Long> businessAssayProjectDataIds) { public JSONObject modifyParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId, Long businessSubSampleAssessmentId, List<Long> businessAssayProjectDataIds) {
BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectById(businessSubSampleAssessmentId); BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectById(businessSubSampleAssessmentId);
//计算平均值
ConfigRuleDO calculateAverageValue = configRuleMapper.selectLatestConfigRuleByCode("calculateAverageValue");
BusinessAssayProjectDataReqVO businessAssayProjectDataSearch = new BusinessAssayProjectDataReqVO(); BusinessAssayProjectDataReqVO businessAssayProjectDataSearch = new BusinessAssayProjectDataReqVO();
businessAssayProjectDataSearch.setBusinessSubSampleId(businessSubSampleId); businessAssayProjectDataSearch.setBusinessSubSampleId(businessSubSampleId);
businessAssayProjectDataSearch.setConfigAssayMethodId(configAssayMethodId); businessAssayProjectDataSearch.setConfigAssayMethodId(configAssayMethodId);
@@ -699,8 +708,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
// 获取小数精度 // 获取小数精度
int elementScale = businessSubSampleAssessmentDO.getDecimalPosition(); int elementScale = businessSubSampleAssessmentDO.getDecimalPosition();
// 计算代表值(均值或差值 // 计算代表值(均值\
BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale); // BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale);
DefaultContext<String, Object> context = new DefaultContext<>();
context.put("values", sortedValues);
context.put("scale", elementScale);
BigDecimal representativeValue = null;
try {
representativeValue = (BigDecimal) expressRunner.execute(calculateAverageValue.getExpression(), context, null, false, false);
} catch (Exception e) {
e.printStackTrace();
}
//设置判定值 //设置判定值
businessSubSampleAssessmentDO.setAssessmentValue(representativeValue.toPlainString()); businessSubSampleAssessmentDO.setAssessmentValue(representativeValue.toPlainString());

View File

@@ -6,6 +6,7 @@ import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.business.config.controller.vo.*; import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigRuleDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigRuleDO;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -32,4 +33,8 @@ public interface ConfigRuleMapper extends BaseMapperX<ConfigRuleDO> {
.orderByDesc(ConfigRuleDO::getId)); .orderByDesc(ConfigRuleDO::getId));
} }
default ConfigRuleDO selectLatestConfigRuleByCode(String code) {
return selectOne(new LambdaQueryWrapperX<ConfigRuleDO>()
.eq(ConfigRuleDO::getCode, code).eq(ConfigRuleDO::getIsLast, QmsCommonConstant.YES));
}
} }

View File

@@ -4,6 +4,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import com.ql.util.express.ExpressRunner; import com.ql.util.express.ExpressRunner;
import com.zt.plat.module.qms.core.qlexpress.function.RoundToScaleHalfEven;
@Configuration @Configuration
public class QlExpressRuleEngineConfig { public class QlExpressRuleEngineConfig {
@@ -12,6 +13,7 @@ public class QlExpressRuleEngineConfig {
public ExpressRunner expressRunner() { public ExpressRunner expressRunner() {
//需要高精度计算支持 //需要高精度计算支持
ExpressRunner expressRunner = new ExpressRunner(true, false); ExpressRunner expressRunner = new ExpressRunner(true, false);
expressRunner.addFunction("roundToScale", new RoundToScaleHalfEven());
return expressRunner; return expressRunner;
} }
} }

View File

@@ -0,0 +1,25 @@
package com.zt.plat.module.qms.core.qlexpress.function;
import java.math.BigDecimal;
import java.math.RoundingMode;
import com.ql.util.express.Operator;
public class RoundToScaleHalfEven extends Operator {
@Override
public Object executeInner(Object[] list) throws Exception {
if (list.length != 2) {
throw new Exception("roundToScale函数需要2个参数数值和小数位数");
}
double value = Double.parseDouble(list[0].toString());
int scale = Integer.parseInt(list[1].toString());
BigDecimal bd = BigDecimal.valueOf(value);
bd = bd.setScale(scale, RoundingMode.HALF_EVEN);
return bd;
}
}

View File

@@ -0,0 +1,92 @@
package com.zt.plat.module.qms;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
import com.ql.util.express.IExpressContext;
import com.zt.plat.module.qms.core.qlexpress.function.RoundToScaleHalfEven;
public class QLExpressRunnerTest {
@Test
void roundToScaleTest() throws Exception {
ExpressRunner expressRunner = new ExpressRunner(true, false);
expressRunner.addFunction("roundToScale", new RoundToScaleHalfEven());
String express_3 = "roundToScale(0.2434, 3)";
Object result_3 = expressRunner.execute(express_3, null, null, false, false);
System.out.println("四舍0.2434 " + result_3);
String express_4 = "roundToScale(0.2416, 3)";
Object result_4 = expressRunner.execute(express_4, null, null, false, false);
System.out.println("六入0.2416 " + result_4);
String express_1 = "roundToScale(0.2445, 3)";
Object result_1 = expressRunner.execute(express_1, null, null, false, false);
System.out.println("偶不变0.2445 " + result_1);
String express_2 = "roundToScale(0.2455, 3)";
Object result_2 = expressRunner.execute(express_2, null, null, false, false);
System.out.println("奇变0.2445 " + result_2);
}
@Test
void calculateAverageValueTest() throws Exception {
ExpressRunner expressRunner = new ExpressRunner(true, false);
/**
String exp = ""
+ "function abc(int a, int b) {"
+ " return a + b;"
+ "}"
+ "return abc(1 + 100, 2 * 100)";
IExpressContext<String, Object> context = new DefaultContext<>();
Object result = expressRunner.execute(exp, context, null, false, false);
System.out.println(result);
**/
//
// String express = """
// function calculateAverageValue(values, elementScale) {
// if (values == null || values.size() == 0) return roundToScale(0, elementScale);
// if (values.size() == 1) return roundToScale(values.get(0), elementScale);
// sum = reduce(values, 0, "a + b");
// return roundToScale(sum / values.size(), elementScale);
// }
// calculateAverageValue(values, elementScale);
// """;
String express = """
if (values == null || values.size() == 0) return roundToScale(0, scale);
if (values.size() == 1) return roundToScale(values.get(0), scale);
sum = 0;
for(int i = 0; i < values.size(); i = i + 1) {
sum = sum + values.get(i);
}
return roundToScale(sum / values.size(), scale);
""";
expressRunner.addFunction("roundToScale", new RoundToScaleHalfEven());
List<BigDecimal> valuesList = new ArrayList<>();
// valuesList.add(new BigDecimal("0.2445"));
// valuesList.add(new BigDecimal("0.5435"));
// valuesList.add(new BigDecimal("0.8436"));
valuesList.add(new BigDecimal("2.05"));
valuesList.add(new BigDecimal("2.05"));
valuesList.add(new BigDecimal("0"));
int elementScale = 2;
DefaultContext<String, Object> context = new DefaultContext<>();
context.put("values", valuesList);
context.put("scale", elementScale);
Object result = expressRunner.execute(express, context, null, false, false);
System.out.println(result);
String[] names = expressRunner.getOutVarNames(express);
for(String s:names){
System.out.println("var : " + s);
}
}
}