From 17f0c4d68b1770e490a6acd70cd769eebae4cd8f Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 24 四月 2024 16:38:09 +0800
Subject: [PATCH] 1、封装生成二维码的公共类; 2、实现生成标识类二维码。

---
 pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeGenerator.java   |  190 +++++++++++++++
 pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest2.java       |   91 +++++++
 pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogCtrl.java         |    2 
 pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/ResultVo.java       |   10 
 pms-parent/pms-common/src/main/java/com/dy/common/util/GraphicsUtils.java     |   61 +++++
 pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeConstant.java |   15 +
 pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/QueryVo.java         |   16 +
 pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest1.java       |  172 ++++++++++++++
 pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogSv.java           |   49 ++++
 pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/MarkCodeCtrl.java   |   57 ++++
 pms-parent/pms-global/src/main/resources/images/logo.png                      |    0 
 11 files changed, 661 insertions(+), 2 deletions(-)

diff --git a/pms-parent/pms-common/src/main/java/com/dy/common/util/GraphicsUtils.java b/pms-parent/pms-common/src/main/java/com/dy/common/util/GraphicsUtils.java
new file mode 100644
index 0000000..07d6d8d
--- /dev/null
+++ b/pms-parent/pms-common/src/main/java/com/dy/common/util/GraphicsUtils.java
@@ -0,0 +1,61 @@
+package com.dy.common.util;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class GraphicsUtils {
+
+    // 鍒涘缓涓�涓┖鐧界殑 BufferedImage 瀵硅薄
+    public static BufferedImage createEmptyImage(int width, int height) {
+        return new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+    }
+
+    // 鍦ㄥ浘鍍忎笂璁剧疆鑳屾櫙棰滆壊
+    public static void drawBackground(Graphics2D g2d,int x, int y, int width, int height, Color color) {
+        g2d.setBackground(color);
+        g2d.clearRect(x, y, width, height);
+    }
+
+
+    // 鍦ㄥ浘鍍忎笂缁樺埗鏂囨湰
+    public static void drawText(Graphics2D g2d, String text, int x, int y, Font font, Color color) {
+        g2d.setColor(color);
+        g2d.setFont(font);
+        g2d.drawString(text, x, y);
+    }
+
+    // 鍦ㄥ浘鍍忎笂缁樺埗鐭╁舰
+    public static void drawRectangle(Graphics2D g2d, int x, int y, int width, int height, Color color) {
+        g2d.setColor(color);
+        g2d.drawRect(x, y, width, height);
+    }
+
+    // 鍦ㄥ浘鍍忎笂缁樺埗妞渾
+    public static void drawEllipse(Graphics2D g2d, int x, int y, int width, int height, Color color) {
+        g2d.setColor(color);
+        g2d.drawOval(x, y, width, height);
+    }
+
+    // 鍦ㄥ浘鍍忎笂缁樺埗绾挎
+    public static void drawLine(Graphics2D g2d, int x1, int y1, int x2, int y2, Color color) {
+        g2d.setColor(color);
+        g2d.drawLine(x1, y1, x2, y2);
+    }
+
+    // 鍦ㄥ浘鍍忎笂缁樺埗鍥剧墖
+    public static void drawImage(Graphics2D g2d, BufferedImage imageToDraw, int x, int y) {
+        g2d.drawImage(imageToDraw, x, y, null);
+    }
+
+    // 鍦ㄥ浘鍍忔寚瀹氬尯鍩熺粯鍒堕鑹�
+    public static void drawFillRect(Graphics2D g2d, int x, int y, int width, int height, Color color) {
+        g2d.setColor(color);
+        g2d.fillRect(x, y, width, height);
+    }
+
+    // 鍦ㄥ浘鍍忔寚瀹氬尯鍩熺粯鍒堕鑹�
+    public static void drawFont(Graphics2D g2d,Font font, Color color) {
+        g2d.setFont(font);
+        g2d.setColor(color);
+    }
+}
diff --git a/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeGenerator.java b/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeGenerator.java
new file mode 100644
index 0000000..bce628d
--- /dev/null
+++ b/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeGenerator.java
@@ -0,0 +1,190 @@
+package com.dy.common.util;
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.google.zxing.*;
+import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
+import com.google.zxing.client.j2se.MatrixToImageConfig;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+
+public class QrCodeGenerator {
+
+
+    private static final String DEFAULT_CHAR_SET = "UTF-8";
+
+    private static final String DEFAULT_FORMAT_NAME = "JPG";
+
+
+    // 浜岀淮鐮佸搴�
+    private static final int DEFAULT_QR_CODE_WIDTH = 300;
+    // 浜岀淮鐮侀珮搴�
+    private static final int DEFAULT_QR_CODE_HEIGHT = 300;
+
+    /**
+     * 鍒涘缓BitMatrix姣旂壒鐭╅樀
+     * @Param contents 浜岀淮鐮侀噷鐨勫唴瀹�
+     * @Param width 浜岀淮鐮佸搴�
+     * @param height 浜岀淮鐮侀珮搴�
+     * @return com.google.zxing.common.BitMatrix
+     */
+    public static BitMatrix createBitMatrix(String contents, int width , int height) throws WriterException, IOException {
+        if (ObjectUtil.isNull(width)) {
+            width = DEFAULT_QR_CODE_WIDTH;
+        }
+        if (ObjectUtil.isNull(height)) {
+            height = DEFAULT_QR_CODE_HEIGHT;
+        }
+
+        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
+        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 绾犻敊绛夌骇L,M,Q,H
+        hints.put(EncodeHintType.CHARACTER_SET, DEFAULT_CHAR_SET);// 缂栫爜utf-8
+        hints.put(EncodeHintType.MARGIN, 1);  // 杈硅窛
+
+        // 鍒涘缓姣旂壒鐭╅樀
+        BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
+                BarcodeFormat.QR_CODE, width, height, hints);
+        return bitMatrix;
+
+    }
+
+    /**
+     * 鍒涘缓浜岀淮鐮侊紝杩斿洖瀛楄妭鏁扮粍
+     * @Param contents 浜岀淮鐮侀噷鐨勫唴瀹�
+     * @Param imageFormat 鍥剧墖鍚庣紑鍚�
+     * @Param width 浜岀淮鐮佸搴�
+     * @param height 浜岀淮鐮侀珮搴�
+     * @return byte[]
+     */
+    public static byte[] createQrCode(String contents , String imageFormat , int width , int height) throws WriterException, IOException {
+        if (StrUtil.isBlank(imageFormat)){
+            imageFormat = DEFAULT_FORMAT_NAME;
+        }
+        BitMatrix bitMatrix = createBitMatrix(contents , width, height);
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, os);
+        return os.toByteArray();
+    }
+
+    /**
+     * 鍒涘缓浜岀淮鐮侊紝杩斿洖base64瀛楃涓�
+     * @Date 2023/09/24 22:30
+     * @Param contents 浜岀淮鐮侀噷鐨勫唴瀹�
+     * @Param imageFormat 鍥剧墖鍚庣紑鍚�
+     * @Param width 浜岀淮鐮佸搴�
+     * @param height 浜岀淮鐮侀珮搴�
+     * @return byte[]
+     */
+    public static String createQrCodeBase64(String contents , String imageFormat , int width , int height) throws WriterException, IOException {
+        byte[] bytes = createQrCode(contents , imageFormat , width, height);
+        return Base64.encode(bytes);
+    }
+
+    /**
+     * 瑙g爜浜岀淮鐮�
+     * @Param [image]
+     * @return java.lang.String
+     */
+    public static String decodeQrCode(BufferedImage image) throws Exception {
+        if (image == null) return StrUtil.EMPTY;
+        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
+        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
+        hints.put(DecodeHintType.CHARACTER_SET, DEFAULT_CHAR_SET);
+        Result result = new MultiFormatReader().decode(bitmap, hints);
+        return result.getText();
+    }
+
+    /**
+     * 杞崲涓築ufferedImage
+     * @Param [bitMatrix]
+     * @return java.awt.image.BufferedImage
+     */
+    public static BufferedImage toBufferedImage(BitMatrix bitMatrix) throws IOException, WriterException {
+        MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000001, 0xFFFFFFFF);
+        BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
+        return bufferedImage;
+    }
+
+    /**
+     * 缁欎簩缁寸爜娣诲姞logo
+     * @Param [bufferedImage, logoFile]
+     * @return java.awt.image.BufferedImage
+     */
+    public static BufferedImage addQrCodeLogo(BufferedImage bufferedImage, File logoFile) throws IOException {
+        Graphics2D graphics = bufferedImage.createGraphics();
+        int matrixWidth = bufferedImage.getWidth();
+        int matrixHeigh = bufferedImage.getHeight();
+
+        // 璇诲彇logo鍥剧墖鏂囦欢
+        BufferedImage logo = ImageIO.read(logoFile);
+        int logoWidth = logo.getWidth();
+        int logoHeight = logo.getHeight();
+
+        //  璁$畻logo鏀剧疆浣嶇疆
+        int x = bufferedImage.getWidth()  / 5*2;
+        int y = bufferedImage.getHeight() / 5*2;
+        int width = matrixWidth / 5;
+        int height = matrixHeigh / 5;
+
+        // 寮�濮嬬粯鍒跺浘鐗�
+        graphics.drawImage(logo, x, y, width, height, null);
+        graphics.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15);
+        graphics.setStroke(new BasicStroke(5.0F, 1, 1));
+        graphics.setColor(Color.white);
+        graphics.drawRect(x, y, logoWidth, logoHeight);
+
+        graphics.dispose();
+        bufferedImage.flush();
+        return bufferedImage;
+    }
+
+    /**
+     * BufferedImage杞瓧鑺傛暟缁�
+     * @param image
+     * @param imageFormat
+     * @return
+     */
+    public static byte[] bufferedImageToByteArray(BufferedImage image, String imageFormat) {
+        if (StrUtil.isBlank(imageFormat)){
+            imageFormat = DEFAULT_FORMAT_NAME;
+        }
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        try {
+            // 浣跨敤ImageIO灏咮ufferedImage鍐欏叆outputStream
+            ImageIO.write(image, imageFormat, outputStream);
+            return outputStream.toByteArray();
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            try {
+                outputStream.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        BufferedImage bufferedImage = toBufferedImage(createBitMatrix("https://blog.csdn.net", 300, 300));
+        ImageIO.write(bufferedImage, "JPG", new File("D:/qrcode.jpg"));
+
+        System.out.println(decodeQrCode(bufferedImage));
+
+        BufferedImage logoQrCode = addQrCodeLogo(bufferedImage, new File("D://logo.png"));
+        ImageIO.write(logoQrCode, "JPG", new File("D:/logoQrcode.jpg"));
+    }
+
+}
\ No newline at end of file
diff --git a/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest1.java b/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest1.java
new file mode 100644
index 0000000..ed8442f
--- /dev/null
+++ b/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest1.java
@@ -0,0 +1,172 @@
+package com.dy.common.util;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class QrCodeTest1 {
+
+    public static void main(String[] args) throws Exception {
+
+        String[] text = {"12345678;瓒呭0娉㈡按琛�;姘戞椇閬�10鍙�;澶х鐮旂┒闄�;020-12345678;106.872615383,11.466578703"};
+
+        String imgpath = "D:\\demo\\";
+
+        for (int i = 0; i < text.length; i++) {
+
+            String[] s = text[i].split(";");
+
+            String[] lines = {"璁惧缂栧彿:" + s[0], "璁惧绫诲瀷:" + s[1], "閬撹矾鍚嶇О:" + s[2], "绠℃姢鍗曚綅:" + s[3], "鎶ヤ慨鐢佃瘽:" + s[4]};
+            String[] line = {s[0], s[1], s[2], s[3], s[4]};
+
+            createq(lines, line, imgpath + "test.jpeg");
+        }
+    }
+
+    static void createq(String[] lines, String[] line, String imgpath) {
+
+        String qrCodeText = line[0];
+
+        //浜岀淮鐮佸ぇ灏�
+        int size = 400;
+
+        //鐢诲竷澶у皬
+        int combinedWidth = size + 800;
+        int combinedHeight = size + 400 ;
+
+        //鏍囬楂樺害
+        int topsize = 160;
+
+        //璁剧疆鏍囬y鍧愭爣
+        int yTitle = 110;
+
+        //璁剧疆鐢诲竷鍐呰竟璺�
+        int padding = 5;
+
+        //璁剧疆鏍囬鍐呭
+        String title = "澶х闆嗗洟";
+
+        //璁剧疆鍥剧墖dpi
+        int dpi = 300;
+
+        Color blue = new Color(75, 125, 178);
+
+        //璁剧疆浜岀淮鐮佸弬鏁�
+        Map hints = new HashMap();
+
+        //璁剧疆UTF-8锛� 闃叉涓枃涔辩爜
+        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
+
+        // 璁剧疆浜岀淮鐮佺殑瀹归敊鎬�
+        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+
+        //鐣欑櫧 榛樿4
+        hints.put(EncodeHintType.MARGIN, 1);
+
+        // 鐮佺増鏈紝鍙栧�间负 1 鍒� 40 ,鏍规嵁浜岀淮鐮佸唴瀹瑰喅瀹氭渶浣庣増鏈�
+        hints.put(EncodeHintType.QR_VERSION, 3);
+
+        //鍒涘缓鐮佷綅鍥�
+        BitMatrix bitMatrix = null;
+        try {
+            bitMatrix = new QRCodeWriter().encode(qrCodeText, BarcodeFormat.QR_CODE, size, size, hints);
+        } catch (WriterException e) {
+            e.printStackTrace();
+        }
+
+        //灏嗙敓鎴愮爜浣嶅浘杞崲鎴怋ufferedImage
+        BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
+
+        //鍒涘缓绌虹櫧BufferedImage
+        BufferedImage combined = new BufferedImage(combinedWidth, combinedHeight, BufferedImage.TYPE_INT_RGB);
+
+        //浠嶣ufferedImage瀵硅薄涓幏鍙栫敾甯冿紙Graphics2D锛夊璞�
+        Graphics2D graphics = combined.createGraphics();
+
+        //璁剧疆娓叉煋鎻愮ず涓哄惎鐢ㄦ枃鏈姉閿娇
+        graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+
+        //榛樿寮�鍚粯鍥炬姉閿娇
+        //graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_DEFAULT);
+
+        //璁剧疆绌虹櫧鐢诲竷鏁翠綋鑳屾櫙棰滆壊
+        GraphicsUtils.drawBackground(graphics,0, 0, combinedWidth, combinedHeight,Color.WHITE);
+
+        //缁樺埗琛ㄦ牸鐢荤嚎
+        //缁樺埗绾垮湪鍐呰竟璺濆唴锛屼笉褰卞搷鍏跺畠鍐呭锛�-1鎿嶄綔
+        int linepadding = padding - 1 ;
+        //缁樺埗鐭╁舰
+        GraphicsUtils.drawRectangle(graphics,linepadding,linepadding,combinedWidth-linepadding*2,combinedHeight-linepadding*2,Color.BLACK);
+        //缁樺埗鍐呬笁妯嚎
+        GraphicsUtils.drawLine(graphics,linepadding,padding+topsize+1,combinedWidth-linepadding,padding+topsize+1,Color.BLACK);
+        GraphicsUtils.drawLine(graphics,linepadding,padding+topsize+size+2,combinedWidth-linepadding,padding+topsize+size+2,Color.BLACK);
+        GraphicsUtils.drawLine(graphics,linepadding,combinedHeight-(combinedHeight-padding*2-topsize-size+2)/2 - padding,combinedWidth-linepadding,combinedHeight-(combinedHeight-padding*2-topsize-size+2)/2 - padding,Color.BLACK);
+        //缁樺埗浜岀淮鐮佺珫绾垮強鍙宠竟2妯嚎
+        GraphicsUtils.drawLine(graphics,padding+size+1,padding+topsize+1,padding+size+1,padding+topsize+size+1,Color.BLACK);
+        GraphicsUtils.drawLine(graphics,padding+size+1,padding+topsize+1+size/3,combinedWidth-linepadding,padding+topsize+1+size/3,Color.BLACK);
+        GraphicsUtils.drawLine(graphics,padding+size+1,padding+topsize+1+size/3*2,combinedWidth-linepadding,padding+topsize+1+size/3*2,Color.BLACK);
+
+        //璇ユ柟娉曠敤浜庣粯鍒跺ご閮ㄧ粯鍒剁煩褰㈠苟濉厖鎸囧畾棰滆壊
+        GraphicsUtils.drawFillRect(graphics,padding, padding, combinedWidth-(padding*2), topsize,blue);
+
+        //浜岀淮鐮佹彃鍏ョ敾甯�
+        GraphicsUtils.drawImage(graphics,qrImage, padding, topsize+padding+2);
+
+        //璇ユ柟娉曠敤浜庣粯鍒跺ご閮ㄧ粯鍒剁煩褰㈠苟濉厖鎸囧畾棰滆壊
+        GraphicsUtils.drawBackground(graphics,padding, padding, combinedWidth-(padding*2), topsize,blue);
+
+        //缁樺埗澶撮儴瀛椾綋
+        Font titleFont = new Font("瀹嬩綋", Font.BOLD, 70);
+        GraphicsUtils.drawFont(graphics,titleFont,Color.white);
+        FontMetrics fontMetrics = graphics.getFontMetrics();
+        int fontWidth = fontMetrics.stringWidth(title);
+        int xTitle = ((combinedWidth - fontWidth) / 2);
+        GraphicsUtils.drawText(graphics,title,xTitle, yTitle+padding,titleFont,Color.white);
+
+        //缁樺埗闈炲ご閮ㄥ瓧浣�
+
+        //璁剧疆瀛椾綋鍙婇鑹�
+        Font downFont = new Font("瀹嬩綋", Font.BOLD, 50);
+        GraphicsUtils.drawFont(graphics,downFont,Color.BLACK);
+
+        fontMetrics = graphics.getFontMetrics();
+
+        int fontHeight  = fontMetrics.getHeight();
+
+        for (int i = 0; i < lines.length; i++) {
+
+            if (i < 3){
+                graphics.drawString(lines[i], size+padding+5, topsize+padding+ (size/3) * i + (size/3+fontHeight)/2 );
+            }else if (i == 3){
+                int test =  combinedHeight-(combinedHeight-padding*2-topsize-size)/4*3 - padding + fontHeight/2 ;
+                graphics.drawString(lines[i], 5+padding, test);
+            }
+            else if (i == 4){
+                int test =  combinedHeight-(combinedHeight-padding*2-topsize-size)/4 - padding + fontHeight/2 ;
+                graphics.drawString(lines[i], 5+padding, test);
+            }
+        }
+
+        graphics.dispose();
+
+        try {
+            ImageIO.write(combined, "jpeg",new File(imgpath) );
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+}
diff --git a/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest2.java b/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest2.java
new file mode 100644
index 0000000..d858d21
--- /dev/null
+++ b/pms-parent/pms-common/src/main/java/com/dy/common/util/QrCodeTest2.java
@@ -0,0 +1,91 @@
+package com.dy.common.util;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class QrCodeTest2 {
+
+    public static void main(String[] args) throws Exception {
+        String imgpath = "D:\\demo\\";
+        createq("1002001", "纭畾" , imgpath + "test2.jpg");
+    }
+
+    private static void createq(String code, String name, String imgpath) throws Exception{
+        //浜岀淮鐮佸ぇ灏�
+        int size = 300;
+
+        //璁剧疆浜岀淮鐮佸弬鏁�
+        Map hints  = new HashMap();
+        //璁剧疆UTF-8锛� 闃叉涓枃涔辩爜
+        hints .put(EncodeHintType.CHARACTER_SET, "UTF-8");
+        // 璁剧疆浜岀淮鐮佺殑瀹归敊鎬�
+        hints .put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
+        //鐣欑櫧 榛樿4
+        hints .put(EncodeHintType.MARGIN, 1);
+        // 鐮佺増鏈紝鍙栧�间负 1 鍒� 40 ,鏍规嵁浜岀淮鐮佸唴瀹瑰喅瀹氭渶浣庣増鏈�
+        //param.put(EncodeHintType.QR_VERSION, 3);
+        //鍒涘缓鐮佷綅鍥�
+        BitMatrix bitMatrix = new QRCodeWriter().encode(code, BarcodeFormat.QR_CODE, size, size, hints );
+
+        //灏嗙敓鎴愮爜浣嶅浘杞崲鎴怋ufferedImage
+        BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
+
+        int fontSize = 30 ;
+        //璁剧疆鐢诲竷鍐呰竟璺�
+        int padding = 5;
+        //鐢诲竷澶у皬
+        int combinedWidth = size + padding * 2 ;
+        int combinedHeight = size + padding * 2  + fontSize;
+
+        //鍒涘缓绌虹櫧BufferedImage
+        BufferedImage combined = new BufferedImage(combinedWidth, combinedHeight, BufferedImage.TYPE_INT_RGB);
+        //浠嶣ufferedImage瀵硅薄涓幏鍙栫敾甯冿紙Graphics2D锛夊璞�
+        Graphics2D graphics = combined.createGraphics();
+        //璁剧疆娓叉煋鎻愮ず涓哄惎鐢ㄦ枃鏈姉閿娇
+        graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        //榛樿寮�鍚粯鍥炬姉閿娇
+        //graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_DEFAULT);
+        //璁剧疆绌虹櫧鐢诲竷鏁翠綋鑳屾櫙棰滆壊
+        GraphicsUtils.drawBackground(graphics,0, 0, combinedWidth, combinedHeight,Color.WHITE);
+
+        int linepadding = padding - 1 ;
+        //缁樺埗鐭╁舰
+        GraphicsUtils.drawRectangle(graphics, linepadding, linepadding,
+                combinedWidth - linepadding * 2,
+                combinedHeight - linepadding * 2, Color.BLACK);
+
+        //浜岀淮鐮佹彃鍏ョ敾甯�
+        GraphicsUtils.drawImage(graphics, qrImage, padding, padding);
+
+        //缁樺埗澶撮儴瀛椾綋
+        Font titleFont = new Font("瀹嬩綋", Font.BOLD, fontSize);
+        GraphicsUtils.drawFont(graphics,titleFont,Color.BLUE);
+        FontMetrics fontMetrics = graphics.getFontMetrics();
+        int fontWidth = fontMetrics.stringWidth(name);
+        int xName = ((combinedWidth - fontWidth) / 2);
+        int yName = combinedHeight - padding - fontSize/2 ;
+       // int yName = combinedHeight - padding - fontWidth/2 ;
+        GraphicsUtils.drawText(graphics, name, xName, yName, titleFont, Color.BLUE);
+
+        graphics.dispose();
+
+        try {
+            ImageIO.write(combined, "jpg",new File(imgpath) );
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+}
diff --git a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/DyCode.java b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeConstant.java
similarity index 73%
rename from pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/DyCode.java
rename to pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeConstant.java
index ef7dcf1..6368073 100644
--- a/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/DyCode.java
+++ b/pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/util/QrCodeConstant.java
@@ -1,6 +1,6 @@
 package com.dy.pmsGlobal.util;
 
-public final class DyCode {
+public final class QrCodeConstant {
     /////////////////////////////////////////////
     //绫诲埆缂栫爜                                    //
     /////////////////////////////////////////////
@@ -20,4 +20,17 @@
     public static final String MarkWaste = "102006" ; //搴熷搧锛氳澶囩敓浜ц繃绋嬩腑鎴愪负搴熷搧锛屽疄涓哄簾寮冧簡璇ヨ澶囩紪鐮佸拰閮ㄥ垎閰嶄欢
     public static final String MarkLogout = "102007" ; //娉ㄩ攢锛氱敓浜т綔涓氫汉鍛樺湪鐢熶骇鍚庢敞閿�宸ョ珯缁戝畾
 
+    public static final int MarkQrCodeWidth = 300 ;
+    public static final int MarkQrCodeHeight = 300 ;
+
+    public static String[][] Marks(){
+        return new String[][]{{MarkOk, "纭畾"},
+                {MarkCancel, "鍙栨秷"},
+                {MarkRevoke, "鎾ら攢"},
+                {MarkUnqualified, "涓嶅悎鏍�"},
+                {MarkPreUnqualified, "涓婁綅涓嶅悎鏍�"},
+                {MarkWaste, "搴熷搧"},
+                {MarkLogout, "娉ㄩ攢"} } ;
+    }
+
 }
diff --git a/pms-parent/pms-global/src/main/resources/images/logo.png b/pms-parent/pms-global/src/main/resources/images/logo.png
new file mode 100644
index 0000000..d48c0ca
--- /dev/null
+++ b/pms-parent/pms-global/src/main/resources/images/logo.png
Binary files differ
diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/MarkCodeCtrl.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/MarkCodeCtrl.java
new file mode 100644
index 0000000..96c9e08
--- /dev/null
+++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/MarkCodeCtrl.java
@@ -0,0 +1,57 @@
+package com.dy.pmsBase.code;
+
+
+import cn.hutool.core.codec.Base64;
+import com.dy.common.util.QrCodeGenerator;
+import com.dy.common.webUtil.BaseResponse;
+import com.dy.common.webUtil.BaseResponseUtils;
+import com.dy.pmsGlobal.util.QrCodeConstant;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鐢熸垚鏍囪瘑绫讳簩缁寸爜
+ */
+@Slf4j
+@RestController
+@RequestMapping(path = "markCode")
+@SuppressWarnings("unchecked")//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked")
+public class MarkCodeCtrl {
+
+    /**
+     * 瀹㈡埛绔姹傚緱鍒伴粯璁ゅ瘑鐮�
+     * @return 榛樿瀵嗙爜
+     */
+    @GetMapping(path = "show")
+    public BaseResponse<List<ResultVo>> show() {
+        try{
+            List<ResultVo> list = new ArrayList<>() ;
+            URL logoUrl = MarkCodeCtrl.class.getResource("/images/logo.png") ;
+            String[][] marks = QrCodeConstant.Marks() ;
+            for(String[] mark : marks){
+                ResultVo vo = new ResultVo() ;
+                vo.code = mark[0] ;
+                vo.name = mark[1] ;
+                BufferedImage bufferedImage = QrCodeGenerator.toBufferedImage(QrCodeGenerator.createBitMatrix(mark[0], QrCodeConstant.MarkQrCodeWidth, QrCodeConstant.MarkQrCodeHeight));
+                if(logoUrl != null){
+                    bufferedImage = QrCodeGenerator.addQrCodeLogo(bufferedImage, new File(logoUrl.getFile()));
+                }
+                byte[] codes = QrCodeGenerator.bufferedImageToByteArray(bufferedImage, "JPG");
+                vo.imgBase64 = Base64.encode(codes);
+                list.add(vo) ;
+            }
+            return BaseResponseUtils.buildSuccess(list);
+        }catch (Exception e){
+            log.error("鐢熸垚鏍囪瘑绫讳簩缁寸爜鏃跺紓甯�", e);
+            return BaseResponseUtils.buildException(e.getMessage());
+        }
+    }
+}
diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/ResultVo.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/ResultVo.java
new file mode 100644
index 0000000..7185cd7
--- /dev/null
+++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/code/ResultVo.java
@@ -0,0 +1,10 @@
+package com.dy.pmsBase.code;
+
+import lombok.Data;
+
+@Data
+public class ResultVo {
+    public String code ; //缂栫爜
+    public String name ; //鍚嶇О
+    public String imgBase64 ; //浜岀淮鐮佸浘鐗嘼ase64缂栫爜
+}
diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogCtrl.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogCtrl.java
index e0be1b7..7747f30 100644
--- a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogCtrl.java
+++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogCtrl.java
@@ -4,7 +4,6 @@
 import com.dy.common.webUtil.BaseResponse;
 import com.dy.common.webUtil.BaseResponseUtils;
 import com.dy.common.webUtil.QueryResultVo;
-import com.dy.pmsGlobal.aop.LogSv;
 import com.dy.pmsGlobal.aop.Log;
 import com.dy.pmsGlobal.pojoBa.BaLog;
 import lombok.extern.slf4j.Slf4j;
@@ -19,6 +18,7 @@
 @RequestMapping(path = "log")
 @SuppressWarnings("unchecked")
 public class LogCtrl {
+
     private LogSv sv;
     @Autowired
     public void setSv(LogSv sv) {
diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogSv.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogSv.java
new file mode 100644
index 0000000..2ea768b
--- /dev/null
+++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/LogSv.java
@@ -0,0 +1,49 @@
+package com.dy.pmsBase.log;
+
+import com.dy.common.webUtil.QueryResultVo;
+import com.dy.pmsGlobal.daoBa.BaLogMapper;
+import com.dy.pmsGlobal.pojoBa.BaLog;
+import org.apache.dubbo.common.utils.PojoUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class LogSv {
+
+    @Autowired
+    private BaLogMapper dao;
+
+
+    /**
+     * 寰楀埌鏃ュ織
+     *
+     * @param id 鏃ュ織ID
+     * @return 瀹炰綋
+     */
+    public BaLog selectById(Long id) {
+        return dao.selectByPrimaryKey(id);
+    }
+
+
+    /**
+     * 鑾峰彇鏃ュ織鍒楄〃
+     */
+    public QueryResultVo<List<BaLog>> selectSome(QueryVo queryVo) {
+        Map<String, Object> params = (Map<String, Object>) PojoUtils.generalize(queryVo);
+
+        //鏌ヨ绗﹀悎鏉′欢鐨勮褰曟�绘暟
+        Long itemTotal = dao.selectSomeCount(params);
+
+        QueryResultVo<List<BaLog>> rsVo = new QueryResultVo<>(queryVo.pageSize, queryVo.pageCurr) ;
+        //璁$畻鍒嗛〉绛変俊鎭�
+        rsVo.calculateAndSet(itemTotal, params);
+
+        //鏌ヨ绗﹀悎鏉′欢鐨勮褰�
+        rsVo.obj = this.dao.selectSome(params) ;
+        return rsVo ;
+    }
+}
diff --git a/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/QueryVo.java b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/QueryVo.java
new file mode 100644
index 0000000..735b946
--- /dev/null
+++ b/pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/log/QueryVo.java
@@ -0,0 +1,16 @@
+package com.dy.pmsBase.log;
+
+
+import com.dy.common.webUtil.QueryConditionVo;
+import lombok.*;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ToString(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class QueryVo extends QueryConditionVo {
+    public String name;
+}
+

--
Gitblit v1.8.0