From 83405e778dbd3dee47b5dae1d50d4e0cc0d3ae13 Mon Sep 17 00:00:00 2001 From: chen <2710907404@qq.com> Date: Tue, 18 Mar 2025 16:22:56 +0800 Subject: [PATCH] =?UTF-8?q?20250318=20=E6=9B=B4=E6=96=B0=201.=E6=A3=80?= =?UTF-8?q?=E9=AA=8C=E8=AE=B0=E5=BD=95=E4=B8=AD=E7=9A=84=E6=A3=80=E6=9D=90?= =?UTF-8?q?=E6=80=A7=E7=8A=B6=E6=8F=8F=E8=BF=B0=E5=92=8C=E6=A3=80=E9=AA=8C?= =?UTF-8?q?=E8=A6=81=E6=B1=82=E4=B8=AD=E7=9A=84=E6=88=90=E5=88=86=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/InspectRecordServiceImpl.java | 99 +++++++++++++++++-- .../service/impl/TestAtlasServiceImpl.java | 2 + .../service/impl/TestRecordServiceImpl.java | 12 +-- 3 files changed, 98 insertions(+), 15 deletions(-) diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java index 1c9590b..f465f67 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/InspectRecordServiceImpl.java @@ -1,6 +1,8 @@ package digital.laboratory.platform.inspection.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -19,8 +21,11 @@ import digital.laboratory.platform.inspection.entity.TestRecordReagent; import digital.laboratory.platform.inspection.service.*; import digital.laboratory.platform.inspetion.api.entity.EntrustInfo; import digital.laboratory.platform.inspetion.api.entity.SampleInfo; +import digital.laboratory.platform.inspetion.api.entity.TargetObject; import digital.laboratory.platform.inspetion.api.entity.TestRecord; +import digital.laboratory.platform.sys.enums.entrust.EntrustBiologyType; import org.apache.commons.io.output.ByteArrayOutputStream; +import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.ByteArrayInputStream; @@ -33,6 +38,7 @@ import java.util.stream.Collectors; * @description: 生成检验记录相关接口实现类 * @date 2025/3/18 14:50 */ +@Service public class InspectRecordServiceImpl implements InspectRecordService { @Resource @@ -320,12 +326,24 @@ public class InspectRecordServiceImpl implements InspectRecordService { data.put("inspectDay", testRecord.getTestStartDate().getDayOfMonth()); // 检材性状描述和检验要求成分 - List sampleInfoList = sampleInfoService.list(Wrappers.lambdaQuery().eq(SampleInfo::getBusinessId, entrustInfo.getId())); - // 对检材进行筛选,如果materialType 不为空则进行操作 - if (StrUtil.isNotBlank(materialType)) { - - } -// buildMaterialCharacterDesc() + List sampleInfoList = getSampleInfosByMaterialType(entrustInfo, materialType); + String materialCharacterDesc = buildMaterialCharacterDesc(sampleInfoList); + String targetObjectStr = sampleInfoList + .stream() + .flatMap( + sampleInfo -> { + String toJSONString = JSONArray.toJSONString(sampleInfo.getTargetObject()); + List drugLiteList = JSONArray.parseArray(toJSONString, TargetObject.class); + return drugLiteList.stream(); + }) + .collect(Collectors.toList()) // 得到转换好的筛查物对象 + .stream() + .map(TargetObject::getName) + .collect(Collectors.toSet()) // 区筛查物对象名称并去重 + .stream() + .collect(Collectors.joining("、")); // 拼接筛查物名称 + data.put("materialCharacterDesc", materialCharacterDesc); + data.put("ingredient", targetObjectStr); // 设置使用的标准物质和试剂 List references = testRecordReagentService.list(Wrappers.lambdaQuery() @@ -357,4 +375,73 @@ public class InspectRecordServiceImpl implements InspectRecordService { } return data; } + + /** + * 根据委托信息和检材类型获取检材信息列表 + * + * @param entrustInfo 委托信息对象 + * @param materialType 检材类型, 毛发或尿液 + * @return 检材信息列表 + */ + private List getSampleInfosByMaterialType(EntrustInfo entrustInfo, String materialType) { + List sampleInfoList = sampleInfoService.list(Wrappers.lambdaQuery().eq(SampleInfo::getBusinessId, entrustInfo.getId())); + // 对检材进行筛选,如果materialType 不为空则进行操作 + if (StrUtil.isNotBlank(materialType)) { + if (materialType.equals("毛发")) { + sampleInfoList = sampleInfoList.stream() + .filter(o -> EntrustBiologyType.HAIR.equals(EntrustBiologyType.isExist(o.getForm()))) + .collect(Collectors.toList()); + + } else { + // 尿液 + sampleInfoList = sampleInfoList.stream() + .filter(o -> EntrustBiologyType.URINE.equals(EntrustBiologyType.isExist(o.getForm()))) + .collect(Collectors.toList()); + } + } + return sampleInfoList; + } + + + /** + * 构建检材性状描述 + * + * @param sampleInfoList 样本信息列表 + * @return 物料特性描述,如果无法构建则返回null + */ + private String buildMaterialCharacterDesc(List sampleInfoList) { + if (CollUtil.isEmpty(sampleInfoList)) { + return StrUtil.EMPTY; + } + + // 仅有一个样本时,直接返回 + if (sampleInfoList.size() == 1) { + return "检材为" + sampleInfoList.get(0).getForm() + "。"; + } + + // 按 form 分组 + Map> sampleMapGroupByForm = sampleInfoList.stream() + .collect(Collectors.groupingBy(SampleInfo::getForm)); + + // 所有样本 form 相同 + if (sampleMapGroupByForm.size() == 1) { + String form = sampleMapGroupByForm.keySet().iterator().next(); // 取唯一的 key + String orderNoStr = sampleInfoList.stream() + .map(sample -> sample.getOrderNo() + "号") + .collect(Collectors.joining("、")); + return orderNoStr + "检材均为" + form + "。"; + } + + // 存在多个 form 的情况 + List descriptions = new ArrayList<>(); + sampleMapGroupByForm.forEach((form, value) -> { + String orderNoStr = value.stream() + .map(sample -> sample.getOrderNo() + "号") + .collect(Collectors.joining("、")); + descriptions.add(orderNoStr + "检材均为" + form); + }); + + return String.join(";", descriptions) + "。"; // 用分号连接不同类型的描述 + } + } diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestAtlasServiceImpl.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestAtlasServiceImpl.java index 5bb613f..b47e13a 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestAtlasServiceImpl.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestAtlasServiceImpl.java @@ -16,6 +16,7 @@ import digital.laboratory.platform.inspection.mapper.TestRecordSampleDataMapper; import digital.laboratory.platform.inspection.service.TestAtlasService; import digital.laboratory.platform.inspection.service.TestRecordService; import digital.laboratory.platform.inspetion.api.entity.TestRecord; +import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -31,6 +32,7 @@ import java.util.stream.Collectors; * @description: 实验图谱相关接口 相关实现类 * @date 2025/3/18 14:57 */ +@Service public class TestAtlasServiceImpl implements TestAtlasService { @Resource diff --git a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestRecordServiceImpl.java b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestRecordServiceImpl.java index b8b9416..c10a298 100644 --- a/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestRecordServiceImpl.java +++ b/dlp-drugtesting-biz/src/main/java/digital/laboratory/platform/inspection/service/impl/TestRecordServiceImpl.java @@ -1,13 +1,8 @@ package digital.laboratory.platform.inspection.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.core.io.file.FileNameUtil; import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -22,11 +17,11 @@ import digital.laboratory.platform.common.core.util.R; import digital.laboratory.platform.common.mybatis.security.service.DLPUser; import digital.laboratory.platform.common.oss.service.OssFile; import digital.laboratory.platform.inspection.constant.BusinessType; +import digital.laboratory.platform.inspection.constant.TestRecordArgumentType; import digital.laboratory.platform.inspection.constant.TestRecordFileUrl; import digital.laboratory.platform.inspection.constant.TestRecordSampleDataConstant; import digital.laboratory.platform.inspection.dto.*; import digital.laboratory.platform.inspection.entity.*; -import digital.laboratory.platform.inspection.constant.TestRecordArgumentType; import digital.laboratory.platform.inspection.mapper.TestRecordMapper; import digital.laboratory.platform.inspection.mapper.TestRecordSampleDataMapper; import digital.laboratory.platform.inspection.mapper.TestTemplateMapper; @@ -34,17 +29,16 @@ import digital.laboratory.platform.inspection.service.*; import digital.laboratory.platform.inspection.utils.PageUtils; import digital.laboratory.platform.inspection.utils.datafile.nps.NPSTestDetailDataStruct; import digital.laboratory.platform.inspection.vo.ProcedureVo; -import digital.laboratory.platform.inspetion.api.entity.TestRecord; -import digital.laboratory.platform.inspetion.api.vo.TestRecordVo; import digital.laboratory.platform.inspection.vo.TestTemplateVo; import digital.laboratory.platform.inspetion.api.entity.EntrustInfo; import digital.laboratory.platform.inspetion.api.entity.SampleInfo; +import digital.laboratory.platform.inspetion.api.entity.TestRecord; +import digital.laboratory.platform.inspetion.api.vo.TestRecordVo; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.poi.xwpf.usermodel.*; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.ByteArrayInputStream;