Merge remote-tracking branch 'origin/test' into test

This commit is contained in:
FCL
2025-10-13 15:37:04 +08:00
40 changed files with 2669 additions and 78 deletions

View File

@@ -38,6 +38,8 @@ public interface ErrorCodeConstants {
ErrorCode CONFIG_ASSAY_METHOD_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法配置不存在"); ErrorCode CONFIG_ASSAY_METHOD_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法配置不存在");
ErrorCode CONFIG_ASSAY_METHOD_PROJECT_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目配置不存在"); ErrorCode CONFIG_ASSAY_METHOD_PROJECT_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目配置不存在");
ErrorCode CONFIG_ASSAY_METHOD_PROJECT_RANGE_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目区间不存在"); ErrorCode CONFIG_ASSAY_METHOD_PROJECT_RANGE_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目区间不存在");
ErrorCode CONFIG_ASSAY_METHOD_PROJECT_ASSESSMENT_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目判定不存在");
ErrorCode CONFIG_ASSAY_METHOD_PROJECT_COEFFICIENT_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测方法分析项目补正系数不存在");
ErrorCode CONFIG_REPORT_FIELD_NOT_EXISTS = new ErrorCode(1_032_050_000, "报表字段配置不存在"); ErrorCode CONFIG_REPORT_FIELD_NOT_EXISTS = new ErrorCode(1_032_050_000, "报表字段配置不存在");
ErrorCode CONFIG_STANDARD_SAMPLE_TYPE_NOT_EXISTS = new ErrorCode(1_032_050_000, "标准样类型配置不存在"); ErrorCode CONFIG_STANDARD_SAMPLE_TYPE_NOT_EXISTS = new ErrorCode(1_032_050_000, "标准样类型配置不存在");
ErrorCode CONFIG_STANDARD_SAMPLE_PROJECT_NOT_EXISTS = new ErrorCode(1_032_050_000, "标准样检测项目配置不存在"); ErrorCode CONFIG_STANDARD_SAMPLE_PROJECT_NOT_EXISTS = new ErrorCode(1_032_050_000, "标准样检测项目配置不存在");
@@ -55,6 +57,7 @@ public interface ErrorCodeConstants {
ErrorCode CONFIG_WAREHOUSE_LOCATION_INFOMATION_NOT_EXISTS = new ErrorCode(1_032_050_000, "样品库位信息不存在"); ErrorCode CONFIG_WAREHOUSE_LOCATION_INFOMATION_NOT_EXISTS = new ErrorCode(1_032_050_000, "样品库位信息不存在");
ErrorCode CONFIG_SIMPLE_FLOW_RULE_NOT_EXISTS = new ErrorCode(1_032_050_000, "LiteFlow规则配置不存在"); ErrorCode CONFIG_SIMPLE_FLOW_RULE_NOT_EXISTS = new ErrorCode(1_032_050_000, "LiteFlow规则配置不存在");
ErrorCode CONFIG_SIMPLE_FLOW_CODE_NOT_EXISTS = new ErrorCode(1_032_050_000, "LiteFlow脚本配置不存在"); ErrorCode CONFIG_SIMPLE_FLOW_CODE_NOT_EXISTS = new ErrorCode(1_032_050_000, "LiteFlow脚本配置不存在");
ErrorCode CONFIG_RULE_NOT_EXISTS = new ErrorCode(1_032_050_000, "规则配置不存在");
ErrorCode BASE_SAMPLE_NOT_EXISTS = new ErrorCode(1_032_050_000, "样品大类管理不存在"); ErrorCode BASE_SAMPLE_NOT_EXISTS = new ErrorCode(1_032_050_000, "样品大类管理不存在");
ErrorCode MATERIAL_ASSAY_STANDARD_DETAIL_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测标准明细不存在"); ErrorCode MATERIAL_ASSAY_STANDARD_DETAIL_NOT_EXISTS = new ErrorCode(1_032_050_000, "检测标准明细不存在");

View File

@@ -110,6 +110,12 @@
<dependency> <dependency>
<groupId>com.zt.plat</groupId> <groupId>com.zt.plat</groupId>
<artifactId>zt-spring-boot-starter-test</artifactId> <artifactId>zt-spring-boot-starter-test</artifactId>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
</exclusions>
</dependency> </dependency>
<!-- 工具类相关 --> <!-- 工具类相关 -->

View File

@@ -13,6 +13,7 @@ import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDataRe
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO; import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
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;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@@ -25,11 +26,6 @@ import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTaskDataDO> { public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTaskDataDO> {
List<BusinessAssayTaskDataGroupRespVO> selectUnAssayTaskGroupList(@Param("reqVO") BusinessAssayTaskDataReqVO reqVO);
List<BusinessAssayTaskDataGroupRespVO> selectUnAuditTaskGroupList(@Param("reqVO") BusinessAssayTaskDataReqVO reqVO);
default List<BusinessAssayTaskDataExtendRespVO> selectList(BusinessAssayTaskDataReqVO reqVO) { default List<BusinessAssayTaskDataExtendRespVO> selectList(BusinessAssayTaskDataReqVO reqVO) {
return selectJoinList(BusinessAssayTaskDataExtendRespVO.class, new MPJLambdaWrapperX<BusinessAssayTaskDataDO>() return selectJoinList(BusinessAssayTaskDataExtendRespVO.class, new MPJLambdaWrapperX<BusinessAssayTaskDataDO>()
.leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessAssayTaskDataDO::getConfigAssayMethodId) .leftJoin(ConfigAssayMethodDO.class, ConfigAssayMethodDO::getId, BusinessAssayTaskDataDO::getConfigAssayMethodId)
@@ -102,4 +98,44 @@ public interface BusinessAssayTaskDataMapper extends BaseMapperX<BusinessAssayTa
.orderByDesc(BusinessAssayTaskDataDO::getId)); .orderByDesc(BusinessAssayTaskDataDO::getId));
} }
/**
* 查询未指派的分析任务分组
* @param reqVO
* @return
*/
List<BusinessAssayTaskDataGroupRespVO> selectUnAssayTaskGroupList(@Param("reqVO") BusinessAssayTaskDataReqVO reqVO);
/**
* 查询未审核的分析任务分组
* @param reqVO
* @return
*/
List<BusinessAssayTaskDataGroupRespVO> selectUnAuditTaskGroupList(@Param("reqVO") BusinessAssayTaskDataReqVO reqVO);
/**
* 根据任务分配单id查询分析任务
* @param businessAssayTaskId 任务分配单id
* @return
*/
default List<BusinessAssayTaskDataDO> selectByBusinessAssayTaskId(Long businessAssayTaskId) {
return selectList(new LambdaQueryWrapperX<BusinessAssayTaskDataDO>()
.eq(BusinessAssayTaskDataDO::getBusinessAssayTaskId, businessAssayTaskId));
}
/**
* 查询是否上报的分析任务
* @param excludeIds 排除的id列表
* @param businessSubSampleId 子样id
* @param configAssayMethodId 分析方法id
* @param isReported 是否上报
* @return
*/
default List<BusinessAssayTaskDataDO> selectIsReportedList(List<Long> excludeIds, Long businessSubSampleId, Long configAssayMethodId, Integer isReported) {
return selectList(new LambdaQueryWrapperX<BusinessAssayTaskDataDO>()
.notIn(BusinessAssayTaskDataDO::getId, excludeIds)
.eq(BusinessAssayTaskDataDO::getBusinessSubSampleId, businessSubSampleId)
.eq(BusinessAssayTaskDataDO::getConfigAssayMethodId, configAssayMethodId)
.eq(BusinessAssayTaskDataDO::getIsReported, isReported));
}
} }

View File

@@ -3,9 +3,11 @@ 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.module.qms.business.bus.controller.vo.*; import com.zt.plat.module.qms.business.bus.controller.vo.*;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessAssayTaskDetailPageReqVO;
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;
import java.util.List;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**
@@ -33,4 +35,9 @@ public interface BusinessAssayTaskDetailMapper extends BaseMapperX<BusinessAssay
.orderByDesc(BusinessAssayTaskDetailDO::getId)); .orderByDesc(BusinessAssayTaskDetailDO::getId));
} }
default List<BusinessAssayTaskDetailDO> selectByBusinessAssayTaskId(Long businessAssayTaskId) {
return selectList(new LambdaQueryWrapperX<BusinessAssayTaskDetailDO>()
.eqIfPresent(BusinessAssayTaskDetailDO::getBusinessAssayTaskId, businessAssayTaskId));
}
} }

View File

@@ -0,0 +1,35 @@
package com.zt.plat.module.qms.business.bus.liteflow.sample.analysisaudit;
import java.math.BigDecimal;
import java.util.List;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectAssessmentDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectAssessmentMapper;
import jakarta.annotation.Resource;
@LiteflowComponent(id = "sampleAnalysisProjectAssessmentCmp", name = "样品分析项目判定")
public class SampleAnalysisProjectAssessmentCmp extends NodeComponent {
@Resource
private ConfigAssayMethodProjectAssessmentMapper configAssayMethodProjectAssessmentMapper;
@Override
public void process() throws Exception {
List<ConfigAssayMethodProjectAssessmentDO> configAssayMethodProjectAssessmentList = configAssayMethodProjectAssessmentMapper.selectList();
BigDecimal min_yc = BigDecimal.ZERO;//最小允差
BigDecimal max_yc = BigDecimal.ZERO;//最大允差
BigDecimal min_va = BigDecimal.ZERO;//最小值
BigDecimal max_va = BigDecimal.ZERO;//最大值
BigDecimal k = BigDecimal.ZERO;//斜率k
BigDecimal b = BigDecimal.ZERO;//纵截距b
BigDecimal c = BigDecimal.ZERO;//调整参数
BigDecimal yc_value = BigDecimal.ZERO;//允差值
}
}

View File

