From 51c7748c8cd55f5bd19712dfb4746744bcd5fc57 Mon Sep 17 00:00:00 2001 From: wxr Date: Mon, 20 Oct 2025 11:07:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=95=B0=E6=8D=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=8A=A5=E8=A1=A8=E6=9D=A5=E6=BA=90=E3=80=81=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=B7=B2=E5=85=A8=E9=83=A8=E4=B8=8A=E6=8A=A5=E3=80=81?= =?UTF-8?q?=E5=B7=B2=E4=B8=8A=E6=8A=A5=E6=95=B0=E6=8D=AE=E6=9D=A5=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessAssayTaskDetailController.java | 8 ++ .../vo/BusinessAssayReportDataPageReqVO.java | 9 ++ .../vo/BusinessAssayReportDataRespVO.java | 9 ++ .../vo/BusinessAssayReportDataSaveReqVO.java | 9 ++ .../BusinessAssayTaskDetailExtendRespVO.java | 17 ++++ .../dataobject/BusinessAssayReportDataDO.java | 15 +++ .../mapper/BusinessAssayReportDataMapper.java | 3 + .../mapper/BusinessAssayTaskDetailMapper.java | 18 ++++ .../BusinessAssayTaskDetailService.java | 12 ++- .../BusinessAssayTaskDetailServiceImpl.java | 9 +- .../SampleAnalysisAuditServiceImpl.java | 22 ++++- .../config/dal/mapper/ConfigRuleMapper.java | 5 + .../config/QlExpressRuleEngineConfig.java | 2 + .../function/RoundToScaleHalfEven.java | 25 +++++ .../plat/module/qms/QLExpressRunnerTest.java | 92 +++++++++++++++++++ 15 files changed, 246 insertions(+), 9 deletions(-) create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDetailExtendRespVO.java create mode 100644 zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/function/RoundToScaleHalfEven.java create mode 100644 zt-module-qms/zt-module-qms-server/src/test/java/com/zt/plat/module/qms/QLExpressRunnerTest.java diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayTaskDetailController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayTaskDetailController.java index bb5c69a..2e93b80 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayTaskDetailController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/admin/BusinessAssayTaskDetailController.java @@ -92,6 +92,14 @@ public class BusinessAssayTaskDetailController implements BusinessControllerMark return success(BeanUtils.toBean(pageResult, BusinessAssayTaskDetailRespVO.class)); } + @GetMapping("/list") + @Operation(summary = "获得检测任务分配明细分页") + @PreAuthorize("@ss.hasPermission('qms:business-assay-task-detail:query')") + public CommonResult> getBusinessAssayTaskDetailList(@Valid BusinessAssayTaskDetailReqVO reqVO) { + List resultList = businessAssayTaskDetailService.getBusinessAssayTaskDetailList(reqVO); + return success(resultList); + } + @GetMapping("/export-excel") @Operation(summary = "导出检测任务分配明细 Excel") @PreAuthorize("@ss.hasPermission('qms:business-assay-task-detail:export')") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataPageReqVO.java index 903412e..826de2c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataPageReqVO.java @@ -24,9 +24,18 @@ public class BusinessAssayReportDataPageReqVO extends PageParam { @Schema(description = "样品编号") private String sampleCode; + + @Schema(description = "数据来源") + private String dataSource; @Schema(description = "分析数据") private String assayData; + + @Schema(description = "是否已全部上报") + private Integer isAllReported; + + @Schema(description = "已上报数据来源") + private String reportedSource; @Schema(description = "流程code") private String reportFlowCode; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataRespVO.java index f244b68..5866b49 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataRespVO.java @@ -31,10 +31,19 @@ public class BusinessAssayReportDataRespVO { @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("样品编号") private String sampleCode; + + @Schema(description = "数据来源") + private String dataSource; @Schema(description = "分析数据") @ExcelProperty("分析数据") private String assayData; + + @Schema(description = "是否已全部上报") + private Integer isAllReported; + + @Schema(description = "已上报数据来源") + private String reportedSource; @Schema(description = "流程code") @ExcelProperty("流程code") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataSaveReqVO.java index 458422c..80bcf3e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayReportDataSaveReqVO.java @@ -27,9 +27,18 @@ public class BusinessAssayReportDataSaveReqVO { @Schema(description = "样品编号", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "样品编号不能为空") private String sampleCode; + + @Schema(description = "数据来源") + private String dataSource; @Schema(description = "分析数据") private String assayData; + + @Schema(description = "是否已全部上报") + private Integer isAllReported; + + @Schema(description = "已上报数据来源") + private String reportedSource; @Schema(description = "流程code") private String reportFlowCode; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDetailExtendRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDetailExtendRespVO.java new file mode 100644 index 0000000..615f271 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/controller/vo/BusinessAssayTaskDetailExtendRespVO.java @@ -0,0 +1,17 @@ +package com.zt.plat.module.qms.business.bus.controller.vo; + +/** + * BusinessAssayTaskDetailExtendRespVO + *

+ * 更新历史: + *

 版本         更新时间            更新者        更新内容
+ * V1.0 2025年10月17日 wxr Add
+ * Copyright (C) 云南志者竟成科技有限公司 + *

+ * @author 王兴荣 + * @version V1.0 + * @since 2025年10月17日 + */ +public class BusinessAssayTaskDetailExtendRespVO extends BusinessAssayTaskDetailRespVO { + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessAssayReportDataDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessAssayReportDataDO.java index 54dbc5f..f70d202 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessAssayReportDataDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/dataobject/BusinessAssayReportDataDO.java @@ -52,10 +52,25 @@ public class BusinessAssayReportDataDO extends BusinessBaseDO { @TableField("SMP_CD") private String sampleCode; /** + * 数据来源 + */ + @TableField("DAT_SRC") + private String dataSource; + /** * 分析数据 */ @TableField("ASY_DAT") private String assayData; + /** + * 是否已全部上报(0-否,1-是) + */ + @TableField("IS_ALL_RPOD") + private Integer isAllReported; + /** + * 已上报数据来源 + */ + @TableField("RPOD_SRC") + private String reportedSource; /** * 流程code */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayReportDataMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayReportDataMapper.java index 5dfd6ef..0b846da 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayReportDataMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/dal/mapper/BusinessAssayReportDataMapper.java @@ -25,7 +25,10 @@ public interface BusinessAssayReportDataMapper extends BaseMapperX selectList(BusinessAssayTaskDetailReqVO reqVO) { + return selectJoinList(BusinessAssayTaskDetailExtendRespVO.class, new MPJLambdaWrapperX() + .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 selectByBusinessAssayTaskId(Long businessAssayTaskId) { return selectList(new LambdaQueryWrapperX() diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailService.java index e357ed7..53601f6 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailService.java @@ -2,14 +2,10 @@ package com.zt.plat.module.qms.business.bus.service; 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 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.dal.dataobject.BusinessAssayTaskDetailDO; -import com.zt.plat.framework.common.pojo.PageParam; /** * 检测任务分配明细 Service 接口 @@ -63,4 +59,12 @@ public interface BusinessAssayTaskDetailService { */ PageResult getBusinessAssayTaskDetailPage(BusinessAssayTaskDetailPageReqVO pageReqVO); + /** + * 获得检测任务分配明细列表 + * + * @param reqVO 分页查询 + * @return 检测任务分配明细列表 + */ + List getBusinessAssayTaskDetailList(BusinessAssayTaskDetailReqVO reqVO); + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailServiceImpl.java index 4f62640..72e5d5b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/BusinessAssayTaskDetailServiceImpl.java @@ -1,9 +1,7 @@ package com.zt.plat.module.qms.business.bus.service; 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 jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -90,4 +88,9 @@ public class BusinessAssayTaskDetailServiceImpl implements BusinessAssayTaskDeta return businessAssayTaskDetailMapper.selectPage(pageReqVO); } + @Override + public List getBusinessAssayTaskDetailList(BusinessAssayTaskDetailReqVO reqVO) { + return businessAssayTaskDetailMapper.selectList(reqVO); + } + } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java index 501becd..6190d9d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/bus/service/SampleAnalysisAuditServiceImpl.java @@ -19,6 +19,7 @@ import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; import com.zt.plat.framework.common.exception.ServiceException; 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.dal.dataobject.ConfigAssayMethodProjectAssessmentDO; 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.mapper.ConfigAssayMethodProjectAssessmentMapper; 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.ConfigReportFieldMapper; 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.ConfigSubSampleMapper; import com.zt.plat.module.qms.core.qlexpress.cmp.AllowanceCalculatorComponent; @@ -669,11 +672,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic } + @Resource + private ConfigRuleMapper configRuleMapper; + @Override @Transactional(rollbackFor = Exception.class) public JSONObject modifyParallelResultAssessment(Long businessSubSampleId, Long configAssayMethodId, Long businessSubSampleAssessmentId, List businessAssayProjectDataIds) { BusinessSubSampleAssessmentDO businessSubSampleAssessmentDO = businessSubSampleAssessmentMapper.selectById(businessSubSampleAssessmentId); + //计算平均值 + ConfigRuleDO calculateAverageValue = configRuleMapper.selectLatestConfigRuleByCode("calculateAverageValue"); + BusinessAssayProjectDataReqVO businessAssayProjectDataSearch = new BusinessAssayProjectDataReqVO(); businessAssayProjectDataSearch.setBusinessSubSampleId(businessSubSampleId); businessAssayProjectDataSearch.setConfigAssayMethodId(configAssayMethodId); @@ -699,8 +708,17 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic // 获取小数精度 int elementScale = businessSubSampleAssessmentDO.getDecimalPosition(); - // 计算代表值(均值或差值) - BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale); + // 计算代表值(均值\) +// BigDecimal representativeValue = calculateRepresentativeValue(sortedValues, elementScale); + DefaultContext 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()); diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigRuleMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigRuleMapper.java index 8b3e802..1815ae3 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigRuleMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/business/config/dal/mapper/ConfigRuleMapper.java @@ -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.module.qms.business.config.controller.vo.*; 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 org.apache.ibatis.annotations.Mapper; @@ -32,4 +33,8 @@ public interface ConfigRuleMapper extends BaseMapperX { .orderByDesc(ConfigRuleDO::getId)); } + default ConfigRuleDO selectLatestConfigRuleByCode(String code) { + return selectOne(new LambdaQueryWrapperX() + .eq(ConfigRuleDO::getCode, code).eq(ConfigRuleDO::getIsLast, QmsCommonConstant.YES)); + } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/config/QlExpressRuleEngineConfig.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/config/QlExpressRuleEngineConfig.java index 8bbd346..5d0180e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/config/QlExpressRuleEngineConfig.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/config/QlExpressRuleEngineConfig.java @@ -4,6 +4,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.ql.util.express.ExpressRunner; +import com.zt.plat.module.qms.core.qlexpress.function.RoundToScaleHalfEven; @Configuration public class QlExpressRuleEngineConfig { @@ -12,6 +13,7 @@ public class QlExpressRuleEngineConfig { public ExpressRunner expressRunner() { //需要高精度计算支持 ExpressRunner expressRunner = new ExpressRunner(true, false); + expressRunner.addFunction("roundToScale", new RoundToScaleHalfEven()); return expressRunner; } } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/function/RoundToScaleHalfEven.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/function/RoundToScaleHalfEven.java new file mode 100644 index 0000000..2053ae0 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/core/qlexpress/function/RoundToScaleHalfEven.java @@ -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; + } + + +} diff --git a/zt-module-qms/zt-module-qms-server/src/test/java/com/zt/plat/module/qms/QLExpressRunnerTest.java b/zt-module-qms/zt-module-qms-server/src/test/java/com/zt/plat/module/qms/QLExpressRunnerTest.java new file mode 100644 index 0000000..128d1c7 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/test/java/com/zt/plat/module/qms/QLExpressRunnerTest.java @@ -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 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 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 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); + } + } +}