荧光线、分析时间等修改

This commit is contained in:
2026-02-04 19:31:41 +08:00
parent 9014e8bcc8
commit 7d8a5c1e88
11 changed files with 214 additions and 10 deletions

View File

@@ -0,0 +1,30 @@
package com.zt.plat.module.qms.business.bus.controller.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class BusinessAssayTaskParameterDataExtendRespVO extends BusinessAssayTaskParameterDataRespVO {
@Schema(description = "检测方法ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29823")
@ExcelProperty("检测方法ID")
private Long configAssayMethodId;
@Schema(description = "参数名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("参数名称")
private String parameterName;
@Schema(description = "参数简称", example = "张三")
@ExcelProperty("参数简称")
private String shortName;
@Schema(description = "参数序号", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("参数序号")
private Integer no;
@Schema(description = "键值")
@ExcelProperty("键值")
private String key;
}

View File

@@ -32,6 +32,14 @@ public class BusinessXRFDataPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleTime;
@Schema(description = "样品开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleStartTime;
@Schema(description = "样品结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleEndTime;
@Schema(description = "分析人")
private String assayOperator;

View File

@@ -35,6 +35,14 @@ public class BusinessXRFDataReqVO {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleTime;
@Schema(description = "样品开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleStartTime;
@Schema(description = "样品结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] sampleEndTime;
@Schema(description = "分析人")
private String assayOperator;

View File

@@ -40,6 +40,14 @@ public class BusinessXRFDataRespVO {
@ExcelProperty("样品时间")
private LocalDateTime sampleTime;
@Schema(description = "样品开始时间")
@ExcelProperty("样品开始时间")
private LocalDateTime sampleStartTime;
@Schema(description = "样品结束时间")
@ExcelProperty("样品结束时间")
private LocalDateTime sampleEndTime;
@Schema(description = "分析人")
@ExcelProperty("分析人")
private String assayOperator;

View File

@@ -34,6 +34,12 @@ public class BusinessXRFDataSaveReqVO {
@Schema(description = "样品时间")
private LocalDateTime sampleTime;
@Schema(description = "样品开始时间")
private LocalDateTime sampleStartTime;
@Schema(description = "样品结束时间")
private LocalDateTime sampleEndTime;
@Schema(description = "分析人")
private String assayOperator;

View File

@@ -2,10 +2,7 @@ package com.zt.plat.module.qms.business.bus.dal.dataobject;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
/**
@@ -64,6 +61,16 @@ public class BusinessXRFDataDO extends BusinessBaseDO {
@TableField("SMP_TM")
private LocalDateTime sampleTime;
/**
* 样品开始时间
*/
@TableField("SMP_STRT_TM")
private LocalDateTime sampleStartTime;
/**
* 样品结束时间
*/
@TableField("SMP_END_TM")
private LocalDateTime sampleEndTime;
/**
* 分析人
*/
@TableField("ASY_OPTR")

View File

@@ -290,6 +290,7 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
.selectAs(BusinessSubSampleDO::getSampleName, BusinessAssayTaskDataExtendRespVO::getSampleName)
.selectAs(BusinessSubSampleDO::getSampleCode, BusinessAssayTaskDataExtendRespVO::getSampleCode)
.selectAs(BusinessSubSampleDO::getSampleAssayCode, BusinessAssayTaskDataExtendRespVO::getSampleAssayCode)
.selectAs(BusinessSubSampleDO::getConfigSubSampleId, BusinessAssayTaskDataExtendRespVO::getConfigSubSampleId)
.in(BusinessSubSampleDO::getSampleAssayCode, sampleAssayCodes)
.eq(ConfigAssayMethodDO::getDictionaryBusinessKey, configAssayMethodDictionaryBusinessKey)
.eq(BusinessAssayTaskDataDO::getIsReported, QmsCommonConstant.NO));

View File

@@ -61,4 +61,18 @@ public interface BusinessAssayTaskParameterDataMapper extends BaseMapperX<Busine
.orderByAsc(ConfigAssayMethodParameterDO::getSortNo));
}
default List<BusinessAssayTaskParameterDataExtendRespVO> selectExtendByBusinessAssayTaskDataIds(List<Long> businessAssayTaskDataIdList) {
return selectJoinList(BusinessAssayTaskParameterDataExtendRespVO.class, new MPJLambdaWrapperX<BusinessAssayTaskParameterDataDO>()
.leftJoin(ConfigAssayMethodParameterDO.class, ConfigAssayMethodParameterDO::getId, BusinessAssayTaskParameterDataDO::getConfigAssayMethodParameterId)
.selectAll(BusinessAssayTaskParameterDataDO.class)
.selectAs(ConfigAssayMethodParameterDO::getConfigAssayMethodId, BusinessAssayTaskParameterDataExtendRespVO::getConfigAssayMethodId)
.selectAs(ConfigAssayMethodParameterDO::getParameterName, BusinessAssayTaskParameterDataExtendRespVO::getParameterName)
.selectAs(ConfigAssayMethodParameterDO::getShortName, BusinessAssayTaskParameterDataExtendRespVO::getShortName)
.selectAs(ConfigAssayMethodParameterDO::getKey, BusinessAssayTaskParameterDataExtendRespVO::getKey)
.selectAs(ConfigAssayMethodParameterDO::getNo, BusinessAssayTaskParameterDataExtendRespVO::getNo)
.in(BusinessAssayTaskParameterDataDO::getBusinessAssayTaskDataId, businessAssayTaskDataIdList)
);
}
}

View File

@@ -666,11 +666,11 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
String targetParameter = target.getParameter();
BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(businessAssayTaskDataDO.getId(), targetProject, targetParameter);
if (businessAssayParameterDataDO == null) {
throw new ServiceException(1_032_100_000, "子样检测方法映射配置错误");
}
// if (businessAssayParameterDataDO == null) {
// throw new ServiceException(1_032_100_000, "子样检测方法映射配置错误");
// }
if (StringUtils.isBlank(businessAssayParameterDataDO.getValue())) {
if (businessAssayParameterDataDO != null && StringUtils.isBlank(businessAssayParameterDataDO.getValue())) {
//1 查询委托明细
BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = businessSampleEntrustDetailMapper.selectByBusinessBaseSampleId(businessAssayTaskDataDO.getBusinessBaseSampleId());
//2 查询样品大类
@@ -1295,6 +1295,9 @@ public class SampleAnalysisServiceImpl implements SampleAnalysisService {
if (StringUtils.isNotBlank(configInfomation)) {
ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class);
List<ConfigSubSampleMethodConfItem> setParamList = configSubSampleMethodConfInfo.getSetParam();
if (CollUtil.isEmpty(setParamList)) {
continue;//跳出循环
}
String methodKey = setParamList.stream().map(m -> m.getTarget().getMethodKey()).distinct().findFirst().orElse(null);
List<BusinessAssayTaskDataDO> targetBusinessAssayTaskDataList = businessAssayTaskDataMapper.selectByBusinessSubSampleIdAndMethodKey(businessAssayTaskData.getBusinessSubSampleId(), methodKey);

View File

@@ -54,6 +54,26 @@ public class XRFDeviceSampleReqVO implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "样品时间")
private LocalDateTime sampleTime;
/**
* 样品开始时间
*/
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化(响应)
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化(请求)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "样品开始时间")
private LocalDateTime sampleStartTime;
/**
* 样品结束时间
*/
@JsonSerialize(using = LocalDateTimeSerializer.class) // 序列化(响应)
@JsonDeserialize(using = LocalDateTimeDeserializer.class) // 反序列化(请求)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "样品结束时间")
private LocalDateTime sampleEndTime;
/**
* 分析人

View File

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -17,29 +18,40 @@ import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayParameterDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskParameterDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementProjectDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessXRFDataDO;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayParameterDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayProjectDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskParameterDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCCoefficientDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCCoefficientParameterDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCManagementDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessQCManagementProjectDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessXRFDataMapper;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfInfo;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfItem;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodConfPoint;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSubSampleMethodExtendRespVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFConversionRateDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFLineDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigXRFProjectDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigSubSampleMethodMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFConversionRateMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFLineMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigXRFProjectMapper;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import com.zt.plat.module.qms.thirdpartyapi.controller.vo.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -59,15 +71,24 @@ public class XRFDataServiceImpl implements XRFDataService {
@Resource
private ConfigAssayMethodProjectMapper configAssayMethodProjectMapper;
@Resource
private ConfigSubSampleMethodMapper configSubSampleMethodMapper;
@Resource
private BusinessXRFDataMapper businessXRFDataMapper;
@Resource
private BusinessAssayTaskDataMapper businessAssayTaskDataMapper;
@Resource
private BusinessAssayTaskParameterDataMapper businessAssayTaskParameterDataMapper;
@Resource
private BusinessAssayProjectDataMapper businessAssayProjectDataMapper;
@Resource
private BusinessAssayParameterDataMapper businessAssayParameterDataMapper;
@Resource
private BusinessQCManagementDataMapper businessQCManagementDataMapper;
@@ -120,6 +141,11 @@ public class XRFDataServiceImpl implements XRFDataService {
//根据样品编号及分析方法类型,获取检测任务数据
List<BusinessAssayTaskDataExtendRespVO> businessAssayTaskDataList = businessAssayTaskDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf");
List<Long> businessAssayTaskDataIdList = businessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
//获取检测参数
List<BusinessAssayTaskParameterDataExtendRespVO> businessAssayTaskParameterDataExtendList = businessAssayTaskParameterDataMapper.selectExtendByBusinessAssayTaskDataIds(businessAssayTaskDataIdList);
//管理样和标准样
List<BusinessQCManagementDataDO> businessQCManagementDataList = businessQCManagementDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf");
@@ -128,7 +154,11 @@ public class XRFDataServiceImpl implements XRFDataService {
// List<BusinessQCCoefficientDataDO> businessQCCoefficientDataList = businessQCCoefficientDataMapper.selectBySampleAssayCodesAndConfigAssayMethodDictionaryBusinessKey(sampleCodeList, "xshxyggpf");
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = new ArrayList<>();
List<BusinessAssayTaskParameterDataDO> businessAssayTaskParameterDataList = new ArrayList<>();
List<BusinessAssayProjectDataDO> busElementValueList = new ArrayList<>();
List<BusinessAssayParameterDataDO> updateBusinessAssayParameterDataList = new ArrayList<>();
List<BusinessQCManagementProjectDataDO> busQcManageElementValueList = new ArrayList<>();
// List<BusinessQCCoefficientParameterDataDO> busQccParameterValueList = new ArrayList<>();
List<BusinessXRFDataDO> busYgDataList = new ArrayList<>();
@@ -149,6 +179,8 @@ public class XRFDataServiceImpl implements XRFDataService {
busYgData.setXRFSampleId(ygDeviceSample.getSampleId());
busYgData.setSampleCode(ygDeviceSample.getSampleCode());
busYgData.setSampleTime(ygDeviceSample.getSampleTime());
busYgData.setSampleStartTime(ygDeviceSample.getSampleStartTime());
busYgData.setSampleEndTime(ygDeviceSample.getSampleEndTime());
busYgData.setAssayOperator(ygDeviceSample.getAssayOper());
busYgData.setIsCheckCreate(ygDeviceSample.getIsCheck() ? 1 : 0);
@@ -164,7 +196,26 @@ public class XRFDataServiceImpl implements XRFDataService {
List<BusinessAssayProjectDataExtendRespVO> tempBusElementValueList = new ArrayList<>();
List<BusinessAssayTaskDataExtendRespVO> currBusinessAssayTaskDataList = businessAssayTaskDataList.stream().filter(f -> ygDeviceSample.getSampleCode().equals(f.getSampleAssayCode())).collect(Collectors.toList());
if (currBusinessAssayTaskDataList != null && currBusinessAssayTaskDataList.size() > 0) {
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) {
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) {
//处理任务参数
List<BusinessAssayTaskParameterDataExtendRespVO> currBusinessAssayTaskParameterDataExtendList = businessAssayTaskParameterDataExtendList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId())).collect(Collectors.toList());
for (BusinessAssayTaskParameterDataExtendRespVO currBusinessAssayTaskParameterDataExtend : currBusinessAssayTaskParameterDataExtendList) {
switch (currBusinessAssayTaskParameterDataExtend.getKey()) {
case "lineName":
currBusinessAssayTaskParameterDataExtend.setValue(busYgData.getLineName());
businessAssayTaskParameterDataList.add(BeanUtils.toBean(currBusinessAssayTaskParameterDataExtend, BusinessAssayTaskParameterDataDO.class));
break;
case "sampleStartTime":
currBusinessAssayTaskParameterDataExtend.setValue(DateUtil.formatLocalDateTime(busYgData.getSampleStartTime()));
businessAssayTaskParameterDataList.add(BeanUtils.toBean(currBusinessAssayTaskParameterDataExtend, BusinessAssayTaskParameterDataDO.class));
break;
case "sampleEndTime":
currBusinessAssayTaskParameterDataExtend.setValue(DateUtil.formatLocalDateTime(busYgData.getSampleEndTime()));
businessAssayTaskParameterDataList.add(BeanUtils.toBean(currBusinessAssayTaskParameterDataExtend, BusinessAssayTaskParameterDataDO.class));
break;
}
}
List<BusinessAssayProjectDataExtendRespVO> busElementValues = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataId(businessAssayTaskData.getId());
tempBusElementValueList.addAll(busElementValues);
}
@@ -295,6 +346,43 @@ public class XRFDataServiceImpl implements XRFDataService {
if (currBusinessAssayTaskDataList != null && currBusinessAssayTaskDataList.size() > 0) {
for (BusinessAssayTaskDataExtendRespVO businessAssayTaskData : currBusinessAssayTaskDataList) {
ConfigSubSampleMethodExtendRespVO configSubSampleMethod = configSubSampleMethodMapper.selectByConfigSubSampleIdAndConfigAssayMethodId(businessAssayTaskData.getConfigSubSampleId(), businessAssayTaskData.getConfigAssayMethodId());
String configInfomation = configSubSampleMethod.getConfigInfomation();
if (StringUtils.isNotBlank(configInfomation)) {
ConfigSubSampleMethodConfInfo configSubSampleMethodConfInfo = JSON.parseObject(configInfomation, ConfigSubSampleMethodConfInfo.class);
List<ConfigSubSampleMethodConfItem> setParamList = configSubSampleMethodConfInfo.getSetParam();
if (CollUtil.isEmpty(setParamList)) {
continue;//跳出循环
}
String methodKey = setParamList.stream().map(m -> m.getTarget().getMethodKey()).distinct().findFirst().orElse(null);
List<BusinessAssayTaskDataDO> targetBusinessAssayTaskDataList = businessAssayTaskDataMapper.selectByBusinessSubSampleIdAndMethodKey(businessAssayTaskData.getBusinessSubSampleId(), methodKey);
List<Long> targetBusinessAssayTaskDataIdList = targetBusinessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
List<BusinessAssayProjectDataExtendRespVO> targetBusinessAssayProjectDataExtendList = businessAssayProjectDataMapper.selectByBusinessAssayTaskDataIds(targetBusinessAssayTaskDataIdList);
for (ConfigSubSampleMethodConfItem configSubSampleMethodConfItem : setParamList) {
ConfigSubSampleMethodConfPoint source = configSubSampleMethodConfItem.getSource();
String project = source.getProject();
BusinessAssayProjectDataExtendRespVO currentBusinessAssayProjectData = tempBusElementValueList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(businessAssayTaskData.getId()) && f.getSimpleName().equals(project)).findFirst().orElse(null);
ConfigSubSampleMethodConfPoint target = configSubSampleMethodConfItem.getTarget();
for (BusinessAssayTaskDataDO targetBusinessAssayTaskData : targetBusinessAssayTaskDataList) {
List<String> targetProjectList = Arrays.asList(target.getProject().split(","));
String targetParameter = target.getParameter();
for (String targetProject : targetProjectList) {
BusinessAssayProjectDataExtendRespVO targetBusinessAssayProjectData = targetBusinessAssayProjectDataExtendList.stream().filter(f -> f.getBusinessAssayTaskDataId().equals(targetBusinessAssayTaskData.getId()) && f.getSimpleName().equals(targetProject)).findFirst().orElse(null);
BusinessAssayParameterDataDO businessAssayParameterDataDO = businessAssayParameterDataMapper.selectByBusinessAssayTaskDataIdAndProjectSimpleNameAndParameterKey(targetBusinessAssayProjectData.getId(), targetProject, targetParameter);
if (businessAssayParameterDataDO != null) {
businessAssayParameterDataDO.setValue(currentBusinessAssayProjectData.getValue());
updateBusinessAssayParameterDataList.add(businessAssayParameterDataDO);
}
}
}
}
}
busYgData.setIsMatched(QmsCommonConstant.YES);
busYgData.setBusinessBaseSampleId(businessAssayTaskData.getBusinessBaseSampleId());
busYgData.setBusinessSubParentSampleId(businessAssayTaskData.getBusinessSubParentSampleId());
@@ -326,11 +414,22 @@ public class XRFDataServiceImpl implements XRFDataService {
//保存荧光数据
businessXRFDataMapper.insertBatch(busYgDataList);
//更新任务参数
if (businessAssayTaskParameterDataList.size() > 0) {
businessAssayTaskParameterDataMapper.updateBatch(businessAssayTaskParameterDataList);
}
//更新分析结果
if (busElementValueList.size() > 0) {
businessAssayProjectDataMapper.updateBatch(busElementValueList);
}
//更新检测项目参数
if (updateBusinessAssayParameterDataList.size() > 0) {
businessAssayParameterDataMapper.updateBatch(updateBusinessAssayParameterDataList);
}
//荧光管理样和标准样
if (busQcManageElementValueList.size() > 0) {
businessQCManagementProjectDataMapper.updateBatch(busQcManageElementValueList);