@@ -3,6 +3,7 @@ package com.zt.plat.module.qms.business.bus.liteflow.sample.entrust;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -209,7 +210,7 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
List<Long> configAssayMethodIdList = materialAssayStandardMethodList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList()); List<Long> configAssayMethodIdList = materialAssayStandardMethodList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList());
//查找子样配置 //查找子样配置
List<Long> configSubSampleIdList = configSubSampleMethodList.stream().filter(f -> configAssayMethodIdList.contains(f.getConfigAssayMethodId())).map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList()); List<Long> configSubSampleIdList = configSubSampleMethodList.stream().filter(f -> f.getIsDefaultUse().equals(QmsCommonConstant.YES) && configAssayMethodIdList.contains(f.getConfigAssayMethodId())).map(m -> m.getConfigSubSampleId()).distinct().collect(Collectors.toList());
//查询当前委托样品对应的子样 //查询当前委托样品对应的子样
List<ConfigSubSampleDO> entrustConfigSubSampleList = configSubSampleList.stream().filter(f -> configSubSampleIdList.contains(f.getId()) && f.getBaseSampleId().equals(businessSampleEntrustDetailDO.getBaseSampleId())).distinct().collect(Collectors.toList()); List<ConfigSubSampleDO> entrustConfigSubSampleList = configSubSampleList.stream().filter(f -> configSubSampleIdList.contains(f.getId()) && f.getBaseSampleId().equals(businessSampleEntrustDetailDO.getBaseSampleId())).distinct().collect(Collectors.toList());
@@ -309,11 +310,13 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
//子样对应的分析班组 //子样对应的分析班组
BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO = null; BusinessSubSampleAnalysisGroupDO businessSubSampleAnalysisGroupDO = null;
//根据检测方法循环
BusinessAssayTaskDataDO businessAssayTaskDataDO = null;
for (Long configAssayMethodId : configAssayMethodIdList) { for (Long configAssayMethodId : configAssayMethodIdList) {
//查询分析方法
ConfigAssayMethodDO configAssayMethodDO = configAssayMethodList.stream().filter(f -> f.getId().equals(configAssayMethodId)).findFirst().orElse(null); ConfigAssayMethodDO configAssayMethodDO = configAssayMethodList.stream().filter(f -> f.getId().equals(configAssayMethodId)).findFirst().orElse(null);
//查询子样对应的分析方法
ConfigSubSampleMethodDO configSubSampleMethodDO = configSubSampleMethodList.stream().filter(f -> f.getIsDefaultUse().equals(QmsCommonConstant.YES) && f.getConfigAssayMethodId().equals(configAssayMethodId) && f.getConfigSubSampleId().equals(configSubSample.getId())).findFirst().orElse(null);
businessSubSampleAnalysisGroupDO = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getAssayDepartmentId().equals(configAssayMethodDO.getAssayDepartmentId())).findFirst().orElse(null); businessSubSampleAnalysisGroupDO = businessSubSampleAnalysisGroupDOList.stream().filter(f -> f.getAssayDepartmentId().equals(configAssayMethodDO.getAssayDepartmentId())).findFirst().orElse(null);
if (businessSubSampleAnalysisGroupDO == null) { if (businessSubSampleAnalysisGroupDO == null) {
businessSubSampleAnalysisGroupDO = new BusinessSubSampleAnalysisGroupDO(); businessSubSampleAnalysisGroupDO = new BusinessSubSampleAnalysisGroupDO();
@@ -328,71 +331,80 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
businessSubSampleAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO); businessSubSampleAnalysisGroupDOList.add(businessSubSampleAnalysisGroupDO);
} }
//子样检测任务 //根据检测方法循环
businessAssayTaskDataDO = new BusinessAssayTaskDataDO(); BusinessAssayTaskDataDO businessAssayTaskDataDO = null;
businessAssayTaskDataDO.setId(IdWorker.getId());
businessAssayTaskDataDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId()); //根据任务数判断是平行还是
businessAssayTaskDataDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId()); String assayType = configSubSampleMethodDO.getTaskCount() > 1 ? "平行" : "单杯";
businessAssayTaskDataDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessAssayTaskDataDO.setConfigAssayMethodId(configAssayMethodId); //根据任务数循环
businessAssayTaskDataDO.setAssayType("单杯"); for (int i = 0; i < configSubSampleMethodDO.getTaskCount(); i++) {
businessAssayTaskDataDO.setTaskType("常规"); //子样检测任务
businessAssayTaskDataDO.setConfigSampleFlowId(configSampleFlowSub.getId()); businessAssayTaskDataDO = new BusinessAssayTaskDataDO();
businessAssayTaskDataDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey()); businessAssayTaskDataDO.setId(IdWorker.getId());
businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime); businessAssayTaskDataDO.setBusinessBaseSampleId(businessSubSampleDO.getBusinessBaseSampleId());
businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId()); businessAssayTaskDataDO.setBusinessSubParentSampleId(businessSubSampleDO.getBusinessSubParentSampleId());
businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName()); businessAssayTaskDataDO.setBusinessSubSampleId(businessSubSampleDO.getId());
businessAssayTaskDataDO.setConfigAssayMethodId(configAssayMethodId);
businessAssayTaskDataDO.setAssayType(assayType);
businessAssayTaskDataDO.setTaskType("常规");
businessAssayTaskDataDO.setConfigSampleFlowId(configSampleFlowSub.getId());
businessAssayTaskDataDO.setSampleFlowNodeKey(sampleFlowNodeSub.getNodeKey());
businessAssayTaskDataDO.setSampleFlowNodeTime(currentDateTime);
businessAssayTaskDataDO.setAssayDepartmentId(configAssayMethodDO.getAssayDepartmentId());
businessAssayTaskDataDO.setAssayDepartmentName(configAssayMethodDO.getAssayDepartmentName());
List<ConfigAssayMethodProjectDO> configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).collect(Collectors.toList()); List<ConfigAssayMethodProjectDO> configAssayMethodProjectDOList = configAssayMethodProjectList.stream().filter(f -> f.getConfigAssayMethodId().equals(configAssayMethodId)).collect(Collectors.toList());
StringBuilder assayProjectBuilder = new StringBuilder();
for (ConfigAssayMethodProjectDO configAssayMethodProjectDO : configAssayMethodProjectDOList) {
//如果当前分析方法的项目不在当前检测项目中,则跳出循环继续
if (!dictionaryProjectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) {
continue;
}
DictionaryProjectDO dictionaryProject = dictionaryProjectList.stream().filter(f -> f.getId().equals(configAssayMethodProjectDO.getDictionaryProjectId())).findFirst().orElse(null);
assayProjectBuilder.append(dictionaryProject.getShowName()).append(",");
//检测项目
BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO();
businessAssayProjectDataDO.setId(IdWorker.getId());
businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId());
businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId());
businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId());
businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType());
businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition());
businessAssayProjectDataDO.setIsEnabled(1);
businessAssayProjectDataDO.setIsNotAssessment(0);
businessAssayProjectDataDOList.add(businessAssayProjectDataDO);
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList());
for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) {
BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO();
businessAssayParameterDataDO.setId(IdWorker.getId());
businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId());
businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId());
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
}
StringBuilder assayProjectBuilder = new StringBuilder();
for (ConfigAssayMethodProjectDO configAssayMethodProjectDO : configAssayMethodProjectDOList) {
//如果当前分析方法的项目不在当前检测项目中,则跳出循环继续
if (!dictionaryProjectIdList.contains(configAssayMethodProjectDO.getDictionaryProjectId())) {
continue;
} }
DictionaryProjectDO dictionaryProject = dictionaryProjectList.stream().filter(f -> f.getId().equals(configAssayMethodProjectDO.getDictionaryProjectId())).findFirst().orElse(null); assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length());
assayProjectBuilder.append(dictionaryProject.getShowName()).append(","); businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString());
businessAssayTaskDataDOList.add(businessAssayTaskDataDO);
//检测项目
BusinessAssayProjectDataDO businessAssayProjectDataDO = new BusinessAssayProjectDataDO();
businessAssayProjectDataDO.setId(IdWorker.getId());
businessAssayProjectDataDO.setBusinessAssayTaskDataId(businessAssayTaskDataDO.getId());
businessAssayProjectDataDO.setConfigAssayMethodProjectId(configAssayMethodProjectDO.getId());
businessAssayProjectDataDO.setDictionaryProjectId(configAssayMethodProjectDO.getDictionaryProjectId());
businessAssayProjectDataDO.setDataType(configAssayMethodProjectDO.getDataType());
businessAssayProjectDataDO.setDecimalPosition(configAssayMethodProjectDO.getDecimalPosition());
businessAssayProjectDataDO.setIsEnabled(1);
businessAssayProjectDataDO.setIsNotAssessment(0);
businessAssayProjectDataDOList.add(businessAssayProjectDataDO);
List<ConfigAssayMethodProjectParameterDO> configAssayMethodProjectParameterDOList = configAssayMethodProjectParameterList.stream().filter(f -> f.getConfigAssayMethodProjectId().equals(configAssayMethodProjectDO.getId())).collect(Collectors.toList());
for (ConfigAssayMethodProjectParameterDO configAssayMethodProjectParameterDO : configAssayMethodProjectParameterDOList) {
BusinessAssayParameterDataDO businessAssayParameterDataDO = new BusinessAssayParameterDataDO();
businessAssayParameterDataDO.setId(IdWorker.getId());
businessAssayParameterDataDO.setConfigAssayMethodProjectParameterId(configAssayMethodProjectParameterDO.getId());
businessAssayParameterDataDO.setBusinessAssayProjectDataId(businessAssayProjectDataDO.getId());
businessAssayParameterDataDO.setDictionaryParameterId(configAssayMethodProjectParameterDO.getDictionaryParameterId());
businessAssayParameterDataDO.setDataType(configAssayMethodProjectParameterDO.getDataType());
businessAssayParameterDataDO.setDecimalPosition(configAssayMethodProjectParameterDO.getDecimalPosition());
businessAssayParameterDataDOList.add(businessAssayParameterDataDO);
}
} }
assayProjectBuilder.delete(assayProjectBuilder.length() - 1 , assayProjectBuilder.length());
businessAssayTaskDataDO.setAssayProject(assayProjectBuilder.toString());
businessAssayTaskDataDOList.add(businessAssayTaskDataDO);
} }
} }

View File

@@ -5,6 +5,7 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ql.util.express.ExpressRunner;
import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.NodeComponent;
@@ -24,6 +25,9 @@ public class SampleSubProcessUpdateCmp extends NodeComponent {
// @Resource // @Resource
// private ConfigSubSampleService configSubSampleService; // private ConfigSubSampleService configSubSampleService;
@Resource
private ExpressRunner expressRunner;
@Resource @Resource
private ConfigSampleFlowService configSampleFlowService; private ConfigSampleFlowService configSampleFlowService;

View File

@@ -0,0 +1,153 @@
package com.zt.plat.module.qms.business.bus.liteflow.sample.taskassign;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import cn.hutool.core.collection.CollUtil;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper;
import com.zt.plat.module.qms.business.bus.liteflow.param.AssignAssayUser;
import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignContext;
import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignTypeEnum;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportTemplateMapper;
import com.zt.plat.module.qms.core.code.SequenceUtil;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import jakarta.annotation.Resource;
/**
* <b>SampleTaskAssignMethodCmp</b>
* <p>
* 更新历史:
* <pre> 版本 更新时间 更新者 更新内容<hr/>
* V1.0 2025年9月20日 wxr Add</pre>
* <b>Copyright (C) 云南志者竟成科技有限公司</b>
* </p>
* @author 王兴荣<wxr@wangxingrong.com>
* @version V1.0
* @since 2025年9月20日
*/
@LiteflowComponent(id = "sampleTaskAssignMethodCmp", name = "按分析方法分配")
public class SampleTaskAssignMethodCmp extends NodeComponent {
@Resource
private SequenceUtil sequenceUtil;
@Resource
private ConfigAssayMethodMapper configAssayMethodMapper;
@Resource
private ConfigReportTemplateMapper configReportTemplateMapper;
@Resource
private BusinessAssayTaskDataMapper businessAssayTaskDataMapper;
@Resource
private BusinessSubSampleMapper businessSubSampleMapper;
@Override
public void process() throws Exception {
SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class);
String loginRealname = sampleTaskAssignContext.getLoginRealname();
LocalDateTime currentDateTime = sampleTaskAssignContext.getCurrentDateTime();
Long assignConfigAssayMethodId = sampleTaskAssignContext.getAssignConfigAssayMethodId();
List<AssignAssayUser> assignAssayUserList = sampleTaskAssignContext.getAssignAssayUserList();
//查询分析方法配置
ConfigAssayMethodDO configAssayMethod = configAssayMethodMapper.selectById(assignConfigAssayMethodId);
List<ConfigAssayMethodDO> configAssayMethodList = sampleTaskAssignContext.getConfigAssayMethodList();
if (CollUtil.isEmpty(configAssayMethodList)) {
configAssayMethodList = new ArrayList<>();
configAssayMethodList.add(configAssayMethod);
}
//查询报表模板
ConfigReportTemplateDO configReportTemplate = configReportTemplateMapper.selectLatestConfigReportTemplateByKey(configAssayMethod.getConfigReportTemplateKey());
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectList(new LambdaQueryWrapperX<BusinessAssayTaskDataDO>().eq(BusinessAssayTaskDataDO::getConfigAssayMethodId, assignConfigAssayMethodId).eq(BusinessAssayTaskDataDO::getIsAssignTasked, QmsCommonConstant.NO));
List<Long> businessSubSampleIdList = businessAssayTaskDataDOList.stream().map(m -> m.getBusinessSubSampleId()).collect(Collectors.toList());
List<BusinessSubSampleDO> businessSubSampleList = businessSubSampleMapper.selectByIds(businessSubSampleIdList);
sampleTaskAssignContext.setBusinessSubSampleList(businessSubSampleList);
List<BusinessAssayTaskDataDO> businessAssayTaskDataList = new ArrayList<>();
//任务分配单
List<BusinessAssayTaskDO> businessAssayTaskList = new ArrayList<>();
//任务分配单明细
List<BusinessAssayTaskDetailDO> businessAssayTaskDetailList = new ArrayList<>();
//循环分析人员分配任务
for (AssignAssayUser assignAssayUser : assignAssayUserList) {
Integer sampleNum = assignAssayUser.getSampleNum();
String taskNo = sequenceUtil.genCode(configAssayMethod.getCodeRule());
BusinessAssayTaskDO businessAssayTaskDO = new BusinessAssayTaskDO();
businessAssayTaskDO.setId(IdWorker.getId());
businessAssayTaskDO.setTaskNo(taskNo);
businessAssayTaskDO.setTaskName(configAssayMethod.getName());
businessAssayTaskDO.setConfigAssayMethodId(assignConfigAssayMethodId);
businessAssayTaskDO.setAssayOperator(assignAssayUser.getRealName());
businessAssayTaskDO.setTaskOperator(loginRealname);
businessAssayTaskDO.setTaskOperatorTime(currentDateTime);
businessAssayTaskDO.setTaskStatus("in_progress");
businessAssayTaskDO.setTaskSourceType("分配");
businessAssayTaskDO.setConfigReportTemplateId(configReportTemplate.getId());
businessAssayTaskDO.setConfigReportTemplateKey(configReportTemplate.getKey());
BusinessAssayTaskDetailDO businessAssayTaskDetailDO = null;
for (int i = 0; i < sampleNum; i++) {
BusinessAssayTaskDataDO businessAssayTaskDataDO = businessAssayTaskDataDOList.get(0);
businessAssayTaskDataDO.setIsAssignTasked(QmsCommonConstant.YES);
businessAssayTaskDataDO.setAssignTaskTime(currentDateTime);
businessAssayTaskDataDO.setAssayOperator(assignAssayUser.getRealName());
businessAssayTaskDataDO.setBusinessAssayTaskId(businessAssayTaskDO.getId());
BusinessSubSampleDO businessSubSampleDO = sampleTaskAssignContext.getBusinessSubSampleById(businessAssayTaskDataDO.getBusinessSubSampleId());
businessAssayTaskDetailDO = new BusinessAssayTaskDetailDO();
businessAssayTaskDetailDO.setBusinessAssayTaskId(businessAssayTaskDO.getId());
businessAssayTaskDetailDO.setTaskNo(taskNo);
businessAssayTaskDetailDO.setSampleId(businessAssayTaskDataDO.getBusinessSubSampleId());
businessAssayTaskDetailDO.setSampleCode(businessSubSampleDO.getSampleAssayCode());
businessAssayTaskDetailDO.setSampleName(businessSubSampleDO.getSampleName());
businessAssayTaskDetailDO.setDataSourceType("正常");
businessAssayTaskDetailDO.setSortNo(i+1);
businessAssayTaskDetailList.add(businessAssayTaskDetailDO);
businessAssayTaskDataList.add(businessAssayTaskDataDO);
//移除当前对象
businessAssayTaskDataDOList.remove(businessAssayTaskDataDO);
}
businessAssayTaskList.add(businessAssayTaskDO);
}
sampleTaskAssignContext.setBusinessAssayTaskList(businessAssayTaskList);
sampleTaskAssignContext.setBusinessAssayTaskDetailList(businessAssayTaskDetailList);
sampleTaskAssignContext.setBusinessAssayTaskDataList(businessAssayTaskDataList);
}
@Override
public boolean isAccess() {
SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class);
return sampleTaskAssignContext.getSampleTaskAssignType().equals(SampleTaskAssignTypeEnum.ASSAY_METHOD);
}
}

