|
|
package com.xujie.modules.inspection.controller;
import com.xujie.common.utils.PageUtils;import com.xujie.common.utils.R;import com.xujie.modules.inspection.data.*;import com.xujie.modules.inspection.entity.InspectionRequestDetail;import com.xujie.modules.inspection.entity.InspectionRequestDetailSub;import com.xujie.modules.inspection.entity.InspectionRequestHeader;import com.xujie.modules.inspection.entity.QcPersonList;import com.xujie.modules.inspection.service.*;import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.io.ByteArrayResource;import org.springframework.core.io.Resource;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;import java.net.URLEncoder;import java.nio.charset.StandardCharsets;import java.util.List;import java.util.Map;
@RestController@RequestMapping("/inspection")public class InspectionController {
@Autowired private InspectionRequestService inspectionRequestService;
@Autowired private InspectionRequestDetailService inspectionRequestDetailService;
@Autowired private InspectionRequestDetailSubService inspectionRequestDetailSubService;
/** * 检验申请单头表分页查询 */ @PostMapping(value = "/searchInspectionRequestHeaderList") public R searchInspectionRequestHeaderList(@RequestBody InspectionRequestHeader data) { PageUtils page = inspectionRequestService.myPage(data); return R.ok().put("page", page); }
/** * 根据申请单号查询明细列表(分页) */ @PostMapping(value = "/getInspectionRequestDetailList") public R getInspectionRequestDetailList(@RequestBody InspectionRequestDetail data) { PageUtils page = new PageUtils(inspectionRequestDetailService.getPageList(data)); return R.ok().put("page", page); }
/** * 根据申请单号查询子表明细列表(分页) */ @PostMapping(value = "/getInspectionRequestDetailSubList") public R getInspectionRequestDetailSubList(@RequestBody InspectionRequestDetailSub data) { PageUtils page = new PageUtils(inspectionRequestDetailSubService.getPageList(data)); return R.ok().put("page", page); }
/** * 查询验货结果 */ @PostMapping(value = "/getInspectionResultList") public R getInspectionResultList(@RequestBody Map<String, String> params) { String requestNo = params.get("requestNo"); String site = params.get("site"); List<InspectionResultVO> list = inspectionRequestDetailService.getInspectionResultList(requestNo, site); return R.ok().put("list", list); }
/** * 查询可申请验货PO */ @PostMapping("/queryPoPage") public R queryPoPage(@RequestBody InspectionRequestItemVO vo){ PageUtils page = inspectionRequestService.queryPoPage(vo); return R.ok().put("page", page); }
/** * 保存验货申请 */ @PostMapping("/save") public R save(@RequestBody InspectionRequestSaveVO vo){ inspectionRequestService.saveRequest(vo); return R.ok(); }
/** * 修改验货申请(仅允许修改建议验货日期、验货地址和联系人) */ @PostMapping("/update") public R update(@RequestBody InspectionRequestHeader header){ inspectionRequestService.updateRequest(header); return R.ok(); }
/** * 取消验货申请 */ @PostMapping("/cancel/{requestNo}") public R cancel(@PathVariable String requestNo){ inspectionRequestService.cancel(requestNo); return R.ok(); }
/** * 确认验货申请 */ @PostMapping("/confirm/{requestNo}") public R confirm(@PathVariable String requestNo){ inspectionRequestService.confirm(requestNo); return R.ok(); }
/** * 审核验货申请 */ @PostMapping("/audit/{requestNo}") public R audit(@PathVariable String requestNo){ inspectionRequestService.audit(requestNo); return R.ok(); }
/** * 删除验货申请 */ @PostMapping("/delete/{requestNo}") public R delete(@PathVariable String requestNo){ inspectionRequestService.delete(requestNo); return R.ok(); }
/** * 查询qc人员 */ @PostMapping("/getQcPersonList") public R getQcPersonList(@RequestBody QcPersonList qc ){ PageUtils page = inspectionRequestService.getQcPersonList(qc); return R.ok().put("page", page); }
/** * 验货排程 */ @PostMapping("/schedule") public R schedule(@RequestBody InspectionScheduleVO vo){ inspectionRequestService.schedule(vo); return R.ok(); }
/** * 排程视图查询 */ @GetMapping("/scheduleView") public R scheduleView(@RequestParam String qcOperator){
List<InspectionScheduleViewVO> list = inspectionRequestService.queryScheduleView(qcOperator);
return R.ok().put("list", list); }
/** * 下载验货申请导入模板 */ @PostMapping("/downloadTemplate") public ResponseEntity<Resource> downloadTemplate() { try { // 直接在内存中生成 Excel 模板
Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("验货申请数据");
// 创建表头样式
CellStyle headerStyle = workbook.createCellStyle(); Font headerFont = workbook.createFont(); headerFont.setBold(true); headerStyle.setFont(headerFont); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 设置边框
headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); headerStyle.setBorderRight(BorderStyle.THIN); // 设置背景色
headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 创建表头行
Row headerRow = sheet.createRow(0); String[] headers = { "PO号", "PO行号","产品编码", "验货数量", "运输方式", "CRD", "建议验货日期" }; for (int i = 0; i < headers.length; i++) { Cell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(headerStyle); }
// 添加示例数据行
Row dataRow1 = sheet.createRow(1); dataRow1.createCell(0).setCellValue("PO20260522001"); // PO号
dataRow1.createCell(1).setCellValue(1); // PO行号
dataRow1.createCell(2).setCellValue("TESTFX"); // 产品编码
dataRow1.createCell(3).setCellValue(200); // 验货数量
dataRow1.createCell(4).setCellValue("海运"); // 运输方式
dataRow1.createCell(5).setCellValue("2026-06-30"); // CRD
dataRow1.createCell(6).setCellValue("2026-05-29"); // 建议验货日期
// 设置列宽
sheet.setColumnWidth(0, 18 * 256); // PO号
sheet.setColumnWidth(1, 15 * 256); // 产品编码
sheet.setColumnWidth(2, 10 * 256); // PO行号
sheet.setColumnWidth(3, 12 * 256); // 验货数量
sheet.setColumnWidth(4, 12 * 256); // 运输方式
sheet.setColumnWidth(5, 15 * 256); // CRD
sheet.setColumnWidth(6, 18 * 256); // 建议验货日期
// 写入到字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); workbook.close();
byte[] bytes = outputStream.toByteArray(); ByteArrayResource resource = new ByteArrayResource(bytes);
String fileName = "验货申请导入模板.xlsx"; String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()) .replaceAll("\\+", "%20");
return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename*=UTF-8''" + encodedFileName) .header(HttpHeaders.CONTENT_LENGTH, String.valueOf(bytes.length)) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(resource);
} catch (Exception e) { e.printStackTrace(); return ResponseEntity.internalServerError().build(); } }
/** * 预览上传的 Excel 数据 */ @PostMapping("/previewUpload") public R previewUpload(@RequestParam("file") MultipartFile file) throws Exception { List<InspectionRequestExcelDTO> list = inspectionRequestService.previewUpload(file); return R.ok().put("data", list); }
/** * 批量保存上传的数据 */ @PostMapping("/batchSave") public R batchSave(@RequestParam("file") MultipartFile file) { try { inspectionRequestService.batchSave(file); return R.ok(); } catch (Exception e) { return R.error(e.getMessage()); } }}
|