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/SampleProgressServiceImpl.java |  125 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 125 insertions(+), 0 deletions(-)

diff --git a/report-server/src/main/java/com/ruoyi/report/service/impl/SampleProgressServiceImpl.java b/report-server/src/main/java/com/ruoyi/report/service/impl/SampleProgressServiceImpl.java
new file mode 100644
index 0000000..d1c9d37
--- /dev/null
+++ b/report-server/src/main/java/com/ruoyi/report/service/impl/SampleProgressServiceImpl.java
@@ -0,0 +1,125 @@
+package com.ruoyi.report.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.report.dto.SampleProgressDto;
+import com.ruoyi.report.mapper.SampleProgressMapper;
+import com.ruoyi.report.service.SampleProgressService;
+import com.ruoyi.report.vo.SampleProgressVo;
+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 SampleProgressServiceImpl implements SampleProgressService {
+
+    private SampleProgressMapper sampleProgressMapper;
+
+    @Override
+    public Page<SampleProgressVo> pageSampleProgress(Page page, SampleProgressDto dto) {
+        Page<SampleProgressVo> result = sampleProgressMapper.pageSampleProgress(page, dto);
+        // 澶勭悊鐘舵�佸悕绉板拰杩涘害鐧惧垎姣�
+        List<SampleProgressVo> records = result.getRecords();
+        for (SampleProgressVo vo : records) {
+            vo.setInsStateName(formatInsState(vo.getInsState()));
+            if (vo.getTotalItems() != null && vo.getTotalItems() > 0) {
+                int finished = vo.getFinishedItems() != null ? vo.getFinishedItems() : 0;
+                vo.setProgressPercent((finished * 100.0) / vo.getTotalItems());
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getStatistics(SampleProgressDto dto) {
+        Map<String, Object> statistics = sampleProgressMapper.getStatistics(dto);
+        if (statistics == null) {
+            statistics = new HashMap<>();
+            statistics.put("waitInspection", 0);
+            statistics.put("inspecting", 0);
+            statistics.put("waitAudit", 0);
+            statistics.put("finished", 0);
+        }
+        return statistics;
+    }
+
+    @Override
+    public void exportSampleProgress(SampleProgressDto dto, HttpServletResponse response) {
+        try {
+            // 鏌ヨ鍏ㄩ儴鏁版嵁
+            Page<SampleProgressVo> page = new Page<>();
+            page.setSize(Long.MAX_VALUE);
+            Page<SampleProgressVo> result = sampleProgressMapper.pageSampleProgress(page, dto);
+
+            // 澶勭悊鏁版嵁
+            List<SampleProgressVo> records = result.getRecords();
+            for (SampleProgressVo vo : records) {
+                vo.setInsStateName(formatInsState(vo.getInsState()));
+                if (vo.getTotalItems() != null && vo.getTotalItems() > 0) {
+                    int finished = vo.getFinishedItems() != null ? vo.getFinishedItems() : 0;
+                    vo.setProgressPercent((finished * 100.0) / vo.getTotalItems());
+                }
+            }
+
+            // 璁剧疆鍝嶅簲澶�
+            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(), SampleProgressVo.class)
+                    .sheet("鏍峰搧杩涘害")
+                    .doWrite(records);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public Map<String, Object> getChartData(SampleProgressDto dto) {
+        List<Map<String, Object>> chartData = sampleProgressMapper.getChartData(dto);
+
+        Map<String, Object> result = new HashMap<>();
+        List<String> dates = chartData.stream()
+                .map(m -> (String) m.get("date"))
+                .collect(Collectors.toList());
+        List<Integer> totalCounts = chartData.stream()
+                .map(m -> ((Number) m.get("totalCount")).intValue())
+                .collect(Collectors.toList());
+        List<Integer> finishedCounts = chartData.stream()
+                .map(m -> ((Number) m.get("finishedCount")).intValue())
+                .collect(Collectors.toList());
+
+        result.put("dates", dates);
+        result.put("totalCounts", totalCounts);
+        result.put("finishedCounts", finishedCounts);
+        return result;
+    }
+
+    /**
+     * 鏍煎紡鍖栨娴嬬姸鎬�
+     */
+    private String formatInsState(Integer val) {
+        if (val == null) return "";
+        Map<Integer, String> map = new HashMap<>();
+        map.put(0, "寰呮");
+        map.put(1, "妫�楠屼腑");
+        map.put(2, "宸叉楠�");
+        map.put(3, "寰呭鏍�");
+        map.put(4, "瀹℃牳鏈�氳繃");
+        map.put(5, "瀹℃牳閫氳繃");
+        return map.getOrDefault(val, "");
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.3