| | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.deepoove.poi.XWPFTemplate; |
| | | import com.deepoove.poi.config.Configure; |
| | | import com.deepoove.poi.data.Pictures; |
| | | import com.itextpdf.text.BadElementException; |
| | | import com.itextpdf.text.DocumentException; |
| | |
| | | import com.ruoyi.inspect.service.InsOrderService; |
| | | import com.ruoyi.inspect.service.InsReportService; |
| | | import com.ruoyi.inspect.service.RawMaterialOrderService; |
| | | import com.ruoyi.inspect.util.PreserveReportPicturePlaceholderHandler; |
| | | import com.ruoyi.system.mapper.UserMapper; |
| | | import com.ruoyi.system.service.InformationNotificationService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | |
| | | @Override |
| | | public int wordInsertUrl(Map<String, Object> map, String url) { |
| | | XWPFTemplate template = XWPFTemplate.compile(url).render(map); |
| | | Configure configure = Configure.builder() |
| | | .setValidErrorHandler(new PreserveReportPicturePlaceholderHandler()) |
| | | .build(); |
| | | XWPFTemplate template = XWPFTemplate.compile(url, configure).render(map); |
| | | try { |
| | | template.writeAndClose(Files.newOutputStream(Paths.get(url))); |
| | | } catch (IOException e) { |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | return "/word/zip/output.zip"; |
| | | } |
| | | |
| | | @Override |
| | | public void download(Integer id, Integer createOrderUser, HttpServletResponse response) { |
| | | if (id == null) { |
| | | throw new ErrorException("报告不能为空"); |
| | | } |
| | | InsReport report = insReportMapper.selectDownloadableReport(id, createOrderUser); |
| | | if (report == null) { |
| | | throw new ErrorException("报告不存在、尚未生成或无权下载"); |
| | | } |
| | | String reportUrl = StringUtils.isNotBlank(report.getUrlS()) ? report.getUrlS() : report.getUrl(); |
| | | if (StringUtils.isBlank(reportUrl) || !reportUrl.replace('\\', '/').startsWith("/word/")) { |
| | | throw new ErrorException("报告文件不存在,请联系管理员"); |
| | | } |
| | | Path root = Paths.get(wordUrl).toAbsolutePath().normalize(); |
| | | Path file = root.resolve(reportUrl.replace('\\', '/').substring("/word/".length())).normalize(); |
| | | if (!file.startsWith(root) || !Files.isRegularFile(file)) { |
| | | throw new ErrorException("报告文件不存在,请联系管理员"); |
| | | } |
| | | try { |
| | | String filename = file.getFileName().toString(); |
| | | String encodedName = URLEncoder.encode(filename, "UTF-8").replace("+", "%20"); |
| | | response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); |
| | | response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedName); |
| | | response.setHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); |
| | | response.setHeader("download-filename", encodedName); |
| | | response.setContentLengthLong(Files.size(file)); |
| | | try (InputStream inputStream = Files.newInputStream(file); |
| | | OutputStream outputStream = response.getOutputStream()) { |
| | | byte[] buffer = new byte[8192]; |
| | | int length; |
| | | while ((length = inputStream.read(buffer)) != -1) { |
| | | outputStream.write(buffer, 0, length); |
| | | } |
| | | outputStream.flush(); |
| | | } |
| | | } catch (IOException e) { |
| | | log.error("下载报告失败,reportId={}", id, e); |
| | | throw new ErrorException("报告下载失败"); |
| | | } |
| | | } |
| | | |
| | | //批量上传 |
| | |
| | | // 判断是否有不合格 |
| | | Long unqualifiedCount = getUnqualifiedCount(insOrder); |
| | | |
| | | if (count.equals(0L) && unqualifiedCount.equals(0L) && one.getIsFinish().equals(0) && one.getIsSource().equals(1) && registerInsResults) { |
| | | if (count.equals(0L) && unqualifiedCount.equals(0L) && one.getIsFinish().equals(0) |
| | | && one.getIsSource().equals(1) && Boolean.TRUE.equals(registerInsResults)) { |
| | | // 原材料移库 |
| | | //如果是拆分的订单,则把拆分的所有批次都移库 |
| | | if(one.getIsSplitOrder()==1 && !hasExemption){ |