From 55d0c99711a25033b6a438954ca0c83a5263d986 Mon Sep 17 00:00:00 2001 From: zss <zss@example.com> Date: 星期一, 21 四月 2025 16:24:39 +0800 Subject: [PATCH] 7.4样品的处置 --- cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java | 411 ++++++++++++++++------------------------------------------ 1 files changed, 117 insertions(+), 294 deletions(-) diff --git a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java index 1493c4b..831469c 100644 --- a/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java +++ b/cnas-process/src/main/java/com/ruoyi/process/service/impl/ProcessTotaldealServiceImpl.java @@ -15,22 +15,35 @@ import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.exception.ErrorException; +import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; +import com.ruoyi.process.mapper.InspectionOrderMapper; import com.ruoyi.process.mapper.ProcessDealMapper; +import com.ruoyi.process.mapper.ProcessSampleMapper; import com.ruoyi.process.mapper.ProcessTotaldealMapper; +import com.ruoyi.process.pojo.InspectionOrder; import com.ruoyi.process.pojo.ProcessDeal; +import com.ruoyi.process.pojo.ProcessSample; import com.ruoyi.process.pojo.ProcessTotaldeal; +import com.ruoyi.process.service.ProcessDealService; import com.ruoyi.process.service.ProcessTotaldealService; import com.ruoyi.system.mapper.UserMapper; import org.apache.commons.io.IOUtils; import org.apache.poi.xwpf.usermodel.*; import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.parameters.P; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.xml.soap.SAAJMetaFactory; import java.io.*; +import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; +import java.time.LocalDate; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -41,7 +54,7 @@ * 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�昏〃(鍘嗗彶) 鏈嶅姟瀹炵幇绫� * </p> * - * @author + * @author * @since 2024-11-02 03:59:09 */ @Service @@ -52,10 +65,16 @@ private ProcessTotaldealMapper processTotaldealMapper; @Resource - private ProcessDealMapper processDealMapper; + private ProcessSampleMapper processSampleMapper; - @Value("${wordUrl}") - private String wordUrl; + @Resource + private ProcessDealService processDealService; + + @Resource + private InspectionOrderMapper inspectionOrderMapper; + + @Resource + private ProcessDealMapper processDealMapper; @Value("${file.path}") private String imgUrl; @@ -80,9 +99,6 @@ ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id); processTotaldeal.setSubmitUser(userId); processTotaldeal.setSubmitState("宸叉彁浜�"); - processTotaldeal.setSubmitUrl(user.getSignatureUrl()); - //鐢熸垚鏍峰搧澶勭悊鐢宠琛ㄥ苟灏嗗~琛ㄤ汉鐨勭數瀛愮鍚嶅嵃涓� - processTotaldeal.setUrl(processTotaldeal(id, user.getSignatureUrl())); return processTotaldealMapper.updateById(processTotaldeal); } @@ -96,14 +112,9 @@ ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id); processTotaldeal.setExamineUser(userId); processTotaldeal.setExamineState(state); - processTotaldeal.setExamineUrl(user.getSignatureUrl()); if (state.equals("涓嶉�氳繃")) { processTotaldeal.setSubmitState("寰呮彁浜�"); } - //灏嗗鏍镐汉鐨勭數瀛愮鍚嶅嵃涓� - wordInsertUrl(new HashMap<String, Object>() {{ - put("examineUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + user.getSignatureUrl())); - }}, wordUrl + "/" + processTotaldeal.getUrl()); return processTotaldealMapper.updateById(processTotaldeal); } @@ -117,300 +128,112 @@ ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id); processTotaldeal.setRatifyUser(userId); processTotaldeal.setRatifyState(state); - processTotaldeal.setRatifyUrl(user.getSignatureUrl()); if (state.equals("涓嶉�氳繃")) { processTotaldeal.setSubmitState("寰呮彁浜�"); } - //灏嗘壒鍑嗕汉鐨勭鍚嶅嵃涓� - wordInsertUrl(new HashMap<String, Object>() {{ - put("ratifyUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + user.getSignatureUrl())); - }}, wordUrl + "/" + processTotaldeal.getUrl()); return processTotaldealMapper.updateById(processTotaldeal); } - //鐢熸垚鏍峰搧澶勭悊琛╳ord - private String processTotaldeal(Integer id, String signatureUrl) { - List<ProcessDeal> processDeals = processDealMapper.selectList(Wrappers.<ProcessDeal>lambdaQuery().eq(ProcessDeal::getTotaldealId, id)); - String url; - try { - InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-deal.docx"); - File file = File.createTempFile("temp", ".tmp"); - OutputStream outputStream = new FileOutputStream(file); - IOUtils.copy(inputStream, outputStream); - url = file.getAbsolutePath(); - } catch (FileNotFoundException e) { - throw new ErrorException("鎵句笉鍒版ā鏉挎枃浠�"); - } catch (IOException e) { - throw new RuntimeException(e); + @Override + public int addProcessTotaldeal(String month) { + //鏂板鎬昏〃 + ProcessTotaldeal processTotaldeal = new ProcessTotaldeal(); + List<ProcessTotaldeal> processTotaldeals = processTotaldealMapper.selectList(Wrappers.<ProcessTotaldeal>lambdaQuery() + .eq(ProcessTotaldeal::getMonth, month)); + if (processTotaldeals.size()<=0) { + processTotaldeal.setMonth(month);//鏈堜唤 + processTotaldeal.setSubmitState("寰呮彁浜�"); + processTotaldealMapper.insert(processTotaldeal); + }else { + processTotaldeal=processTotaldeals.get(0); } - ConfigureBuilder builder = Configure.builder(); - builder.useSpringEL(true); - - List<Map<String, Object>> sampleList = new ArrayList<>(); - Integer index = 1; - Integer index1 = 1; - for (int c = 0; c < processDeals.size(); c++) { - //瓒呰繃20琛屾崲椤� - if (c % 20 == 0) { - List<RowRenderData> rows = new ArrayList<>(); - //琛ㄦ牸鐨勮鏁� - for (int i = 0; i < 21; i++) { - RowRenderData rowRenderData = new RowRenderData(); - RowStyle rowStyle = new RowStyle(); - rowStyle.setHeight(40); - rowRenderData.setRowStyle(rowStyle); - List<CellRenderData> cells = new ArrayList<>(); - //琛ㄦ牸鐨勫垪鏁� - for (int j = 0; j < 7; j++) { - CellRenderData cellRenderData = new CellRenderData(); - CellStyle cellStyle = new CellStyle(); - cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER); - cellRenderData.setCellStyle(cellStyle); - List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>(); - ParagraphRenderData paragraphRenderData = new ParagraphRenderData(); - ParagraphStyle paragraphStyle = new ParagraphStyle(); - paragraphStyle.setAlign(ParagraphAlignment.CENTER); - paragraphRenderData.setParagraphStyle(paragraphStyle); - List<RenderData> renderData = new ArrayList<>(); - TextRenderData textRenderData = new TextRenderData(); - Style style = new Style(); - style.setFontFamily("瀹嬩綋"); - style.setColor("000000"); - textRenderData.setStyle(style); - if (i == 0) { - //绗竴琛� - if (j == 0) { - //绗竴鍒楀簭鍙� - textRenderData.setText("搴忓彿@No."); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 1) { - //绗簩鍒楁牱鍝佸悕绉� - textRenderData.setText("鏍峰搧鍚嶇О@Sample name"); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 2) { - //绗笁鍒楁牱鍝佺紪鍙� - textRenderData.setText("鏍峰搧缂栧彿@Sample number"); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 3) { - //绗洓鍒椾緵鏍峰崟浣� - textRenderData.setText("渚涙牱鍗曚綅@Sample unit"); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 4) { - //绗簲鍒楁暟閲� - textRenderData.setText("鏁伴噺@Quantity"); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 5) { - //绗叚鍒楀鐞嗘柟寮� - textRenderData.setText("澶勭悊鏂瑰紡@Processing"); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else { - //绗竷鍒楁椂闂� - textRenderData.setText("鏃堕棿@Date"); - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } - } else { - //鍏朵粬琛� - if (j == 0) { - //绗竴鍒� - try { - String sampleName = processDeals.get((i - 1) + (index1 - 1) * 20).getSampleName(); - textRenderData.setText(index + ""); - } catch (Exception e) { - textRenderData.setText(""); - } - index++; - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 1) { - try { - textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleName()); - } catch (Exception e) { - textRenderData.setText(""); - } - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 2) { - try { - textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleCode()); - } catch (Exception e) { - textRenderData.setText(""); - } - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 3) { - try { - textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getSampleSupplier()); - } catch (Exception e) { - textRenderData.setText(""); - } - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 4) { - try { - textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getNum() + ""); - } catch (Exception e) { - textRenderData.setText(""); - } - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else if (j == 5) { - try { - textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getDealMethod()); - } catch (Exception e) { - textRenderData.setText(""); - } - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } else { - try { - textRenderData.setText(processDeals.get((i - 1) + (index1 - 1) * 20).getDealTime() + ""); - } catch (Exception e) { - textRenderData.setText(""); - } - renderData.add(textRenderData); - paragraphRenderData.setContents(renderData); - paragraphRenderDataList.add(paragraphRenderData); - cellRenderData.setParagraphs(paragraphRenderDataList); - cells.add(cellRenderData); - } - } - } - rowRenderData.setCells(cells); - if (rowRenderData.getCells().size() != 0) { - rows.add(rowRenderData); - } + //鏂板璇︽儏琛� + //1.鑾峰彇璇ユ湀浠界殑绗竴澶╁拰鏈�鍚庝竴澶� + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); + YearMonth yearMonth = YearMonth.parse(month, formatter); + LocalDate firstDay = yearMonth.atDay(1); + LocalDate lastDay = yearMonth.atEndOfMonth(); + //2.鏌ヨ鍦ㄨ繖涓椂闂磋寖鍥村唴鐨勬墍鏈夋牱鍝佺櫥璁扮殑鏁版嵁 + List<ProcessSample> processSamples = processSampleMapper.selectList(Wrappers.<ProcessSample>lambdaQuery() + .between(ProcessSample::getLeaveDate, firstDay, lastDay)); + if (processSamples.size()>0){ + //鑾峰彇澶勭悊鏂瑰紡 + InspectionOrder inspectionOrder = inspectionOrderMapper.selectById(processSamples.get(0).getInspectionOrderId()); + List<ProcessDeal> processDeals = new ArrayList<>(); + for (ProcessSample processSample : processSamples) { + long count = processDealService.count(Wrappers.<ProcessDeal>lambdaQuery().eq(ProcessDeal::getProcessSampleId, processSample.getId())); + if (count>0){ + continue; } - TableRenderData tableRenderData = new TableRenderData(); - tableRenderData.setRows(rows); - int countSize = tableRenderData.getRows().get(0).getCells().size(); - for (RowRenderData row : tableRenderData.getRows()) { - if (row.getCells().size() != countSize) { - throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑"); - } - } - TableStyle tableStyle = new TableStyle(); - tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH); - tableStyle.setAlign(TableRowAlign.CENTER); - BorderStyle borderStyle = new BorderStyle(); - borderStyle.setColor("000000"); - borderStyle.setType(XWPFTable.XWPFBorderType.THICK); - borderStyle.setSize(14); - tableStyle.setLeftBorder(borderStyle); - tableStyle.setTopBorder(borderStyle); - tableStyle.setRightBorder(borderStyle); - tableStyle.setBottomBorder(borderStyle); - tableRenderData.setTableStyle(tableStyle); - Map<String, Object> table = new HashMap<>(); - table.put("sample", tableRenderData); - table.put("index1", index1); - sampleList.add(table); - index1++; + ProcessDeal processDeal = new ProcessDeal(); + processDeal.setSampleName(processSample.getSampleName());//鏍峰搧鍚嶇О + processDeal.setSampleCode(processSample.getSampleCode());//鏍峰搧缂栧彿 + processDeal.setSampleSupplier(processSample.getSampleSupplier());//渚涙牱鍗曚綅 + processDeal.setNum(processSample.getNum());//鏍峰搧鏁伴噺 + processDeal.setDealMethod(inspectionOrder.getProcessing()==1?"瀹為獙瀹ゅ鐞�":"濮旀墭鍗曚綅鍙栧洖");//澶勭悊鏂瑰紡 + processDeal.setDealTime(LocalDate.now());//鏃堕棿=褰撳墠鏃堕棿 + processDeal.setTotaldealId(processTotaldeal.getId());//鎬昏〃id + processDeal.setProcessSampleId(processSample.getId());//鏍峰搧鎺ユ敹id + processDeals.add(processDeal); } + processDealService.saveBatch(processDeals); } - Integer finalIndex = index1; - XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render( - new HashMap<String, Object>() {{ - put("sampleList", sampleList); - put("size", finalIndex); - put("examineUrl", null); - put("ratifyUrl", null); - put("writeUrl", new FilePictureRenderData(100, 50, imgUrl + "/" + signatureUrl)); - }}); - String name = UUID.randomUUID() + "_鏍峰搧澶勭悊鐢宠琛�" + ".docx"; - try { - template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name))); - } catch (IOException e) { - throw new RuntimeException(e); - } - //澶勭悊涓嫳鏂囨崲琛岀殑闂 - String path = wordUrl + "/" + name; - try { - FileInputStream stream1 = new FileInputStream(path); - XWPFDocument document1 = new XWPFDocument(stream1); - List<XWPFTable> xwpfTables1 = document1.getTables(); - for (int i = 0; i < xwpfTables1.size(); i++) { - for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) { - for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) { - if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) { - String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText(); - String[] split = text.split("@"); - xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0); - XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph(); - XWPFRun run = xwpfParagraph.createRun(); - run.setText(split[0]); - if (ObjectUtils.isNotNull(split[1])) { - run.addBreak(); - run.setText(split[1]); - } - xwpfParagraph.setAlignment(ParagraphAlignment.CENTER); - } - } - } - } - FileOutputStream fileOutputStream1 = new FileOutputStream(path); - document1.write(fileOutputStream1); - fileOutputStream1.close(); - } catch (FileNotFoundException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - return name; + return 0; } - public int wordInsertUrl(Map<String, Object> map, String url) { - XWPFTemplate template = XWPFTemplate.compile(url).render(map); - try { - template.writeAndClose(Files.newOutputStream(Paths.get(url))); - } catch (IOException e) { - throw new RuntimeException(e); + @Override + public void exportProcessTotaldeal(Integer id, HttpServletResponse response) { + List<ProcessDeal> sampleDealDtos = processDealMapper.selectDeal(id); + ProcessTotaldeal processTotaldeal = processTotaldealMapper.selectById(id); + String submitUserUrl="1"; + String examineUserUrl="1"; + String ratifyUserUrl="1"; + //鑾峰彇鎻愪氦浜虹鍚� + if (ObjectUtils.isNotNull(processTotaldeal.getSubmitUser())) { + User user1 = userMapper.selectById(processTotaldeal.getSubmitUser()); + if (ObjectUtils.isEmpty(user1.getSignatureUrl())) throw new ErrorException("鏈壘鍒版彁浜や汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!"); + submitUserUrl = user1.getSignatureUrl(); } - return 1; + //鑾峰彇瀹℃牳浜虹鍚� + if (ObjectUtils.isNotNull(processTotaldeal.getExamineUser())) { + User user2 = userMapper.selectById(processTotaldeal.getExamineUser()); + if (ObjectUtils.isEmpty(user2.getSignatureUrl())) throw new ErrorException("鏈壘鍒板鏍镐汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!"); + examineUserUrl = user2.getSignatureUrl(); + } + //鑾峰彇鎵瑰噯浜虹鍚� + if (ObjectUtils.isNotNull(processTotaldeal.getRatifyUser())) { + User user3 = userMapper.selectById(processTotaldeal.getRatifyUser()); + if (ObjectUtils.isEmpty(user3.getSignatureUrl())) throw new ErrorException("鏈壘鍒版壒鍑嗕汉鐨勭數瀛愮鍚�,璇蜂笂浼犺嚜宸辩殑鐢靛瓙绛惧悕!"); + ratifyUserUrl = user3.getSignatureUrl(); + } + // 鑾峰彇璺緞 + InputStream inputStream = this.getClass().getResourceAsStream("/static/sample-deal.docx"); + Configure configure = Configure.builder() + .bind("sampleList", new HackLoopTableRenderPolicy()) + .build(); + FilePictureRenderData finalSubmitUserUrl = submitUserUrl!="1" ? new FilePictureRenderData(100, 50, imgUrl + "/" + submitUserUrl) : null; + FilePictureRenderData finalExamineUserUrl = examineUserUrl!="1" ? new FilePictureRenderData(100, 50, imgUrl + "/" + examineUserUrl) : null; + FilePictureRenderData finalRatifyUserUrl = ratifyUserUrl!="1" ? new FilePictureRenderData(100, 50, imgUrl + "/" + ratifyUserUrl) : null; + XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( + new HashMap<String, Object>() {{ + put("sampleList", sampleDealDtos); + put("examineUrl", finalExamineUserUrl);//瀹℃牳浜� + put("ratifyUrl", finalRatifyUserUrl);//鎵瑰噯浜� + put("writeUrl",finalSubmitUserUrl);//鎻愪氦浜� + }}); + try { + response.setContentType("application/msword"); + String fileName = URLEncoder.encode( + "鏍峰搧澶勭悊鐢宠琛�", "UTF-8"); + response.setHeader("Content-disposition", + "attachment;filename=" + fileName + ".docx"); + OutputStream os = response.getOutputStream(); + template.write(os); + os.flush(); + os.close(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("瀵煎嚭澶辫触"); + } } } -- Gitblit v1.9.3