View File

@@ -0,0 +1,145 @@
package com.zt.plat.module.qms.business.bus.liteflow.sample.taskassign;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDetailDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSubSampleDO;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskDataMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessSubSampleMapper;
import com.zt.plat.module.qms.business.bus.liteflow.param.AssignAssayUser;
import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignContext;
import com.zt.plat.module.qms.business.bus.liteflow.slot.SampleTaskAssignTypeEnum;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTemplateDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodMapper;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigReportTemplateMapper;
import com.zt.plat.module.qms.core.code.SequenceUtil;
import com.zt.plat.module.qms.enums.QmsCommonConstant;
import jakarta.annotation.Resource;
/**
* <b>SampleTaskAssignSampleCmp</b>
* <p>
* 更新历史:
* <pre> 版本 更新时间 更新者 更新内容<hr/>
* V1.0 2025年9月20日 wxr Add</pre>
* <b>Copyright (C) 云南志者竟成科技有限公司</b>
* </p>
* @author 王兴荣<wxr@wangxingrong.com>
* @version V1.0
* @since 2025年9月20日
*/
@LiteflowComponent(id = "sampleTaskAssignSampleCmp", name = "按样品分配")
public class SampleTaskAssignSampleCmp extends NodeComponent {
@Resource
private SequenceUtil sequenceUtil;
@Resource
private ConfigAssayMethodMapper configAssayMethodMapper;
@Resource
private ConfigReportTemplateMapper configReportTemplateMapper;
@Resource
private BusinessAssayTaskDataMapper businessAssayTaskDataMapper;
@Resource
private BusinessSubSampleMapper businessSubSampleMapper;
@Override
public void process() throws Exception {
SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class);
String loginRealname = sampleTaskAssignContext.getLoginRealname();
LocalDateTime currentDateTime = sampleTaskAssignContext.getCurrentDateTime();
AssignAssayUser assignAssayUser = sampleTaskAssignContext.getAssignAssayUser();
List<Long> assignSampleIdList = sampleTaskAssignContext.getAssignSampleIdList();
//根据分配的样品id查询分析任务数据
List<BusinessAssayTaskDataDO> businessAssayTaskDataList = businessAssayTaskDataMapper.selectList(new LambdaQueryWrapperX<BusinessAssayTaskDataDO>().in(BusinessAssayTaskDataDO::getBusinessSubSampleId, assignSampleIdList).eq(BusinessAssayTaskDataDO::getIsAssignTasked, QmsCommonConstant.NO));
List<Long> configAssayMethodIdList = businessAssayTaskDataList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList());
List<ConfigAssayMethodDO> configAssayMethodList = configAssayMethodMapper.selectByIds(configAssayMethodIdList);
sampleTaskAssignContext.setConfigAssayMethodList(configAssayMethodList);
//查询子样
List<BusinessSubSampleDO> businessSubSampleList = businessSubSampleMapper.selectByIds(assignSampleIdList);
sampleTaskAssignContext.setBusinessSubSampleList(businessSubSampleList);
//任务分配单
List<BusinessAssayTaskDO> businessAssayTaskList = new ArrayList<>();
//任务分配单明细
List<BusinessAssayTaskDetailDO> businessAssayTaskDetailList = new ArrayList<>();
//按分析方法分组
Map<Long, List<BusinessAssayTaskDataDO>> groupBusinessAssayTaskDataListMap = businessAssayTaskDataList.stream().collect(Collectors.groupingBy(BusinessAssayTaskDataDO::getConfigAssayMethodId));
for (Map.Entry<Long, List<BusinessAssayTaskDataDO>> entry : groupBusinessAssayTaskDataListMap.entrySet()) {
long key = entry.getKey();
ConfigAssayMethodDO configAssayMethod = sampleTaskAssignContext.getConfigAssayMethodById(key);
//查询报表模板
ConfigReportTemplateDO configReportTemplate = configReportTemplateMapper.selectLatestConfigReportTemplateByKey(configAssayMethod.getConfigReportTemplateKey());
String taskNo = sequenceUtil.genCode(configAssayMethod.getCodeRule());
BusinessAssayTaskDO businessAssayTaskDO = new BusinessAssayTaskDO();
businessAssayTaskDO.setId(IdWorker.getId());
businessAssayTaskDO.setTaskNo(taskNo);
businessAssayTaskDO.setTaskName(configAssayMethod.getName());
businessAssayTaskDO.setAssayOperator(assignAssayUser.getRealName());
businessAssayTaskDO.setTaskOperator(loginRealname);
businessAssayTaskDO.setTaskOperatorTime(currentDateTime);
businessAssayTaskDO.setConfigAssayMethodId(key);
businessAssayTaskDO.setTaskStatus("in_progress");
businessAssayTaskDO.setTaskSourceType("分配");
businessAssayTaskDO.setConfigReportTemplateId(configReportTemplate.getId());
businessAssayTaskDO.setConfigReportTemplateKey(configReportTemplate.getKey());
BusinessAssayTaskDetailDO businessAssayTaskDetailDO = null;
List<BusinessAssayTaskDataDO> valList = entry.getValue();
int sort = 1;
for (BusinessAssayTaskDataDO val : valList) {
val.setIsAssignTasked(QmsCommonConstant.YES);
val.setAssignTaskTime(currentDateTime);
val.setAssayOperator(assignAssayUser.getRealName());
val.setBusinessAssayTaskId(businessAssayTaskDO.getId());
BusinessSubSampleDO businessSubSampleDO = sampleTaskAssignContext.getBusinessSubSampleById(val.getBusinessSubSampleId());
businessAssayTaskDetailDO = new BusinessAssayTaskDetailDO();
businessAssayTaskDetailDO.setBusinessAssayTaskId(businessAssayTaskDO.getId());
businessAssayTaskDetailDO.setTaskNo(taskNo);
businessAssayTaskDetailDO.setSampleId(val.getBusinessSubSampleId());
businessAssayTaskDetailDO.setSampleCode(businessSubSampleDO.getSampleAssayCode());
businessAssayTaskDetailDO.setSampleName(businessSubSampleDO.getSampleName());
businessAssayTaskDetailDO.setDataSourceType("正常");
businessAssayTaskDetailDO.setSortNo(sort);
sort++;
businessAssayTaskDetailList.add(businessAssayTaskDetailDO);
}
businessAssayTaskList.add(businessAssayTaskDO);
}
sampleTaskAssignContext.setBusinessAssayTaskDataList(businessAssayTaskDataList);
sampleTaskAssignContext.setBusinessAssayTaskList(businessAssayTaskList);
sampleTaskAssignContext.setBusinessAssayTaskDetailList(businessAssayTaskDetailList);
}
@Override
public boolean isAccess() {
SampleTaskAssignContext sampleTaskAssignContext = this.getContextBean(SampleTaskAssignContext.class);
return sampleTaskAssignContext.getSampleTaskAssignType().equals(SampleTaskAssignTypeEnum.SAMPLE);
}
}

View File

