Commit 2d757cc3abedb14dddc0e96929f73d47459b6e6c

Authored by yeqianyong
1 parent c9baf587

楚江erp:样品反馈单导出功能开发

1 1 package com.lframework.xingyun.sc.controller.sample;
2 2
  3 +import cn.hutool.core.io.resource.ClassPathResource;
3 4 import com.lframework.xingyun.sc.bo.sample.feedback.GetSampleResultFeedbackBo;
4 5 import com.lframework.xingyun.sc.bo.sample.feedback.QuerySampleResultFeedbackBo;
  6 +import com.lframework.xingyun.sc.entity.SampleFeedbackTrackingDetail;
  7 +import com.lframework.xingyun.sc.utils.ExcelUtil;
  8 +import com.lframework.xingyun.sc.utils.LatexFormulaExcelExporterUtil;
  9 +import com.lframework.xingyun.sc.utils.ResponseUtil;
5 10 import com.lframework.xingyun.sc.vo.sample.feedback.QuerySampleResultFeedbackVo;
6 11 import com.lframework.xingyun.sc.service.sample.SampleResultFeedbackService;
7 12 import com.lframework.xingyun.sc.entity.SampleResultFeedback;
... ... @@ -10,6 +15,7 @@ import com.lframework.starter.web.core.components.resp.PageResult;
10 15 import com.lframework.starter.web.core.components.resp.InvokeResult;
11 16
12 17 import javax.annotation.Resource;
  18 +import javax.servlet.http.HttpServletResponse;
13 19 import javax.validation.constraints.NotBlank;
14 20 import io.swagger.annotations.ApiImplicitParam;
15 21 import com.lframework.starter.web.core.components.resp.InvokeResultBuilder;
... ... @@ -17,6 +23,11 @@ import com.lframework.starter.common.exceptions.impl.DefaultClientException;
17 23 import io.swagger.annotations.ApiOperation;
18 24 import com.lframework.starter.common.utils.CollectionUtil;
19 25 import io.swagger.annotations.Api;
  26 +import lombok.extern.slf4j.Slf4j;
  27 +import org.apache.commons.lang3.StringUtils;
  28 +import org.apache.poi.ss.usermodel.Sheet;
  29 +import org.apache.poi.ss.usermodel.Workbook;
  30 +import org.apache.poi.xssf.usermodel.XSSFWorkbook;
20 31 import org.springframework.web.bind.annotation.DeleteMapping;
21 32 import com.lframework.starter.web.core.controller.DefaultBaseController;
22 33 import com.lframework.starter.web.core.annotations.security.HasPermission;
... ... @@ -24,7 +35,12 @@ import org.springframework.validation.annotation.Validated;
24 35 import org.springframework.web.bind.annotation.*;
25 36
26 37 import javax.validation.Valid;
  38 +import java.io.InputStream;
  39 +import java.time.format.DateTimeFormatter;
  40 +import java.util.ArrayList;
  41 +import java.util.HashMap;
27 42 import java.util.List;
  43 +import java.util.Map;
28 44 import java.util.stream.Collectors;
29 45
30 46 /**
... ... @@ -32,6 +48,7 @@ import java.util.stream.Collectors;
32 48 *
33 49 */
34 50 @Api(tags = "产品试样结果反馈单")
  51 +@Slf4j
