From 4f45f29e6b53f4c01b414409c5000ff4e212b3d9 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 05 六月 2026 13:36:54 +0800
Subject: [PATCH] 增加eip

---
 report-server/src/main/java/com/ruoyi/report/service/impl/TestItemDataServiceImpl.java |  144 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 144 insertions(+), 0 deletions(-)

diff --git a/report-server/src/main/java/com/ruoyi/report/service/impl/TestItemDataServiceImpl.java b/report-server/src/main/java/com/ruoyi/report/service/impl/TestItemDataServiceImpl.java
new file mode 100644
index 0000000..5be9afe
--- /dev/null
+++ b/report-server/src/main/java/com/ruoyi/report/service/impl/TestItemDataServiceImpl.java
@@ -0,0 +1,144 @@
+package com.ruoyi.report.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.report.dto.TestItemDataDto;
+import com.ruoyi.report.mapper.TestItemDataMapper;
+import com.ruoyi.report.service.TestItemDataService;
+import com.ruoyi.report.vo.TestItemDataVo;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 妫�娴嬮」鐩暟鎹湇鍔″疄鐜�
+ */
+@Service
+@AllArgsConstructor
+public class TestItemDataServiceImpl implements TestItemDataService {
+
+    private TestItemDataMapper testItemDataMapper;
+
+    @Override
+    public Page<TestItemDataVo> pageTestItemData(Page page, TestItemDataDto dto) {
+        Page<TestItemDataVo> result = testItemDataMapper.pageTestItemData(page, dto);
+        // 澶勭悊妫�娴嬬粨鏋滃悕绉�
+        List<TestItemDataVo> records = result.getRecords();
+        for (TestItemDataVo vo : records) {
+            vo.setInsResultName(formatInsResult(vo.getInsResult()));
+        }
+        return result;
+    }
+
+    @Override
+    public List<TestItemDataVo> getDetail(Long sampleId) {
+        List<TestItemDataVo> list = testItemDataMapper.getDetail(sampleId);
+        for (TestItemDataVo vo : list) {
+            vo.setInsResultName(formatInsResult(vo.getInsResult()));
+        }
+        return list;
+    }
+
+    @Override
+    public Map<String, Object> compare(TestItemDataDto dto) {
+        if (CollectionUtils.isEmpty(dto.getSampleIds())) {
+            return new HashMap<>();
+        }
+
+        // 鏌ヨ鏁版嵁
+        List<TestItemDataVo> dataList = testItemDataMapper.listBySampleIds(dto.getSampleIds());
+
+        // 鑾峰彇鎵�鏈夋娴嬮」鍚嶇О
+        List<String> itemNames = dataList.stream()
+                .map(TestItemDataVo::getItemName)
+                .distinct()
+                .sorted()
+                .collect(Collectors.toList());
+
+        // 鎸夋牱鍝佸垎缁�
+        Map<Long, List<TestItemDataVo>> sampleMap = dataList.stream()
+                .collect(Collectors.groupingBy(TestItemDataVo::getSampleId));
+
+        // 鏋勫缓姣旇緝鏁版嵁
+        List<Map<String, Object>> compareList = new ArrayList<>();
+        for (Long sampleId : dto.getSampleIds()) {
+            Map<String, Object> row = new HashMap<>();
+            List<TestItemDataVo> sampleData = sampleMap.getOrDefault(sampleId, new ArrayList<>());
+
+            // 鑾峰彇鏍峰搧淇℃伅
+            if (CollectionUtil.isNotEmpty(sampleData)) {
+                TestItemDataVo first = sampleData.get(0);
+                row.put("sampleCode", first.getSampleCode());
+                row.put("sampleName", first.getSampleName());
+                row.put("batchNo", first.getBatchNo());
+            }
+
+            // 濉厖妫�娴嬮」鍊�
+            for (String itemName : itemNames) {
+                Optional<TestItemDataVo> match = sampleData.stream()
+                        .filter(v -> v.getItemName().equals(itemName))
+                        .findFirst();
+                row.put(itemName, match.map(TestItemDataVo::getLastValue).orElse(null));
+            }
+
+            compareList.add(row);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("itemNames", itemNames);
+        result.put("compareList", compareList);
+        return result;
+    }
+
+    @Override
+    public void exportTestItemData(TestItemDataDto dto, HttpServletResponse response) {
+        try {
+            // 鏌ヨ鍏ㄩ儴鏁版嵁
+            Page<TestItemDataVo> page = new Page<>();
+            page.setSize(Long.MAX_VALUE);
+            Page<TestItemDataVo> result = testItemDataMapper.pageTestItemData(page, dto);
+
+            // 澶勭悊鏁版嵁
+            List<TestItemDataVo> records = result.getRecords();
+            for (TestItemDataVo vo : records) {
+                vo.setInsResultName(formatInsResult(vo.getInsResult()));
+            }
+
+            // 璁剧疆鍝嶅簲澶�
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setCharacterEncoding("utf-8");
+            String fileName = "妫�娴嬮」鐩暟鎹甠" + DateUtil.format(new Date(), "yyyyMMddHHmmss");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+
+            // 浣跨敤EasyExcel瀵煎嚭
+            EasyExcel.write(response.getOutputStream(), TestItemDataVo.class)
+                    .sheet("妫�娴嬮」鐩暟鎹�")
+                    .doWrite(records);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public List<String> getItemNames(TestItemDataDto dto) {
+        return testItemDataMapper.getItemNames(dto);
+    }
+
+    /**
+     * 鏍煎紡鍖栨娴嬬粨鏋�
+     */
+    private String formatInsResult(Integer val) {
+        if (val == null) return "";
+        if (val == 1) return "鍚堟牸";
+        if (val == 0) return "涓嶅悎鏍�";
+        return "";
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.3