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