@@ -1,12 +1,28 @@
package com.zt.plat.module.qms.business.bus.service; package com.zt.plat.module.qms.business.bus.service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ql.util.express.ExpressRunner;
import com.zt.plat.framework.common.exception.ServiceException;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayProjectDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO; import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskDataDO;
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.BusinessAssayTaskDetailMapper;
import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskMapper; import com.zt.plat.module.qms.business.bus.dal.mapper.BusinessAssayTaskMapper;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectAssessmentDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectAssessmentMapper;
import com.zt.plat.module.qms.core.qlexpress.cmp.AllowanceCalculatorComponent;
import com.zt.plat.module.qms.enums.QmsCommonConstant; import com.zt.plat.module.qms.enums.QmsCommonConstant;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -25,9 +41,27 @@ import jakarta.annotation.Resource;
@Service @Service
public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditService { public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditService {
@Resource
private ExpressRunner expressRunner;
@Resource
private AllowanceCalculatorComponent allowanceCalculatorComponent;
@Resource @Resource
private BusinessAssayTaskMapper businessAssayTaskMapper; private BusinessAssayTaskMapper businessAssayTaskMapper;
@Resource
private BusinessAssayTaskDetailMapper businessAssayTaskDetailMapper;
@Resource
private BusinessAssayTaskDataMapper businessAssayTaskDataMapper;
@Resource
private BusinessAssayProjectDataMapper businessAssayProjectDataMapper;
@Resource
private ConfigAssayMethodProjectAssessmentMapper configAssayMethodProjectAssessmentMapper;
@Override @Override
public void crossAuditByByTaskId(Long businessAssayTaskId, String auditStatus) { public void crossAuditByByTaskId(Long businessAssayTaskId, String auditStatus) {
@@ -37,6 +71,138 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.APPROVED); businessAssayTaskDO.setFlowStatus(QmsCommonConstant.APPROVED);
businessAssayTaskDO.setReportTime(LocalDateTime.now()); businessAssayTaskDO.setReportTime(LocalDateTime.now());
businessAssayTaskDO.setReportOperator(SecurityFrameworkUtils.getLoginUserNickname()); businessAssayTaskDO.setReportOperator(SecurityFrameworkUtils.getLoginUserNickname());
//List<BusinessAssayTaskDetailDO> businessAssayTaskDetailDOList = businessAssayTaskDetailMapper.selectByBusinessAssayTaskId(businessAssayTaskId);
//查询分析任务明细
List<BusinessAssayTaskDataDO> businessAssayTaskDataDOList = businessAssayTaskDataMapper.selectByBusinessAssayTaskId(businessAssayTaskId);
Map<Long, List<BusinessAssayTaskDataDO>> businessAssayTaskDataDOMap = businessAssayTaskDataDOList.stream().collect(Collectors.groupingBy(BusinessAssayTaskDataDO::getBusinessSubSampleId));
for (Map.Entry<Long, List<BusinessAssayTaskDataDO>> businessAssayTaskDataDOMapEntry : businessAssayTaskDataDOMap.entrySet()) {
//Long key = businessAssayTaskDataDOMapEntry.getKey();
List<BusinessAssayTaskDataDO> businessAssayTaskDataList = businessAssayTaskDataDOMapEntry.getValue();
List<Long> businessAssayTaskDataIdList = businessAssayTaskDataList.stream().map(m -> m.getId()).collect(Collectors.toList());
BusinessAssayTaskDataDO businessAssayTaskDataDO = businessAssayTaskDataList.get(0);
if ("平行".equals(businessAssayTaskDataDO.getAssayType())) {
//根据子样id及分析方法id查询未上报的分析任务
List<BusinessAssayTaskDataDO> unReportedList = businessAssayTaskDataMapper.selectIsReportedList(businessAssayTaskDataIdList, businessAssayTaskDataDO.getBusinessSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), QmsCommonConstant.NO);
if (unReportedList.size() > 0) {//还有未上报数据,直接处理,无需判定
continue;
} else {//做超差判定
//根据子样id及分析方法id查询已上报的分析任务
List<BusinessAssayTaskDataDO> reportedList = businessAssayTaskDataMapper.selectIsReportedList(businessAssayTaskDataIdList, businessAssayTaskDataDO.getBusinessSubSampleId(), businessAssayTaskDataDO.getConfigAssayMethodId(), QmsCommonConstant.YES);
if (reportedList.size() > 0) {
List<Long> reportedBusinessAssayTaskDataIdList = reportedList.stream().map(m -> m.getId()).collect(Collectors.toList());
businessAssayTaskDataIdList.addAll(reportedBusinessAssayTaskDataIdList);
}
//查询分析项目
List<BusinessAssayProjectDataDO> businessAssayProjectDataDOList = businessAssayProjectDataMapper.selectList(new LambdaQueryWrapperX<BusinessAssayProjectDataDO>().in(BusinessAssayProjectDataDO::getBusinessAssayTaskDataId, businessAssayTaskDataIdList));
Map<Long, List<BusinessAssayProjectDataDO>> businessAssayProjectDataDOMap = businessAssayProjectDataDOList.stream().collect(Collectors.groupingBy(BusinessAssayProjectDataDO::getDictionaryProjectId));
for (Map.Entry<Long, List<BusinessAssayProjectDataDO>> entry1 : businessAssayProjectDataDOMap.entrySet()) {
Long dictionaryProjectId = entry1.getKey();
List<BusinessAssayProjectDataDO> val1 = entry1.getValue();
BusinessAssayProjectDataDO businessAssayProjectDataDO = val1.get(0);
List<ConfigAssayMethodProjectAssessmentDO> configAssayMethodProjectAssessmentDOList = configAssayMethodProjectAssessmentMapper.selectList(new LambdaQueryWrapperX<ConfigAssayMethodProjectAssessmentDO>().eq(ConfigAssayMethodProjectAssessmentDO::getConfigAssayMethodId, businessAssayTaskDataDO.getConfigAssayMethodId()).eq(ConfigAssayMethodProjectAssessmentDO::getConfigAssayMethodProjectId, businessAssayProjectDataDO.getConfigAssayMethodProjectId()));
// 排序并处理 null
List<BigDecimal> sortedValues = val1.stream()
.map(v -> {
String val = v.getValue();
return val == null || val.trim().isEmpty() ? BigDecimal.ZERO : new BigDecimal(val.trim());
})
.sorted()
.collect(Collectors.toList());
// 获取小数精度
int elementScale = businessAssayProjectDataDO.getDecimalPosition();
// 计算代表值(均值或差值)
BigDecimal representativeValue = calculateRepresentativeValue(sortedValues);
// 查找匹配的允差规则
ConfigAssayMethodProjectAssessmentDO matchedRule = findMatchingRule(configAssayMethodProjectAssessmentDOList, representativeValue);
if (matchedRule == null) {
throw new ServiceException(500, "未找到超差判定区间范围元素ID: " + dictionaryProjectId + ", 值: " + representativeValue);
}
// 计算允差值
BigDecimal allowValue;
try {
allowValue = allowanceCalculatorComponent.calculateAllowableValue(new BigDecimal(matchedRule.getMinimumValue()), new BigDecimal(matchedRule.getMaximumValue()), new BigDecimal(matchedRule.getMinimumToleraanceValue()), new BigDecimal(matchedRule.getMaximumToleraanceValue()), new BigDecimal(matchedRule.getToleraanceAdjustmentValue()), representativeValue, matchedRule.getIsUseFormula(), matchedRule.getFormula(), elementScale);
} catch (Exception e) {
throw new ServiceException(500, "超差判定计算出错检测项目ID: " + dictionaryProjectId);
}
// 判断相邻差值是否超差
for (int i = 0; i < sortedValues.size() - 1; i++) {
BigDecimal diff = sortedValues.get(i + 1).subtract(sortedValues.get(i)).abs();
if (diff.compareTo(allowValue) > 0) {
}
}
}
}
} else if ("双杯".equals(businessAssayTaskDataDO.getAssayType())) {
} else {//单杯
}
}
// for (BusinessAssayTaskDataDO businessAssayTaskDataDO : businessAssayTaskDataDOList) {
// if ("平行".equals(businessAssayTaskDataDO.getAssayType())) {
// //判定检查项目是否都已上报
//
//
// }
//
//
//
// }
} else { } else {
businessAssayTaskDO.setFinishStatus(QmsCommonConstant.PENDING); businessAssayTaskDO.setFinishStatus(QmsCommonConstant.PENDING);
businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START); businessAssayTaskDO.setFlowStatus(QmsCommonConstant.NOT_START);
@@ -44,4 +210,46 @@ public class SampleAnalysisAuditServiceImpl implements SampleAnalysisAuditServic
businessAssayTaskMapper.updateById(businessAssayTaskDO); businessAssayTaskMapper.updateById(businessAssayTaskDO);
} }
// 查找匹配的允差区间
private ConfigAssayMethodProjectAssessmentDO findMatchingRule(List<ConfigAssayMethodProjectAssessmentDO> rules, BigDecimal value) {
if (rules == null || rules.isEmpty()) return null;
// 特殊处理 level=0 和 level=4
for (ConfigAssayMethodProjectAssessmentDO rule : rules) {
if (rule.getAssessmentLevel() == 0) {
ConfigAssayMethodProjectAssessmentDO next = rules.stream()
.filter(r -> r.getAssessmentLevel() == 1)
.findFirst()
.orElse(rule);
if (value.compareTo(new BigDecimal(next.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(next.getMaximumValue())) <= 0) {
return next;
}
} else if (rule.getAssessmentLevel() == 4) {
ConfigAssayMethodProjectAssessmentDO prev = rules.stream()
.filter(r -> r.getAssessmentLevel() == 3)
.findFirst()
.orElse(rule);
if (value.compareTo(new BigDecimal(prev.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(prev.getMaximumValue())) <= 0) {
return prev;
}
} else {
if (value.compareTo(new BigDecimal(rule.getMinimumValue())) >= 0 && value.compareTo(new BigDecimal(rule.getMaximumValue())) <= 0) {
return rule;
}
}
}
return null;
}
// 计算代表值1个取本身2个取均值>2取平均
private BigDecimal calculateRepresentativeValue(List<BigDecimal> values) {
int size = values.size();
if (size == 0) return BigDecimal.ZERO;
if (size == 1) return values.get(0);
if (size == 2) {
return values.get(0).add(values.get(1)).divide(BigDecimal.valueOf(2), 6, RoundingMode.HALF_EVEN);
}
BigDecimal sum = values.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
return sum.divide(BigDecimal.valueOf(size), 6, RoundingMode.HALF_EVEN);
}
} }

View File

