From f5041d3a0a706809bc351ff6d0694935f33abc9f Mon Sep 17 00:00:00 2001 From: value <z1292839451@163.com> Date: 星期一, 15 四月 2024 07:17:11 +0800 Subject: [PATCH] 新增报告插入二维码 --- system-run/src/main/resources/application-dev.yml | 7 ++- framework/pom.xml | 6 +++ framework/src/main/java/com/yuanchu/mom/utils/MatrixToImageWriter.java | 72 ++++++++++++++++++++++++++++++++++++ inspect-server/src/main/resources/mapper/InsOrderMapper.xml | 8 ++-- inspect-server/src/main/resources/static/report-template.docx | 0 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java | 20 +++++++++ 6 files changed, 105 insertions(+), 8 deletions(-) diff --git a/framework/pom.xml b/framework/pom.xml index f69481d..c56bafc 100644 --- a/framework/pom.xml +++ b/framework/pom.xml @@ -39,5 +39,11 @@ <artifactId>java-jwt</artifactId> </dependency> + <dependency> + <groupId>com.google.zxing</groupId> + <artifactId>core</artifactId> + <version>3.3.3</version> + </dependency> + </dependencies> </project> diff --git a/framework/src/main/java/com/yuanchu/mom/utils/MatrixToImageWriter.java b/framework/src/main/java/com/yuanchu/mom/utils/MatrixToImageWriter.java new file mode 100644 index 0000000..cd217c2 --- /dev/null +++ b/framework/src/main/java/com/yuanchu/mom/utils/MatrixToImageWriter.java @@ -0,0 +1,72 @@ +package com.yuanchu.mom.utils; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import javax.imageio.ImageIO; + +import com.google.zxing.BarcodeFormat; +import com.google.zxing.EncodeHintType; +import com.google.zxing.MultiFormatWriter; +import com.google.zxing.WriterException; +import com.google.zxing.common.BitMatrix; +import com.yuanchu.mom.exception.ErrorException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 閰嶇疆鍥惧儚鍐欏叆鍣� + * + * @author z1292 + * + */ +public class MatrixToImageWriter { + private final int BLACK = 0xFF000000; + private final int WHITE = 0xFFFFFFFF; + + private BufferedImage toBufferedImage(BitMatrix matrix) { + int width = matrix.getWidth(); + int height = matrix.getHeight(); + BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); + } + } + return image; + } + + private void writeToFile(BitMatrix matrix, String format, File file) throws IOException { + BufferedImage image = toBufferedImage(matrix); + if (!ImageIO.write(image, format, file)) { + throw new ErrorException("Could not write an image of format " + format + " to " + file); + } + } + + public String code(String content, String path) { + try { + String codeName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd&HH_mm_ss"));// 浜岀淮鐮佺殑鍥剧墖鍚� + String imageType = "jpg";// 鍥剧墖绫诲瀷 + MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); + Map<EncodeHintType, Object> hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + hints.put(EncodeHintType.MARGIN, 0); + BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400, hints); + File file1 = new File(path, codeName + "." + imageType); + writeToFile(bitMatrix, imageType, file1); + return file1.getPath(); + } catch (WriterException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + throw new ErrorException("浜岀淮鐮佺敓鎴愬け璐�"); + } + +} \ No newline at end of file diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java index 36c8f4a..41312ec 100644 --- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java +++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderPlanServiceImpl.java @@ -27,6 +27,8 @@ import com.yuanchu.mom.service.InsOrderService; import com.yuanchu.mom.service.StandardTemplateService; import com.yuanchu.mom.utils.GiveCode; +import com.yuanchu.mom.utils.JackSonUtil; +import com.yuanchu.mom.utils.MatrixToImageWriter; import com.yuanchu.mom.utils.QueryWrappers; import com.yuanchu.mom.vo.InsOrderPlanVO; import org.apache.poi.xwpf.usermodel.TableRowAlign; @@ -76,6 +78,9 @@ @Value("${wordUrl}") private String wordUrl; + + @Value("${twoCode}") + private String twoCode; @Resource private GiveCode giveCode; @@ -419,6 +424,18 @@ table.put("tableSize", tables.size() + 1); }); List<Map<String, String>> deviceList = insOrderMapper.selectDeviceList(deviceSet); + Map<String, String> codeStr = new HashMap<>(); + codeStr.put("鎶ュ憡缂栧彿", insReport.getCode()); + codeStr.put("鏍峰搧鍚嶇О", insOrder.getSample()); + codeStr.put("瑙勬牸鍨嬪彿", samples.get(0).getModel()); + codeStr.put("鍙戞斁鏃ユ湡", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + String codePath; + try { + codePath = new MatrixToImageWriter().code(JackSonUtil.marshal(codeStr).replaceAll("\\{","") + .replaceAll("}","").replaceAll(",","").replaceAll("\"",""), twoCode); + } catch (Exception e) { + throw new RuntimeException(e); + } ConfigureBuilder builder = Configure.builder(); builder.useSpringEL(true); XWPFTemplate template = XWPFTemplate.compile(url, builder.build()).render( @@ -432,9 +449,10 @@ put("tableSize", tables.size() + 1); put("standardMethod", standardMethod2); put("deviceList", deviceList); + put("twoCode", Pictures.ofLocal(codePath).create()); }}); try { - String name = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd_HH_mm_ss")) + ".docx"; + String name = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yy_MM_dd&HH_mm_ss")) + ".docx"; template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name))); insReport.setUrl("/word/" + name); insReportMapper.insert(insReport); diff --git a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml index 77a58f3..b11f9b9 100644 --- a/inspect-server/src/main/resources/mapper/InsOrderMapper.xml +++ b/inspect-server/src/main/resources/mapper/InsOrderMapper.xml @@ -142,11 +142,11 @@ ${ew.customSqlSegment} </if> </select> - <select id="selectDeviceList" resultType="java.util.Map" parameterType="java.util.Set"> - select device_name,specification_model,factory_no,latest_traceability from device + <select id="selectDeviceList" resultType="java.util.Map"> + select device_name,specification_model,factory_no,date_format(latest_traceability, '%Y-%m-%d') latest_traceability from device where device_name in - <foreach collection="array" open="(" separator="," close=")" item="val"> - ${val} + <foreach collection="names" index="index" open="(" separator="," close=")" item="val"> + #{val} </foreach> </select> diff --git a/inspect-server/src/main/resources/static/report-template.docx b/inspect-server/src/main/resources/static/report-template.docx index 38de9fa..451e7e9 100644 --- a/inspect-server/src/main/resources/static/report-template.docx +++ b/inspect-server/src/main/resources/static/report-template.docx Binary files differ diff --git a/system-run/src/main/resources/application-dev.yml b/system-run/src/main/resources/application-dev.yml index 2b36d65..7b63943 100644 --- a/system-run/src/main/resources/application-dev.yml +++ b/system-run/src/main/resources/application-dev.yml @@ -5,7 +5,7 @@ logging: config: classpath:logback-spring.xml # 鏃ュ織瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ - file-location: D:\Download\log + file-location: D:\椤圭洰鏂囦欢瀛樺偍\log # 鏁版嵁搴撳浠借矾寰� backup: @@ -18,11 +18,12 @@ # 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++ file: - path: D:\Download\鍏徃瀛樺偍鍦板潃 + path: D:\椤圭洰鏂囦欢瀛樺偍\image # 涓婁紶鏂囦欢鍏佽鐨勬墿灞曞悕 allowed: png,jpg,jpeg,gif -wordUrl: D:\Download\鍏徃瀛樺偍鍦板潃 +wordUrl: D:\椤圭洰鏂囦欢瀛樺偍\word +twoCode: D:\椤圭洰鏂囦欢瀛樺偍\two_code mybatis-plus: type-aliases-package: com.yuanchu.mom.pojo -- Gitblit v1.9.3