35 52 @Validated
36 53 @RestController
37 54 @RequestMapping("/sample/feedback")
... ... @@ -86,4 +103,87 @@ public class SampleResultFeedbackController extends DefaultBaseController {
86 103 sampleResultFeedbackService.deleteById(id);
87 104 return InvokeResultBuilder.success();
88 105 }
  106 +
  107 +
  108 + /**
  109 + * 导出反馈单数据
  110 + * 支持PDF、EXCEL俩种格式
  111 + * @param id 主键ID
  112 + * @param response 响应体
  113 + */
  114 + @ApiOperation("规格变更打印")
  115 + @GetMapping("/export")
  116 + public void export(@NotBlank(message = "id不能为空") String id, @NotBlank(message = "导出类型不能为空") String exportType
  117 + , HttpServletResponse response) {
  118 + SampleResultFeedback data = sampleResultFeedbackService.findById(id);
  119 + if (data == null) {
  120 + throw new DefaultClientException("样品反馈单数据不存在!");
  121 + }
  122 + ClassPathResource templateResource = new ClassPathResource("templates/sampleFeedbackTemplate.xlsx");
  123 + try (InputStream inputStream = templateResource.getStream();
  124 + Workbook workbook = new XSSFWorkbook(inputStream)) {
  125 + Sheet sheet = workbook.getSheetAt(0);
  126 + ResponseUtil.setExcelResponseHead(response, data.getOrderNo() + "-试样结果反馈单.xlsx");
  127 + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  128 + List<SampleFeedbackTrackingDetail> detailList = data.getDetailList();
  129 + // ========== 起始行:5==========
  130 + int startRow = 4;
  131 + for (int i = startRow + 1; i < startRow + detailList.size(); i++) {
  132 + ExcelUtil.copyRow(workbook, sheet, startRow, i);
  133 + }
  134 + for (int i = 0; i < detailList.size(); i++) {
  135 + SampleFeedbackTrackingDetail detail = detailList.get(i);
  136 + int rowIdx = startRow + i;
  137 + ExcelUtil.setCellValue(sheet, rowIdx, 1, detail.getBrand());
  138 + List<LatexFormulaExcelExporterUtil.FormulaComponent> formulaComponentList = new ArrayList<>(3);
  139 + if (detail.getThickness() != null) {
  140 + LatexFormulaExcelExporterUtil.FormulaComponent formulaComponent = new LatexFormulaExcelExporterUtil.FormulaComponent();
  141 + formulaComponent.setBase(detail.getThickness());
  142 + formulaComponent.setSup(detail.getThicknessTolPos());
  143 + formulaComponent.setSub(detail.getThicknessTolNeg());
  144 + formulaComponentList.add(formulaComponent);
  145 + }
  146 + if (detail.getWidth() != null) {
  147 + LatexFormulaExcelExporterUtil.FormulaComponent formulaComponent = new LatexFormulaExcelExporterUtil.FormulaComponent();
  148 + formulaComponent.setBase(detail.getWidth());
  149 + formulaComponent.setSup(detail.getWidthTolPos());
  150 + formulaComponent.setSub(detail.getWidthTolNeg());
  151 + formulaComponentList.add(formulaComponent);
  152 + }
  153 + if (detail.getLength() != null) {
  154 + LatexFormulaExcelExporterUtil.FormulaComponent formulaComponent = new LatexFormulaExcelExporterUtil.FormulaComponent();
  155 + formulaComponent.setBase(detail.getLength());
  156 + formulaComponent.setSup(detail.getLengthTolPos());
  157 + formulaComponent.setSub(detail.getLengthTolNeg());
  158 + formulaComponentList.add(formulaComponent);
  159 + }
  160 + String latex = LatexFormulaExcelExporterUtil.convertToLatex(formulaComponentList);
  161 + if (StringUtils.isNotBlank(latex)) {
  162 + LatexFormulaExcelExporterUtil.insertLatexImageToCell(workbook, sheet, latex, rowIdx, 2, 1, 2);
  163 + }
  164 + ExcelUtil.setCellValue(sheet, rowIdx, 4, detail.getStatus());
  165 + ExcelUtil.setCellValue(sheet, rowIdx, 5, detail.getShipmentDate());
  166 + ExcelUtil.setCellValue(sheet, rowIdx, 6, detail.getQuantity());
  167 + ExcelUtil.setCellValue(sheet, rowIdx, 7, detail.getYieldBatchNo());
  168 + }
  169 + // ========== 填充顶部固定字段 ==========
  170 + Map<String, Object> dataMap = new HashMap<>();
  171 + dataMap.put("customerName", data.getCustomerName());
  172 + dataMap.put("workshopName", data.getWorkshopName());
  173 + dataMap.put("orderNo", data.getOrderNo());
  174 +
  175 + ExcelUtil.processTemplate(workbook, dataMap);
  176 + if ("PDF".equals(exportType)) {
  177 + // 输出为PDF文档
  178 + } else {
  179 + // 输出
  180 + workbook.write(response.getOutputStream());
  181 + response.getOutputStream().flush();
  182 + }
  183 + } catch (Exception e) {
  184 + log.error("导出反馈单导出失败:", e);
  185 + throw new DefaultClientException("导出反馈单导出失败:" + e.getMessage());
  186 + }
  187 + }
  188 +
89 189 }
... ...