@@ -0,0 +1,106 @@
package com.zt.plat.module.qms.business.config.controller.admin;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
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.service.ConfigAssayMethodProjectAssessmentService;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 检测方法分析项目判定")
@RestController
@RequestMapping("/qms/config-assay-method-project-assessment")
@Validated
public class ConfigAssayMethodProjectAssessmentController implements BusinessControllerMarker {
@Resource
private ConfigAssayMethodProjectAssessmentService configAssayMethodProjectAssessmentService;
@PostMapping("/create")
@Operation(summary = "创建检测方法分析项目判定")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:create')")
public CommonResult<ConfigAssayMethodProjectAssessmentRespVO> createConfigAssayMethodProjectAssessment(@Valid @RequestBody ConfigAssayMethodProjectAssessmentSaveReqVO createReqVO) {
return success(configAssayMethodProjectAssessmentService.createConfigAssayMethodProjectAssessment(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新检测方法分析项目判定")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:update')")
public CommonResult<Boolean> updateConfigAssayMethodProjectAssessment(@Valid @RequestBody ConfigAssayMethodProjectAssessmentSaveReqVO updateReqVO) {
configAssayMethodProjectAssessmentService.updateConfigAssayMethodProjectAssessment(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除检测方法分析项目判定")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:delete')")
public CommonResult<Boolean> deleteConfigAssayMethodProjectAssessment(@RequestParam("id") Long id) {
configAssayMethodProjectAssessmentService.deleteConfigAssayMethodProjectAssessment(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除检测方法分析项目判定")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:delete')")
public CommonResult<Boolean> deleteConfigAssayMethodProjectAssessmentList(@RequestBody BatchDeleteReqVO req) {
configAssayMethodProjectAssessmentService.deleteConfigAssayMethodProjectAssessmentListByIds(req.getIds());
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得检测方法分析项目判定")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:query')")
public CommonResult<ConfigAssayMethodProjectAssessmentRespVO> getConfigAssayMethodProjectAssessment(@RequestParam("id") Long id) {
ConfigAssayMethodProjectAssessmentDO configAssayMethodProjectAssessment = configAssayMethodProjectAssessmentService.getConfigAssayMethodProjectAssessment(id);
return success(BeanUtils.toBean(configAssayMethodProjectAssessment, ConfigAssayMethodProjectAssessmentRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得检测方法分析项目判定分页")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:query')")
public CommonResult<PageResult<ConfigAssayMethodProjectAssessmentRespVO>> getConfigAssayMethodProjectAssessmentPage(@Valid ConfigAssayMethodProjectAssessmentPageReqVO pageReqVO) {
PageResult<ConfigAssayMethodProjectAssessmentDO> pageResult = configAssayMethodProjectAssessmentService.getConfigAssayMethodProjectAssessmentPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ConfigAssayMethodProjectAssessmentRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出检测方法分析项目判定 Excel")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-assessment:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportConfigAssayMethodProjectAssessmentExcel(@Valid ConfigAssayMethodProjectAssessmentPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ConfigAssayMethodProjectAssessmentDO> list = configAssayMethodProjectAssessmentService.getConfigAssayMethodProjectAssessmentPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "检测方法分析项目判定.xls", "数据", ConfigAssayMethodProjectAssessmentRespVO.class,
BeanUtils.toBean(list, ConfigAssayMethodProjectAssessmentRespVO.class));
}
}

View File

@@ -0,0 +1,106 @@
package com.zt.plat.module.qms.business.config.controller.admin;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectCoefficientDO;
import com.zt.plat.module.qms.business.config.service.ConfigAssayMethodProjectCoefficientService;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 检测方法分析项目补正系数")
@RestController
@RequestMapping("/qms/config-assay-method-project-coefficient")
@Validated
public class ConfigAssayMethodProjectCoefficientController implements BusinessControllerMarker {
@Resource
private ConfigAssayMethodProjectCoefficientService configAssayMethodProjectCoefficientService;
@PostMapping("/create")
@Operation(summary = "创建检测方法分析项目补正系数")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:create')")
public CommonResult<ConfigAssayMethodProjectCoefficientRespVO> createConfigAssayMethodProjectCoefficient(@Valid @RequestBody ConfigAssayMethodProjectCoefficientSaveReqVO createReqVO) {
return success(configAssayMethodProjectCoefficientService.createConfigAssayMethodProjectCoefficient(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新检测方法分析项目补正系数")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:update')")
public CommonResult<Boolean> updateConfigAssayMethodProjectCoefficient(@Valid @RequestBody ConfigAssayMethodProjectCoefficientSaveReqVO updateReqVO) {
configAssayMethodProjectCoefficientService.updateConfigAssayMethodProjectCoefficient(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除检测方法分析项目补正系数")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:delete')")
public CommonResult<Boolean> deleteConfigAssayMethodProjectCoefficient(@RequestParam("id") Long id) {
configAssayMethodProjectCoefficientService.deleteConfigAssayMethodProjectCoefficient(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除检测方法分析项目补正系数")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:delete')")
public CommonResult<Boolean> deleteConfigAssayMethodProjectCoefficientList(@RequestBody BatchDeleteReqVO req) {
configAssayMethodProjectCoefficientService.deleteConfigAssayMethodProjectCoefficientListByIds(req.getIds());
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得检测方法分析项目补正系数")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:query')")
public CommonResult<ConfigAssayMethodProjectCoefficientRespVO> getConfigAssayMethodProjectCoefficient(@RequestParam("id") Long id) {
ConfigAssayMethodProjectCoefficientDO configAssayMethodProjectCoefficient = configAssayMethodProjectCoefficientService.getConfigAssayMethodProjectCoefficient(id);
return success(BeanUtils.toBean(configAssayMethodProjectCoefficient, ConfigAssayMethodProjectCoefficientRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得检测方法分析项目补正系数分页")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:query')")
public CommonResult<PageResult<ConfigAssayMethodProjectCoefficientRespVO>> getConfigAssayMethodProjectCoefficientPage(@Valid ConfigAssayMethodProjectCoefficientPageReqVO pageReqVO) {
PageResult<ConfigAssayMethodProjectCoefficientDO> pageResult = configAssayMethodProjectCoefficientService.getConfigAssayMethodProjectCoefficientPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ConfigAssayMethodProjectCoefficientRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出检测方法分析项目补正系数 Excel")
@PreAuthorize("@ss.hasPermission('qms:config-assay-method-project-coefficient:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportConfigAssayMethodProjectCoefficientExcel(@Valid ConfigAssayMethodProjectCoefficientPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ConfigAssayMethodProjectCoefficientDO> list = configAssayMethodProjectCoefficientService.getConfigAssayMethodProjectCoefficientPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "检测方法分析项目补正系数.xls", "数据", ConfigAssayMethodProjectCoefficientRespVO.class,
BeanUtils.toBean(list, ConfigAssayMethodProjectCoefficientRespVO.class));
}
}

View File

@@ -0,0 +1,106 @@
package com.zt.plat.module.qms.business.config.controller.admin;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import com.zt.plat.framework.business.interceptor.BusinessControllerMarker;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*;
import jakarta.validation.*;
import jakarta.servlet.http.*;
import java.util.*;
import java.io.IOException;
import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
import com.zt.plat.framework.excel.core.util.ExcelUtils;
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.service.ConfigRuleService;
import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 规则配置")
@RestController
@RequestMapping("/qms/config-rule")
@Validated
public class ConfigRuleController implements BusinessControllerMarker {
@Resource
private ConfigRuleService configRuleService;
@PostMapping("/create")
@Operation(summary = "创建规则配置")
@PreAuthorize("@ss.hasPermission('qms:config-rule:create')")
public CommonResult<ConfigRuleRespVO> createConfigRule(@Valid @RequestBody ConfigRuleSaveReqVO createReqVO) {
return success(configRuleService.createConfigRule(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新规则配置")
@PreAuthorize("@ss.hasPermission('qms:config-rule:update')")
public CommonResult<Boolean> updateConfigRule(@Valid @RequestBody ConfigRuleSaveReqVO updateReqVO) {
configRuleService.updateConfigRule(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除规则配置")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('qms:config-rule:delete')")
public CommonResult<Boolean> deleteConfigRule(@RequestParam("id") Long id) {
configRuleService.deleteConfigRule(id);
return success(true);
}
@DeleteMapping("/delete-list")
@Parameter(name = "ids", description = "编号", required = true)
@Operation(summary = "批量删除规则配置")
@PreAuthorize("@ss.hasPermission('qms:config-rule:delete')")
public CommonResult<Boolean> deleteConfigRuleList(@RequestBody BatchDeleteReqVO req) {
configRuleService.deleteConfigRuleListByIds(req.getIds());
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得规则配置")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('qms:config-rule:query')")
public CommonResult<ConfigRuleRespVO> getConfigRule(@RequestParam("id") Long id) {
ConfigRuleDO configRule = configRuleService.getConfigRule(id);
return success(BeanUtils.toBean(configRule, ConfigRuleRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得规则配置分页")
@PreAuthorize("@ss.hasPermission('qms:config-rule:query')")
public CommonResult<PageResult<ConfigRuleRespVO>> getConfigRulePage(@Valid ConfigRulePageReqVO pageReqVO) {
PageResult<ConfigRuleDO> pageResult = configRuleService.getConfigRulePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ConfigRuleRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出规则配置 Excel")
@PreAuthorize("@ss.hasPermission('qms:config-rule:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportConfigRuleExcel(@Valid ConfigRulePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ConfigRuleDO> list = configRuleService.getConfigRulePage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "规则配置.xls", "数据", ConfigRuleRespVO.class,
BeanUtils.toBean(list, ConfigRuleRespVO.class));
}
}

View File

@@ -0,0 +1,65 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 检测方法分析项目判定分页 Request VO")
@Data
public class ConfigAssayMethodProjectAssessmentPageReqVO extends PageParam {
@Schema(description = "检测方法配置ID", example = "18120")
private Long configAssayMethodId;
@Schema(description = "检测方法分析项目配置ID", example = "10083")
private Long configAssayMethodProjectId;
@Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", example = "31414")
private Long dictionaryProjectId;
@Schema(description = "级别")
private Integer assessmentLevel;
@Schema(description = "范围")
private String assessmentRange;
@Schema(description = "最小允差值")
private String minimumToleraanceValue;
@Schema(description = "最大允差值")
private String maximumToleraanceValue;
@Schema(description = "最小值")
private String minimumValue;
@Schema(description = "最大值")
private String maximumValue;
@Schema(description = "计算公式")
private String formula;
@Schema(description = "是否使用公式计算计算允差值,1-是0-否")
private Integer isUseFormula;
@Schema(description = "允差值调整参数")
private String toleraanceAdjustmentValue;
@Schema(description = "所属部门")
private String systemDepartmentCode;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "备注")
private String remark;
@Schema(description = "版本")
private Integer version;
}

View File

@@ -0,0 +1,83 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 检测方法分析项目判定 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ConfigAssayMethodProjectAssessmentRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "912")
@ExcelProperty("ID")
private Long id;
@Schema(description = "检测方法配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18120")
@ExcelProperty("检测方法配置ID")
private Long configAssayMethodId;
@Schema(description = "检测方法分析项目配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10083")
@ExcelProperty("检测方法分析项目配置ID")
private Long configAssayMethodProjectId;
@Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "31414")
@ExcelProperty("检测项目ID,字典表【T_DIC_PRJ】")
private Long dictionaryProjectId;
@Schema(description = "级别")
@ExcelProperty("级别")
private Integer assessmentLevel;
@Schema(description = "范围")
@ExcelProperty("范围")
private String assessmentRange;
@Schema(description = "最小允差值")
@ExcelProperty("最小允差值")
private String minimumToleraanceValue;
@Schema(description = "最大允差值", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("最大允差值")
private String maximumToleraanceValue;
@Schema(description = "最小值")
@ExcelProperty("最小值")
private String minimumValue;
@Schema(description = "最大值", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("最大值")
private String maximumValue;
@Schema(description = "计算公式")
@ExcelProperty("计算公式")
private String formula;
@Schema(description = "是否使用公式计算计算允差值,1-是0-否")
@ExcelProperty("是否使用公式计算计算允差值,1-是0-否")
private Integer isUseFormula;
@Schema(description = "允差值调整参数")
@ExcelProperty("允差值调整参数")
private String toleraanceAdjustmentValue;
@Schema(description = "所属部门")
@ExcelProperty("所属部门")
private String systemDepartmentCode;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "备注")
@ExcelProperty("备注")
private String remark;
@Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("版本")
private Integer version;
}

View File

@@ -0,0 +1,66 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import jakarta.validation.constraints.*;
@Schema(description = "管理后台 - 检测方法分析项目判定新增/修改 Request VO")
@Data
public class ConfigAssayMethodProjectAssessmentSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "912")
private Long id;
@Schema(description = "检测方法配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18120")
@NotNull(message = "检测方法配置ID不能为空")
private Long configAssayMethodId;
@Schema(description = "检测方法分析项目配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10083")
@NotNull(message = "检测方法分析项目配置ID不能为空")
private Long configAssayMethodProjectId;
@Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "31414")
@NotNull(message = "检测项目ID,字典表【T_DIC_PRJ】不能为空")
private Long dictionaryProjectId;
@Schema(description = "级别")
private Integer assessmentLevel;
@Schema(description = "范围")
private String assessmentRange;
@Schema(description = "最小允差值")
private String minimumToleraanceValue;
@Schema(description = "最大允差值", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "最大允差值不能为空")
private String maximumToleraanceValue;
@Schema(description = "最小值")
private String minimumValue;
@Schema(description = "最大值", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "最大值不能为空")
private String maximumValue;
@Schema(description = "计算公式")
private String formula;
@Schema(description = "是否使用公式计算计算允差值,1-是0-否")
private Integer isUseFormula;
@Schema(description = "允差值调整参数")
private String toleraanceAdjustmentValue;
@Schema(description = "所属部门")
private String systemDepartmentCode;
@Schema(description = "备注")
private String remark;
@Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "版本不能为空")
private Integer version;
}

View File

@@ -0,0 +1,54 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 检测方法分析项目补正系数分页 Request VO")
@Data
public class ConfigAssayMethodProjectCoefficientPageReqVO extends PageParam {
@Schema(description = "检测方法配置ID", example = "10243")
private Long configAssayMethodId;
@Schema(description = "检测方法分析项目配置ID", example = "2854")
private Long configAssayMethodProjectId;
@Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", example = "23760")
private Long dictionaryProjectId;
@Schema(description = "检测项目缩写", example = "李四")
private String projectSimpleName;
@Schema(description = "范围")
private String range;
@Schema(description = "最小值")
private String minimumValue;
@Schema(description = "最大值")
private String maximumValue;
@Schema(description = "补正系数")
private BigDecimal coefficient;
@Schema(description = "所属部门")
private String systemDepartmentCustomsDeclaration;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "备注")
private String remark;
@Schema(description = "版本")
private Integer version;
}

View File

@@ -0,0 +1,68 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 检测方法分析项目补正系数 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ConfigAssayMethodProjectCoefficientRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26850")
@ExcelProperty("ID")
private Long id;
@Schema(description = "检测方法配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10243")
@ExcelProperty("检测方法配置ID")
private Long configAssayMethodId;
@Schema(description = "检测方法分析项目配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2854")
@ExcelProperty("检测方法分析项目配置ID")
private Long configAssayMethodProjectId;
@Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "23760")
@ExcelProperty("检测项目ID,字典表【T_DIC_PRJ】")
private Long dictionaryProjectId;
@Schema(description = "检测项目缩写", example = "李四")
@ExcelProperty("检测项目缩写")
private String projectSimpleName;
@Schema(description = "范围")
@ExcelProperty("范围")
private String range;
@Schema(description = "最小值")
@ExcelProperty("最小值")
private String minimumValue;
@Schema(description = "最大值", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("最大值")
private String maximumValue;
@Schema(description = "补正系数")
@ExcelProperty("补正系数")
private BigDecimal coefficient;
@Schema(description = "所属部门")
@ExcelProperty("所属部门")
private String systemDepartmentCustomsDeclaration;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "备注")
@ExcelProperty("备注")
private String remark;
@Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("版本")
private Integer version;
}

View File

@@ -0,0 +1,54 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 检测方法分析项目补正系数新增/修改 Request VO")
@Data
public class ConfigAssayMethodProjectCoefficientSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26850")
private Long id;
@Schema(description = "检测方法配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10243")
@NotNull(message = "检测方法配置ID不能为空")
private Long configAssayMethodId;
@Schema(description = "检测方法分析项目配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2854")
@NotNull(message = "检测方法分析项目配置ID不能为空")
private Long configAssayMethodProjectId;
@Schema(description = "检测项目ID,字典表【T_DIC_PRJ】", requiredMode = Schema.RequiredMode.REQUIRED, example = "23760")
@NotNull(message = "检测项目ID,字典表【T_DIC_PRJ】不能为空")
private Long dictionaryProjectId;
@Schema(description = "检测项目缩写", example = "李四")
private String projectSimpleName;
@Schema(description = "范围")
private String range;
@Schema(description = "最小值")
private String minimumValue;
@Schema(description = "最大值", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "最大值不能为空")
private String maximumValue;
@Schema(description = "补正系数")
private BigDecimal coefficient;
@Schema(description = "所属部门")
private String systemDepartmentCustomsDeclaration;
@Schema(description = "备注")
private String remark;
@Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "版本不能为空")
private Integer version;
}

View File

@@ -0,0 +1,47 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.zt.plat.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 规则配置分页 Request VO")
@Data
public class ConfigRulePageReqVO extends PageParam {
@Schema(description = "编码")
private String code;
@Schema(description = "名称", example = "芋艿")
private String name;
@Schema(description = "描述")
private String description;
@Schema(description = "类型", example = "2")
private String type;
@Schema(description = "表达式")
private String eXPRESSION;
@Schema(description = "版本")
private Integer version;
@Schema(description = "是否最新版本,1-是0-否")
private Integer isLast;
@Schema(description = "所属部门")
private String systemDepartmentCode;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "备注")
private String remark;
}

View File

@@ -0,0 +1,59 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 规则配置 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ConfigRuleRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21005")
@ExcelProperty("ID")
private Long id;
@Schema(description = "编码")
@ExcelProperty("编码")
private String code;
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@ExcelProperty("名称")
private String name;
@Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("描述")
private String description;
@Schema(description = "类型", example = "2")
@ExcelProperty("类型")
private String type;
@Schema(description = "表达式", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("表达式")
private String eXPRESSION;
@Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("版本")
private Integer version;
@Schema(description = "是否最新版本,1-是0-否")
@ExcelProperty("是否最新版本,1-是0-否")
private Integer isLast;
@Schema(description = "所属部门")
@ExcelProperty("所属部门")
private String systemDepartmentCode;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "备注")
@ExcelProperty("备注")
private String remark;
}

View File

@@ -0,0 +1,46 @@
package com.zt.plat.module.qms.business.config.controller.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import jakarta.validation.constraints.*;
@Schema(description = "管理后台 - 规则配置新增/修改 Request VO")
@Data
public class ConfigRuleSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21005")
private Long id;
@Schema(description = "编码")
private String code;
@Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
@NotEmpty(message = "名称不能为空")
private String name;
@Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "描述不能为空")
private String description;
@Schema(description = "类型", example = "2")
private String type;
@Schema(description = "表达式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "表达式不能为空")
private String eXPRESSION;
@Schema(description = "版本", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "版本不能为空")
private Integer version;
@Schema(description = "是否最新版本,1-是0-否")
private Integer isLast;
@Schema(description = "所属部门")
private String systemDepartmentCode;
@Schema(description = "备注")
private String remark;
}

View File

@@ -0,0 +1,110 @@
package com.zt.plat.module.qms.business.config.dal.dataobject;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
/**
* 检测方法分析项目判定 DO
*
* @author 后台管理
*/
@TableName("t_cfg_asy_mthd_prj_asmt")
@KeySequence("t_cfg_asy_mthd_prj_asmt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ConfigAssayMethodProjectAssessmentDO extends BusinessBaseDO {
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 检测方法配置ID
*/
@TableField("CFG_ASY_MTHD_ID")
private Long configAssayMethodId;
/**
* 检测方法分析项目配置ID
*/
@TableField("CFG_ASY_MTHD_PRJ_ID")
private Long configAssayMethodProjectId;
/**
* 检测项目ID,字典表【T_DIC_PRJ】
*/
@TableField("DIC_PRJ_ID")
private Long dictionaryProjectId;
/**
* 级别
*/
@TableField("ASMT_LVL")
private Integer assessmentLevel;
/**
* 范围
*/
@TableField("ASMT_RNG")
private String assessmentRange;
/**
* 最小允差值
*/
@TableField("MIN_TLC_VAL")
private String minimumToleraanceValue;
/**
* 最大允差值
*/
@TableField("MAX_TLC_VAL")
private String maximumToleraanceValue;
/**
* 最小值
*/
@TableField("MIN_VAL")
private String minimumValue;
/**
* 最大值
*/
@TableField("MAX_VAL")
private String maximumValue;
/**
* 计算公式
*/
@TableField("FMU")
private String formula;
/**
* 是否使用公式计算计算允差值,1-是0-否
*/
@TableField("IS_USE_FMU")
private Integer isUseFormula;
/**
* 允差值调整参数
*/
@TableField("TLC_ADJ_VAL")
private String toleraanceAdjustmentValue;
/**
* 所属部门
*/
@TableField("SYS_DEPT_CD")
private String systemDepartmentCode;
/**
* 备注
*/
@TableField("RMK")
private String remark;
/**
* 版本
*/
@TableField("VER")
private Integer version;
}

View File

@@ -0,0 +1,91 @@
package com.zt.plat.module.qms.business.config.dal.dataobject;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
/**
* 检测方法分析项目补正系数 DO
*
* @author 后台管理
*/
@TableName("t_cfg_asy_mthd_prj_coef")
@KeySequence("t_cfg_asy_mthd_prj_coef_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ConfigAssayMethodProjectCoefficientDO extends BusinessBaseDO {
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 检测方法配置ID
*/
@TableField("CFG_ASY_MTHD_ID")
private Long configAssayMethodId;
/**
* 检测方法分析项目配置ID
*/
@TableField("CFG_ASY_MTHD_PRJ_ID")
private Long configAssayMethodProjectId;
/**
* 检测项目ID,字典表【T_DIC_PRJ】
*/
@TableField("DIC_PRJ_ID")
private Long dictionaryProjectId;
/**
* 检测项目缩写
*/
@TableField("PRJ_SMPL_NAME")
private String projectSimpleName;
/**
* 范围
*/
@TableField("RNG")
private String range;
/**
* 最小值
*/
@TableField("MIN_VAL")
private String minimumValue;
/**
* 最大值
*/
@TableField("MAX_VAL")
private String maximumValue;
/**
* 补正系数
*/
@TableField("COEF")
private BigDecimal coefficient;
/**
* 所属部门
*/
@TableField("SYS_DEPT_CD")
private String systemDepartmentCustomsDeclaration;
/**
* 备注
*/
@TableField("RMK")
private String remark;
/**
* 版本
*/
@TableField("VER")
private Integer version;
}

View File

@@ -0,0 +1,80 @@
package com.zt.plat.module.qms.business.config.dal.dataobject;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
/**
* 规则配置 DO
*
* @author 后台管理
*/
@TableName("t_cfg_rul")
@KeySequence("t_cfg_rul_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
* 支持业务基类继承isBusiness=true 时继承 BusinessBaseDO否则继承 BaseDO
*/
public class ConfigRuleDO extends BusinessBaseDO {
/**
* ID
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 编码
*/
@TableField("CD")
private String code;
/**
* 名称
*/
@TableField("NAME")
private String name;
/**
* 描述
*/
@TableField("DSP")
private String description;
/**
* 类型
*/
@TableField("TP")
private String type;
/**
* 表达式
*/
@TableField("EPSSN")
private String eXPRESSION;
/**
* 版本
*/
@TableField("VER")
private Integer version;
/**
* 是否最新版本,1-是0-否
*/
@TableField("IS_LST")
private Integer isLast;
/**
* 所属部门
*/
@TableField("SYS_DEPT_CD")
private String systemDepartmentCode;
/**
* 备注
*/
@TableField("RMK")
private String remark;
}

View File

@@ -0,0 +1,41 @@
package com.zt.plat.module.qms.business.config.dal.mapper;
import java.util.*;
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.ConfigAssayMethodProjectAssessmentDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 检测方法分析项目判定 Mapper
*
* @author 后台管理
*/
@Mapper
public interface ConfigAssayMethodProjectAssessmentMapper extends BaseMapperX<ConfigAssayMethodProjectAssessmentDO> {
default PageResult<ConfigAssayMethodProjectAssessmentDO> selectPage(ConfigAssayMethodProjectAssessmentPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigAssayMethodProjectAssessmentDO>()
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getConfigAssayMethodProjectId, reqVO.getConfigAssayMethodProjectId())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getDictionaryProjectId, reqVO.getDictionaryProjectId())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getAssessmentLevel, reqVO.getAssessmentLevel())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getAssessmentRange, reqVO.getAssessmentRange())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getMinimumToleraanceValue, reqVO.getMinimumToleraanceValue())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getMaximumToleraanceValue, reqVO.getMaximumToleraanceValue())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getMinimumValue, reqVO.getMinimumValue())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getMaximumValue, reqVO.getMaximumValue())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getFormula, reqVO.getFormula())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getIsUseFormula, reqVO.getIsUseFormula())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getToleraanceAdjustmentValue, reqVO.getToleraanceAdjustmentValue())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(ConfigAssayMethodProjectAssessmentDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getRemark, reqVO.getRemark())
.eqIfPresent(ConfigAssayMethodProjectAssessmentDO::getVersion, reqVO.getVersion())
.orderByDesc(ConfigAssayMethodProjectAssessmentDO::getId));
}
}

