From a4a0e2bd0ddcf0b6c55b701fc52875f3302cbe11 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期三, 27 五月 2026 19:39:57 +0800
Subject: [PATCH] feat 校验提交修改

---
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectExportHandle.java |  277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 277 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectExportHandle.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectExportHandle.java
new file mode 100644
index 0000000..6b5a8fe
--- /dev/null
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectExportHandle.java
@@ -0,0 +1,277 @@
+package com.ruoyi.quality.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.quality.dto.QualityInspectExportDTO;
+import com.ruoyi.quality.dto.QualityInspectExportVO;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import com.ruoyi.quality.service.IQualityInspectParamService;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 璐ㄩ噺妫�楠屽鍑哄鐞嗙被
+ */
+@Component
+public class QualityInspectExportHandle {
+
+    @Resource
+    private QualityInspectMapper qualityInspectMapper;
+
+    @Resource
+    private IQualityInspectParamService qualityInspectParamService;
+
+    /**
+     * 鏌ヨ妫�楠岃褰曪紙鏀寔閫変腑瀵煎嚭鍜屽叏閮ㄥ鍑猴級
+     * @param exportDTO 瀵煎嚭鍙傛暟
+     * @return 妫�楠岃褰曞垪琛�
+     */
+    public List<QualityInspect> queryInspectList(QualityInspectExportDTO exportDTO) {
+        QualityInspect qualityInspect = new QualityInspect();
+        qualityInspect.setInspectType(exportDTO.getInspectType());
+        qualityInspect.setSupplier(exportDTO.getSupplier());
+        qualityInspect.setProcess(exportDTO.getProcess());
+        qualityInspect.setProductName(exportDTO.getProductName());
+        qualityInspect.setEntryDateStart(exportDTO.getEntryDateStart());
+        qualityInspect.setEntryDateEnd(exportDTO.getEntryDateEnd());
+
+        if (!CollectionUtils.isEmpty(exportDTO.getIds())) {
+            return qualityInspectMapper.qualityInspectExportByIds(exportDTO.getIds(), qualityInspect);
+        } else {
+            return qualityInspectMapper.qualityInspectExportByIds(null, qualityInspect);
+        }
+    }
+
+    /**
+     * 鏋勫缓瀵煎嚭鏁版嵁锛堟瘡涓楠屽弬鏁颁竴琛岋級
+     * 鍚屼竴妫�楠岃褰曠殑澶氫釜鍙傛暟琛岋紝鍙湪绗竴琛屾樉绀哄乏渚у熀纭�淇℃伅锛屽悗缁鐣欑┖
+     * @param qualityInspects 妫�楠岃褰曞垪琛�
+     * @param inspectType 妫�楠岀被鍨�
+     * @return 瀵煎嚭鏁版嵁鍒楄〃
+     */
+    public List<QualityInspectExportVO> buildExportData(List<QualityInspect> qualityInspects, Integer inspectType) {
+        if (CollectionUtils.isEmpty(qualityInspects)) {
+            return new ArrayList<>();
+        }
+
+        // 鑾峰彇鎵�鏈夋楠岃褰曠殑ID锛屾壒閲忔煡璇㈡楠屽弬鏁�
+        List<Long> inspectIds = qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList());
+        List<QualityInspectParam> allParams = qualityInspectParamService.list(
+            Wrappers.<QualityInspectParam>lambdaQuery().in(QualityInspectParam::getInspectId, inspectIds)
+        );
+
+        // 鎸塱nspectId鍒嗙粍
+        Map<Long, List<QualityInspectParam>> paramMap = allParams.stream()
+            .collect(Collectors.groupingBy(QualityInspectParam::getInspectId));
+
+        // 鏋勫缓瀵煎嚭鏁版嵁锛氭瘡涓楠屽弬鏁颁竴琛�
+        List<QualityInspectExportVO> exportList = new ArrayList<>();
+        for (QualityInspect inspect : qualityInspects) {
+            List<QualityInspectParam> params = paramMap.getOrDefault(inspect.getId(), new ArrayList<>());
+
+            if (params.isEmpty()) {
+                // 娌℃湁妫�楠屽弬鏁帮紝涔熻緭鍑轰竴琛�
+                QualityInspectExportVO vo = buildVO(inspect, null, inspectType, true);
+                exportList.add(vo);
+            } else {
+                // 鏈夋楠屽弬鏁帮紝姣忎釜鍙傛暟涓�琛岋紝绗竴琛屾樉绀哄熀纭�淇℃伅锛屽悗缁宸︿晶鐣欑┖
+                boolean isFirst = true;
+                for (QualityInspectParam param : params) {
+                    QualityInspectExportVO vo = buildVO(inspect, param, inspectType, isFirst);
+                    exportList.add(vo);
+                    isFirst = false;
+                }
+            }
+        }
+
+        return exportList;
+    }
+
+    /**
+     * 鏋勫缓鍗曡瀵煎嚭鏁版嵁
+     * @param inspect 妫�楠岃褰�
+     * @param param 妫�楠屽弬鏁帮紙鍙负null锛�
+     * @param inspectType 妫�楠岀被鍨�
+     * @param showBaseInfo 鏄惁鏄剧ず宸︿晶鍩虹淇℃伅锛堝悓涓�妫�楠岃褰曠殑澶氳锛屽彧鍦ㄧ涓�琛屾樉绀猴級
+     */
+    private QualityInspectExportVO buildVO(QualityInspect inspect, QualityInspectParam param, Integer inspectType, boolean showBaseInfo) {
+        QualityInspectExportVO vo = new QualityInspectExportVO();
+
+        // 鍙湁绗竴琛屾樉绀哄乏渚у熀纭�淇℃伅锛屽悗缁鐣欑┖
+        if (showBaseInfo) {
+            vo.setCheckTime(inspect.getCheckTime());
+            vo.setCheckName(inspect.getCheckName());
+            vo.setProductName(inspect.getProductName());
+            vo.setModel(inspect.getModel());
+            vo.setUnit(inspect.getUnit());
+            vo.setQuantity(inspect.getQuantity());
+            vo.setCheckCompany(inspect.getCheckCompany());
+            vo.setCheckResult(inspect.getCheckResult());
+
+            // 璁剧疆璁㈠崟鍙峰拰渚涘簲鍟�/宸ュ簭
+            if (inspectType == 0) {
+                vo.setOrderNo(inspect.getPurchaseContractNo());
+                vo.setSupplierOrProcess(inspect.getSupplier());
+            } else if (inspectType == 1) {
+                vo.setOrderNo(inspect.getWorkOrderNo());
+                vo.setSupplierOrProcess(inspect.getProcess());
+            } else {
+                vo.setOrderNo(inspect.getWorkOrderNo());
+                vo.setSupplierOrProcess("");
+            }
+        }
+
+        // 璁剧疆妫�楠屽弬鏁帮紙姣忚閮借鏄剧ず锛�
+        if (param != null) {
+            vo.setParameterItem(param.getParameterItem());
+            vo.setParamUnit(param.getUnit());
+            vo.setStandardValue(param.getStandardValue());
+            vo.setControlValue(param.getControlValue());
+            vo.setTestValue(param.getTestValue());
+        }
+
+        return vo;
+    }
+
+    /**
+     * 瀵煎嚭Excel
+     * @param response 鍝嶅簲
+     * @param exportList 瀵煎嚭鏁版嵁
+     * @param inspectType 妫�楠岀被鍨�
+     */
+    public void exportExcel(HttpServletResponse response, List<QualityInspectExportVO> exportList, Integer inspectType) {
+        try {
+            Workbook workbook = new XSSFWorkbook();
+            Sheet sheet = workbook.createSheet();
+
+            // 鍒涘缓鏍峰紡
+            CellStyle headerStyle = createHeaderStyle(workbook);
+            CellStyle dataStyle = createDataStyle(workbook);
+
+            // 鏋勫缓琛ㄥご
+            Row headerRow = sheet.createRow(0);
+            String[] headers = {"妫�娴嬫棩鏈�", "璁㈠崟鍙�", "渚涘簲鍟�/宸ュ簭", "妫�楠屽憳", "浜у搧鍚嶇О", "瑙勬牸鍨嬪彿", "鍗曚綅", "鏁伴噺", "妫�娴嬪崟浣�", "妫�娴嬬粨鏋�", "鎸囨爣", "鎸囨爣鍗曚綅", "鏍囧噯鍊�", "鍐呮帶鍊�", "妫�楠屽��"};
+            for (int i = 0; i < headers.length; i++) {
+                Cell cell = headerRow.createCell(i);
+                cell.setCellValue(headers[i]);
+                cell.setCellStyle(headerStyle);
+            }
+
+            // 濉厖鏁版嵁
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            int rowIndex = 1;
+            for (QualityInspectExportVO vo : exportList) {
+                Row dataRow = sheet.createRow(rowIndex++);
+
+                createCell(dataRow, 0, vo.getCheckTime() != null ? sdf.format(vo.getCheckTime()) : "", dataStyle);
+                createCell(dataRow, 1, vo.getOrderNo() != null ? vo.getOrderNo() : "", dataStyle);
+                createCell(dataRow, 2, vo.getSupplierOrProcess() != null ? vo.getSupplierOrProcess() : "", dataStyle);
+                createCell(dataRow, 3, vo.getCheckName() != null ? vo.getCheckName() : "", dataStyle);
+                createCell(dataRow, 4, vo.getProductName() != null ? vo.getProductName() : "", dataStyle);
+                createCell(dataRow, 5, vo.getModel() != null ? vo.getModel() : "", dataStyle);
+                createCell(dataRow, 6, vo.getUnit() != null ? vo.getUnit() : "", dataStyle);
+                createCell(dataRow, 7, vo.getQuantity() != null ? vo.getQuantity().toString() : "", dataStyle);
+                createCell(dataRow, 8, vo.getCheckCompany() != null ? vo.getCheckCompany() : "", dataStyle);
+                createCell(dataRow, 9, vo.getCheckResult() != null ? vo.getCheckResult() : "", dataStyle);
+                createCell(dataRow, 10, vo.getParameterItem() != null ? vo.getParameterItem() : "", dataStyle);
+                createCell(dataRow, 11, vo.getParamUnit() != null ? vo.getParamUnit() : "", dataStyle);
+                createCell(dataRow, 12, vo.getStandardValue() != null ? vo.getStandardValue() : "", dataStyle);
+                createCell(dataRow, 13, vo.getControlValue() != null ? vo.getControlValue() : "", dataStyle);
+                createCell(dataRow, 14, vo.getTestValue() != null ? vo.getTestValue() : "", dataStyle);
+            }
+
+            // 璁剧疆鍒楀
+            for (int i = 0; i < headers.length; i++) {
+                sheet.setColumnWidth(i, 15 * 256);
+            }
+
+            // 瀵煎嚭鏂囦欢鍚�
+            String fileName = getFileName(inspectType);
+
+            // 杈撳嚭
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
+            OutputStream os = response.getOutputStream();
+            workbook.write(os);
+            os.flush();
+            os.close();
+            workbook.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鍒涘缓琛ㄥご鏍峰紡
+     */
+    private CellStyle createHeaderStyle(Workbook workbook) {
+        CellStyle style = workbook.createCellStyle();
+        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setBorderBottom(BorderStyle.THIN);
+        style.setBorderTop(BorderStyle.THIN);
+        style.setBorderLeft(BorderStyle.THIN);
+        style.setBorderRight(BorderStyle.THIN);
+        Font font = workbook.createFont();
+        font.setBold(true);
+        style.setFont(font);
+        return style;
+    }
+
+    /**
+     * 鍒涘缓鏁版嵁鏍峰紡
+     */
+    private CellStyle createDataStyle(Workbook workbook) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setBorderBottom(BorderStyle.THIN);
+        style.setBorderTop(BorderStyle.THIN);
+        style.setBorderLeft(BorderStyle.THIN);
+        style.setBorderRight(BorderStyle.THIN);
+        return style;
+    }
+
+    /**
+     * 鍒涘缓鍗曞厓鏍煎苟璁剧疆鍊�
+     */
+    private void createCell(Row row, int colIndex, String value, CellStyle style) {
+        Cell cell = row.createCell(colIndex);
+        cell.setCellValue(value);
+        cell.setCellStyle(style);
+    }
+
+    /**
+     * 鑾峰彇瀵煎嚭鏂囦欢鍚�
+     */
+    private String getFileName(Integer inspectType) {
+        if (inspectType == null) {
+            return "妫�楠屽鍑�";
+        }
+        switch (inspectType) {
+            case 0:
+                return "鍘熸潗鏂欐楠屽鍑�";
+            case 1:
+                return "杩囩▼妫�楠屽鍑�";
+            case 2:
+                return "鍑哄巶妫�楠屽鍑�";
+            default:
+                return "妫�楠屽鍑�";
+        }
+    }
+}

--
Gitblit v1.9.3