View File

@@ -0,0 +1,37 @@
package com.zt.plat.module.qms.business.config.dal.mapper;
import java.util.*;
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.ConfigAssayMethodProjectCoefficientDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 检测方法分析项目补正系数 Mapper
*
* @author 后台管理
*/
@Mapper
public interface ConfigAssayMethodProjectCoefficientMapper extends BaseMapperX<ConfigAssayMethodProjectCoefficientDO> {
default PageResult<ConfigAssayMethodProjectCoefficientDO> selectPage(ConfigAssayMethodProjectCoefficientPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigAssayMethodProjectCoefficientDO>()
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getConfigAssayMethodProjectId, reqVO.getConfigAssayMethodProjectId())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getDictionaryProjectId, reqVO.getDictionaryProjectId())
.likeIfPresent(ConfigAssayMethodProjectCoefficientDO::getProjectSimpleName, reqVO.getProjectSimpleName())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getRange, reqVO.getRange())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getMinimumValue, reqVO.getMinimumValue())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getMaximumValue, reqVO.getMaximumValue())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getCoefficient, reqVO.getCoefficient())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getSystemDepartmentCustomsDeclaration, reqVO.getSystemDepartmentCustomsDeclaration())
.betweenIfPresent(ConfigAssayMethodProjectCoefficientDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getRemark, reqVO.getRemark())
.eqIfPresent(ConfigAssayMethodProjectCoefficientDO::getVersion, reqVO.getVersion())
.orderByDesc(ConfigAssayMethodProjectCoefficientDO::getId));
}
}

View File

@@ -0,0 +1,35 @@
package com.zt.plat.module.qms.business.config.dal.mapper;
import java.util.*;
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.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
/**
* 规则配置 Mapper
*
* @author 后台管理
*/
@Mapper
public interface ConfigRuleMapper extends BaseMapperX<ConfigRuleDO> {
default PageResult<ConfigRuleDO> selectPage(ConfigRulePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigRuleDO>()
.eqIfPresent(ConfigRuleDO::getCode, reqVO.getCode())
.likeIfPresent(ConfigRuleDO::getName, reqVO.getName())
.eqIfPresent(ConfigRuleDO::getDescription, reqVO.getDescription())
.eqIfPresent(ConfigRuleDO::getType, reqVO.getType())
.eqIfPresent(ConfigRuleDO::getEXPRESSION, reqVO.getEXPRESSION())
.eqIfPresent(ConfigRuleDO::getVersion, reqVO.getVersion())
.eqIfPresent(ConfigRuleDO::getIsLast, reqVO.getIsLast())
.eqIfPresent(ConfigRuleDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
.betweenIfPresent(ConfigRuleDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(ConfigRuleDO::getRemark, reqVO.getRemark())
.orderByDesc(ConfigRuleDO::getId));
}
}

View File

@@ -0,0 +1,62 @@
package com.zt.plat.module.qms.business.config.service;
import java.util.*;
import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult;
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.framework.common.pojo.PageParam;
/**
* 检测方法分析项目判定 Service 接口
*
* @author 后台管理
*/
public interface ConfigAssayMethodProjectAssessmentService {
/**
* 创建检测方法分析项目判定
*
* @param createReqVO 创建信息
* @return 编号
*/
ConfigAssayMethodProjectAssessmentRespVO createConfigAssayMethodProjectAssessment(@Valid ConfigAssayMethodProjectAssessmentSaveReqVO createReqVO);
/**
* 更新检测方法分析项目判定
*
* @param updateReqVO 更新信息
*/
void updateConfigAssayMethodProjectAssessment(@Valid ConfigAssayMethodProjectAssessmentSaveReqVO updateReqVO);
/**
* 删除检测方法分析项目判定
*
* @param id 编号
*/
void deleteConfigAssayMethodProjectAssessment(Long id);
/**
* 批量删除检测方法分析项目判定
*
* @param ids 编号
*/
void deleteConfigAssayMethodProjectAssessmentListByIds(List<Long> ids);
/**
* 获得检测方法分析项目判定
*
* @param id 编号
* @return 检测方法分析项目判定
*/
ConfigAssayMethodProjectAssessmentDO getConfigAssayMethodProjectAssessment(Long id);
/**
* 获得检测方法分析项目判定分页
*
* @param pageReqVO 分页查询
* @return 检测方法分析项目判定分页
*/
PageResult<ConfigAssayMethodProjectAssessmentDO> getConfigAssayMethodProjectAssessmentPage(ConfigAssayMethodProjectAssessmentPageReqVO pageReqVO);
}

View File

@@ -0,0 +1,91 @@
package com.zt.plat.module.qms.business.config.service;
import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.util.object.BeanUtils;
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.mapper.ConfigAssayMethodProjectAssessmentMapper;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*;
/**
* 检测方法分析项目判定 Service 实现类
*
* @author 后台管理
*/
@Service
@Validated
public class ConfigAssayMethodProjectAssessmentServiceImpl implements ConfigAssayMethodProjectAssessmentService {
@Resource
private ConfigAssayMethodProjectAssessmentMapper configAssayMethodProjectAssessmentMapper;
@Override
public ConfigAssayMethodProjectAssessmentRespVO createConfigAssayMethodProjectAssessment(ConfigAssayMethodProjectAssessmentSaveReqVO createReqVO) {
// 插入
ConfigAssayMethodProjectAssessmentDO configAssayMethodProjectAssessment = BeanUtils.toBean(createReqVO, ConfigAssayMethodProjectAssessmentDO.class);
configAssayMethodProjectAssessmentMapper.insert(configAssayMethodProjectAssessment);
// 返回
return BeanUtils.toBean(configAssayMethodProjectAssessment, ConfigAssayMethodProjectAssessmentRespVO.class);
}
@Override
public void updateConfigAssayMethodProjectAssessment(ConfigAssayMethodProjectAssessmentSaveReqVO updateReqVO) {
// 校验存在
validateConfigAssayMethodProjectAssessmentExists(updateReqVO.getId());
// 更新
ConfigAssayMethodProjectAssessmentDO updateObj = BeanUtils.toBean(updateReqVO, ConfigAssayMethodProjectAssessmentDO.class);
configAssayMethodProjectAssessmentMapper.updateById(updateObj);
}
@Override
public void deleteConfigAssayMethodProjectAssessment(Long id) {
// 校验存在
validateConfigAssayMethodProjectAssessmentExists(id);
// 删除
configAssayMethodProjectAssessmentMapper.deleteById(id);
}
@Override
public void deleteConfigAssayMethodProjectAssessmentListByIds(List<Long> ids) {
// 校验存在
validateConfigAssayMethodProjectAssessmentExists(ids);
// 删除
configAssayMethodProjectAssessmentMapper.deleteByIds(ids);
}
private void validateConfigAssayMethodProjectAssessmentExists(List<Long> ids) {
List<ConfigAssayMethodProjectAssessmentDO> list = configAssayMethodProjectAssessmentMapper.selectByIds(ids);
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
throw exception(CONFIG_ASSAY_METHOD_PROJECT_ASSESSMENT_NOT_EXISTS);
}
}
private void validateConfigAssayMethodProjectAssessmentExists(Long id) {
if (configAssayMethodProjectAssessmentMapper.selectById(id) == null) {
throw exception(CONFIG_ASSAY_METHOD_PROJECT_ASSESSMENT_NOT_EXISTS);
}
}
@Override
public ConfigAssayMethodProjectAssessmentDO getConfigAssayMethodProjectAssessment(Long id) {
return configAssayMethodProjectAssessmentMapper.selectById(id);
}
@Override
public PageResult<ConfigAssayMethodProjectAssessmentDO> getConfigAssayMethodProjectAssessmentPage(ConfigAssayMethodProjectAssessmentPageReqVO pageReqVO) {
return configAssayMethodProjectAssessmentMapper.selectPage(pageReqVO);
}
}

View File

@@ -0,0 +1,62 @@
package com.zt.plat.module.qms.business.config.service;
import java.util.*;
import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectCoefficientDO;
import com.zt.plat.framework.common.pojo.PageParam;
/**
* 检测方法分析项目补正系数 Service 接口
*
* @author 后台管理
*/
public interface ConfigAssayMethodProjectCoefficientService {
/**
* 创建检测方法分析项目补正系数
*
* @param createReqVO 创建信息
* @return 编号
*/
ConfigAssayMethodProjectCoefficientRespVO createConfigAssayMethodProjectCoefficient(@Valid ConfigAssayMethodProjectCoefficientSaveReqVO createReqVO);
/**
* 更新检测方法分析项目补正系数
*
* @param updateReqVO 更新信息
*/
void updateConfigAssayMethodProjectCoefficient(@Valid ConfigAssayMethodProjectCoefficientSaveReqVO updateReqVO);
/**
* 删除检测方法分析项目补正系数
*
* @param id 编号
*/
void deleteConfigAssayMethodProjectCoefficient(Long id);
/**
* 批量删除检测方法分析项目补正系数
*
* @param ids 编号
*/
void deleteConfigAssayMethodProjectCoefficientListByIds(List<Long> ids);
/**
* 获得检测方法分析项目补正系数
*
* @param id 编号
* @return 检测方法分析项目补正系数
*/
ConfigAssayMethodProjectCoefficientDO getConfigAssayMethodProjectCoefficient(Long id);
/**
* 获得检测方法分析项目补正系数分页
*
* @param pageReqVO 分页查询
* @return 检测方法分析项目补正系数分页
*/
PageResult<ConfigAssayMethodProjectCoefficientDO> getConfigAssayMethodProjectCoefficientPage(ConfigAssayMethodProjectCoefficientPageReqVO pageReqVO);
}

View File

@@ -0,0 +1,91 @@
package com.zt.plat.module.qms.business.config.service;
import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectCoefficientDO;
import com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectCoefficientMapper;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*;
/**
* 检测方法分析项目补正系数 Service 实现类
*
* @author 后台管理
*/
@Service
@Validated
public class ConfigAssayMethodProjectCoefficientServiceImpl implements ConfigAssayMethodProjectCoefficientService {
@Resource
private ConfigAssayMethodProjectCoefficientMapper configAssayMethodProjectCoefficientMapper;
@Override
public ConfigAssayMethodProjectCoefficientRespVO createConfigAssayMethodProjectCoefficient(ConfigAssayMethodProjectCoefficientSaveReqVO createReqVO) {
// 插入
ConfigAssayMethodProjectCoefficientDO configAssayMethodProjectCoefficient = BeanUtils.toBean(createReqVO, ConfigAssayMethodProjectCoefficientDO.class);
configAssayMethodProjectCoefficientMapper.insert(configAssayMethodProjectCoefficient);
// 返回
return BeanUtils.toBean(configAssayMethodProjectCoefficient, ConfigAssayMethodProjectCoefficientRespVO.class);
}
@Override
public void updateConfigAssayMethodProjectCoefficient(ConfigAssayMethodProjectCoefficientSaveReqVO updateReqVO) {
// 校验存在
validateConfigAssayMethodProjectCoefficientExists(updateReqVO.getId());
// 更新
ConfigAssayMethodProjectCoefficientDO updateObj = BeanUtils.toBean(updateReqVO, ConfigAssayMethodProjectCoefficientDO.class);
configAssayMethodProjectCoefficientMapper.updateById(updateObj);
}
@Override
public void deleteConfigAssayMethodProjectCoefficient(Long id) {
// 校验存在
validateConfigAssayMethodProjectCoefficientExists(id);
// 删除
configAssayMethodProjectCoefficientMapper.deleteById(id);
}
@Override
public void deleteConfigAssayMethodProjectCoefficientListByIds(List<Long> ids) {
// 校验存在
validateConfigAssayMethodProjectCoefficientExists(ids);
// 删除
configAssayMethodProjectCoefficientMapper.deleteByIds(ids);
}
private void validateConfigAssayMethodProjectCoefficientExists(List<Long> ids) {
List<ConfigAssayMethodProjectCoefficientDO> list = configAssayMethodProjectCoefficientMapper.selectByIds(ids);
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
throw exception(CONFIG_ASSAY_METHOD_PROJECT_COEFFICIENT_NOT_EXISTS);
}
}
private void validateConfigAssayMethodProjectCoefficientExists(Long id) {
if (configAssayMethodProjectCoefficientMapper.selectById(id) == null) {
throw exception(CONFIG_ASSAY_METHOD_PROJECT_COEFFICIENT_NOT_EXISTS);
}
}
@Override
public ConfigAssayMethodProjectCoefficientDO getConfigAssayMethodProjectCoefficient(Long id) {
return configAssayMethodProjectCoefficientMapper.selectById(id);
}
@Override
public PageResult<ConfigAssayMethodProjectCoefficientDO> getConfigAssayMethodProjectCoefficientPage(ConfigAssayMethodProjectCoefficientPageReqVO pageReqVO) {
return configAssayMethodProjectCoefficientMapper.selectPage(pageReqVO);
}
}

View File

@@ -0,0 +1,62 @@
package com.zt.plat.module.qms.business.config.service;
import java.util.*;
import jakarta.validation.*;
import com.zt.plat.framework.common.pojo.PageResult;
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.framework.common.pojo.PageParam;
/**
* 规则配置 Service 接口
*
* @author 后台管理
*/
public interface ConfigRuleService {
/**
* 创建规则配置
*
* @param createReqVO 创建信息
* @return 编号
*/
ConfigRuleRespVO createConfigRule(@Valid ConfigRuleSaveReqVO createReqVO);
/**
* 更新规则配置
*
* @param updateReqVO 更新信息
*/
void updateConfigRule(@Valid ConfigRuleSaveReqVO updateReqVO);
/**
* 删除规则配置
*
* @param id 编号
*/
void deleteConfigRule(Long id);
/**
* 批量删除规则配置
*
* @param ids 编号
*/
void deleteConfigRuleListByIds(List<Long> ids);
/**
* 获得规则配置
*
* @param id 编号
* @return 规则配置
*/
ConfigRuleDO getConfigRule(Long id);
/**
* 获得规则配置分页
*
* @param pageReqVO 分页查询
* @return 规则配置分页
*/
PageResult<ConfigRuleDO> getConfigRulePage(ConfigRulePageReqVO pageReqVO);
}

View File

@@ -0,0 +1,91 @@
package com.zt.plat.module.qms.business.config.service;
import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.util.object.BeanUtils;
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.mapper.ConfigRuleMapper;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.diffList;
import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*;
/**
* 规则配置 Service 实现类
*
* @author 后台管理
*/
@Service
@Validated
public class ConfigRuleServiceImpl implements ConfigRuleService {
@Resource
private ConfigRuleMapper configRuleMapper;
@Override
public ConfigRuleRespVO createConfigRule(ConfigRuleSaveReqVO createReqVO) {
// 插入
ConfigRuleDO configRule = BeanUtils.toBean(createReqVO, ConfigRuleDO.class);
configRuleMapper.insert(configRule);
// 返回
return BeanUtils.toBean(configRule, ConfigRuleRespVO.class);
}
@Override
public void updateConfigRule(ConfigRuleSaveReqVO updateReqVO) {
// 校验存在
validateConfigRuleExists(updateReqVO.getId());
// 更新
ConfigRuleDO updateObj = BeanUtils.toBean(updateReqVO, ConfigRuleDO.class);
configRuleMapper.updateById(updateObj);
}
@Override
public void deleteConfigRule(Long id) {
// 校验存在
validateConfigRuleExists(id);
// 删除
configRuleMapper.deleteById(id);
}
@Override
public void deleteConfigRuleListByIds(List<Long> ids) {
// 校验存在
validateConfigRuleExists(ids);
// 删除
configRuleMapper.deleteByIds(ids);
}
private void validateConfigRuleExists(List<Long> ids) {
List<ConfigRuleDO> list = configRuleMapper.selectByIds(ids);
if (CollUtil.isEmpty(list) || list.size() != ids.size()) {
throw exception(CONFIG_RULE_NOT_EXISTS);
}
}
private void validateConfigRuleExists(Long id) {
if (configRuleMapper.selectById(id) == null) {
throw exception(CONFIG_RULE_NOT_EXISTS);
}
}
@Override
public ConfigRuleDO getConfigRule(Long id) {
return configRuleMapper.selectById(id);
}
@Override
public PageResult<ConfigRuleDO> getConfigRulePage(ConfigRulePageReqVO pageReqVO) {
return configRuleMapper.selectPage(pageReqVO);
}
}

View File

@@ -0,0 +1,136 @@
package com.zt.plat.module.qms.core.qlexpress.cmp;
import java.math.BigDecimal;
import java.math.RoundingMode;
import org.springframework.stereotype.Component;
import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
/**
* 允差值计算器工具类
*/
@Slf4j
@Component
public class AllowanceCalculatorComponent {
@Resource
private ExpressRunner expressRunner;
/**
* 计算允差值:支持原生线性公式 和 Express 自定义公式混合模式
*
* @param minValue 允差范围最小值 (X1)
* @param maxValue 允差范围最大值 (X2)
* @param minYc 最小允差值 (Y1)
* @param maxYc 最大允差值 (Y2)
* @param c 常数偏移量 C
* @param ran 当前测量值 X
* @param isUseFormula 是否使用自定义公式 (1=是, 其他=否)
* @param formula 自定义表达式字符串,如 "X > 10 ? 0.5 : 0.3",变量用 X 表示当前值
* @param scale 结果保留小数位数
* @return 允差值 yc
*/
public BigDecimal calculateAllowableValue(
BigDecimal minValue,
BigDecimal maxValue,
BigDecimal minYc,
BigDecimal maxYc,
BigDecimal c,
BigDecimal ran,
Integer isUseFormula,
String formula,
int scale) {
// 参数校验
if (minValue == null || maxValue == null || minYc == null || maxYc == null ||
c == null || ran == null || scale < 0) {
throw new IllegalArgumentException("参数不能为空,且 scale >= 0");
}
boolean useCustomFormula = isUseFormula != null && isUseFormula.intValue() == 1;
if (useCustomFormula && (formula == null || formula.trim().isEmpty())) {
throw new IllegalArgumentException("启用了自定义公式,但 formula 为空");
}
BigDecimal ycValue;
try {
if (useCustomFormula) {
log.debug("使用自定义公式计算: formula='{}', X={}", formula, ran);
ycValue = evaluateCustomFormula(formula, ran, scale);
} else {
log.debug("使用线性公式计算: X={}, range=[{},{}], yc=[{},{}]", ran, minValue, maxValue, minYc, maxYc);
ycValue = calculateLinearAllowance(minValue, maxValue, minYc, maxYc, c, ran, scale);
}
} catch (Exception e) {
log.error("计算允差值失败", e);
throw new RuntimeException("计算允差值失败: " + e.getMessage(), e);
}
return ycValue;
}
/**
* 使用 Express 执行自定义公式
*/
private BigDecimal evaluateCustomFormula(String formula, BigDecimal xValue, int scale) {
DefaultContext<String, Object> context = new DefaultContext<>();
context.put("X", xValue); // 用户公式中使用 X 作为变量名
try {
Object result = expressRunner.execute(formula, context, null, true, false);
if (result == null) {
throw new RuntimeException("Express 公式返回结果为 null");
}
BigDecimal decimalResult;
if (result instanceof BigDecimal) {
decimalResult = (BigDecimal) result;
} else if (result instanceof Number) {
decimalResult = new BigDecimal(((Number) result).toString());
} else {
decimalResult = new BigDecimal(result.toString());
}
return decimalResult.setScale(scale, RoundingMode.HALF_EVEN);
} catch (Exception e) {
throw new RuntimeException("执行自定义公式失败: '" + formula + "', 错误: " + e.getMessage(), e);
}
}
/**
* 原生 Java 计算线性允差值yc = k * X + b + c
*/
private BigDecimal calculateLinearAllowance(
BigDecimal minValue,
BigDecimal maxValue,
BigDecimal minYc,
BigDecimal maxYc,
BigDecimal c,
BigDecimal ran,
int scale) {
BigDecimal deltaVa = maxValue.subtract(minValue);
BigDecimal deltaYc = maxYc.subtract(minYc);
BigDecimal k;
if (deltaVa.compareTo(BigDecimal.ZERO) == 0) {
k = BigDecimal.ZERO; // 防止除零
} else {
k = deltaYc.divide(deltaVa, 10, RoundingMode.HALF_EVEN); // 高精度除法
}
BigDecimal b = maxYc.subtract(maxValue.multiply(k));
return k.multiply(ran)
.add(b)
.add(c)
.setScale(scale, RoundingMode.HALF_EVEN);
}
}

View File

@@ -5,18 +5,6 @@ import org.springframework.context.annotation.Configuration;
import com.ql.util.express.ExpressRunner; import com.ql.util.express.ExpressRunner;
/**
* <b>QlExpressRuleEngineConfig</b>
* <p>
* 更新历史:
* <pre> 版本 更新时间 更新者 更新内容<hr/>
* V1.0 2025年10月9日 wxr Add</pre>
* <b>Copyright (C) 云南志者竟成科技有限公司</b>
* </p>
* @author 王兴荣<wxr@wangxingrong.com>
* @version V1.0
* @since 2025年10月9日
*/
@Configuration @Configuration
public class QlExpressRuleEngineConfig { public class QlExpressRuleEngineConfig {

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectAssessmentMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.plat.module.qms.business.config.dal.mapper.ConfigAssayMethodProjectCoefficientMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zt.plat.module.qms.business.config.dal.mapper.ConfigRuleMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@@ -0,0 +1,109 @@
package com.zt.plat.module.qms;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.math.BigDecimal;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.zt.plat.module.qms.core.qlexpress.cmp.AllowanceCalculatorComponent;
import com.zt.plat.module.qms.core.qlexpress.config.QlExpressRuleEngineConfig;
import jakarta.annotation.Resource;
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { AllowanceCalculatorComponent.class, QlExpressRuleEngineConfig.class })
@DisplayName("允差计算器 AllowanceCalculatorComponent 测试")
public class AllowanceCalculatorComponentTest {
@Resource
private AllowanceCalculatorComponent calculator;
private final int SCALE = 4;
@BeforeEach
void setUp() {
// 可在此模拟依赖或初始化数据
}
@Test
@DisplayName("应正确计算线性允差值")
void shouldCalculateLinearAllowanceCorrectly() {
BigDecimal minValue = new BigDecimal("0");
BigDecimal maxValue = new BigDecimal("100");
BigDecimal minYc = new BigDecimal("0.1");
BigDecimal maxYc = new BigDecimal("0.5");
BigDecimal c = new BigDecimal("0.02");
BigDecimal ran = new BigDecimal("60");
Integer isUseFormula = 0;
BigDecimal result = calculator.calculateAllowableValue(
minValue, maxValue, minYc, maxYc, c, ran, isUseFormula, null, SCALE);
// Assert
assertEquals(new BigDecimal("0.3600"), result);
}
@Test
@DisplayName("应正确执行自定义表达式")
void shouldEvaluateCustomFormulaCorrectly() {
// Arrange
BigDecimal minValue = BigDecimal.ZERO;
BigDecimal maxValue = new BigDecimal("100");
BigDecimal minYc = new BigDecimal("0.1");
BigDecimal maxYc = new BigDecimal("0.5");
BigDecimal c = BigDecimal.ZERO;
BigDecimal ran = new BigDecimal("70");
Integer isUseFormula = 1;
String formula = "X > 50 ? 0.8 : 0.3";
// Act
BigDecimal result = calculator.calculateAllowableValue(minValue, maxValue, minYc, maxYc, c, ran, isUseFormula,
formula, SCALE);
// Assert
assertEquals(new BigDecimal("0.8000"), result);
}
// ——————————————————————————————————————
// 测试:异常情况
// ——————————————————————————————————————
@Test
@DisplayName("启用自定义公式但 formula 为空应抛出异常")
void shouldThrowExceptionWhenFormulaIsNullAndUseFormulaIsTrue() {
assertThrows(IllegalArgumentException.class, () -> {
calculator.calculateAllowableValue(
BigDecimal.ONE, BigDecimal.TEN, BigDecimal.ONE, BigDecimal.TEN,
BigDecimal.ZERO, BigDecimal.ONE, 1, null, SCALE);
});
}
@Test
@DisplayName("表达式语法错误应抛出异常")
void shouldThrowExceptionWhenFormulaSyntaxError() {
assertThrows(RuntimeException.class, () -> {
calculator.calculateAllowableValue(
BigDecimal.ONE, BigDecimal.TEN, BigDecimal.ONE, BigDecimal.TEN,
BigDecimal.ZERO, BigDecimal.ONE, 1, "X + + 1", SCALE);
});
}
@Test
@DisplayName("参数为 null 应抛出异常")
void shouldThrowExceptionWhenNullParameter() {
assertThrows(IllegalArgumentException.class, () -> {
calculator.calculateAllowableValue(
null, BigDecimal.TEN, BigDecimal.ONE, BigDecimal.TEN,
BigDecimal.ZERO, BigDecimal.ONE, 0, null, SCALE);
});
}
}