forked from rongchao/epmet-cloud-rizhao
				
			
				 24 changed files with 464 additions and 69 deletions
			
			
		| @ -0,0 +1,177 @@ | |||||
|  | package com.epmet.commons.tools.utils; | ||||
|  | 
 | ||||
|  | /** | ||||
|  |  * desc: | ||||
|  |  * | ||||
|  |  * @author: LiuJanJun | ||||
|  |  * @date: 2022/3/18 11:57 上午 | ||||
|  |  * @version: 1.0 | ||||
|  |  */ | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | import com.google.zxing.BarcodeFormat; | ||||
|  | import com.google.zxing.EncodeHintType; | ||||
|  | import com.google.zxing.MultiFormatWriter; | ||||
|  | import com.google.zxing.WriterException; | ||||
|  | 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.CharacterSetECI; | ||||
|  | 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.HashMap; | ||||
|  | 
 | ||||
|  | /** | ||||
|  |  * Author  程鹏 | ||||
|  |  * Date: 2021/08/27 16:01 | ||||
|  |  * Description:二维码生成工具类 | ||||
|  |  */ | ||||
|  | public class BarcodeUtils { | ||||
|  |     /** | ||||
|  |      * 二维码颜色 默认是黑色 | ||||
|  |      */ | ||||
|  |     private static final Color QRCOLOR = Color.black; | ||||
|  |     /** | ||||
|  |      * 背景颜色 | ||||
|  |      */ | ||||
|  |     private static final Color BGWHITE = Color.white; | ||||
|  |     public static final int WIDTH = 360; | ||||
|  |     public static final int HEIGHT = 512; | ||||
|  |     public static final int MARGIN = 2; | ||||
|  |     public static final int FONTSIZE = 20; | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * // 二维码生成
 | ||||
|  |      * | ||||
|  |      * @param contents 说明 | ||||
|  |      * @return BufferedImage | ||||
|  |      * @throws Exception | ||||
|  |      */ | ||||
|  |     public static BufferedImage drawQRImage(String pressText, String contents) throws Exception { | ||||
|  |         BufferedImage qRImage = null; | ||||
|  |         if (contents == null || "".equals(contents)) { | ||||
|  |             throw new Exception("content说明不能为空"); | ||||
|  |         } | ||||
|  |         // 二维码参数设置
 | ||||
|  |         HashMap<EncodeHintType, Object> hints = new HashMap<>(); | ||||
|  |         hints.put(EncodeHintType.CHARACTER_SET, CharacterSetECI.UTF8); // 编码设置
 | ||||
|  |         hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 安全等级,最高h
 | ||||
|  |         hints.put(EncodeHintType.MARGIN, MARGIN); // 设置margin=0-10
 | ||||
|  | 
 | ||||
|  |         // 二维码图片的生成
 | ||||
|  |         BarcodeFormat format = BarcodeFormat.QR_CODE; | ||||
|  |         // 创建矩阵容器
 | ||||
|  |         BitMatrix matrix = null; | ||||
|  |         try { | ||||
|  |             matrix = new MultiFormatWriter().encode(contents, format, WIDTH, HEIGHT, hints); | ||||
|  |         } catch (WriterException e) { | ||||
|  |             e.printStackTrace(); | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         // 设置矩阵转为图片的参数
 | ||||
|  |         MatrixToImageConfig toImageConfig = new MatrixToImageConfig(QRCOLOR.getRGB(), BGWHITE.getRGB()); | ||||
|  | 
 | ||||
|  |         // 矩阵转换图像
 | ||||
|  |         qRImage = MatrixToImageWriter.toBufferedImage(matrix, toImageConfig); | ||||
|  |         return pressText(pressText, qRImage); | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * @param pressText 二维码下方插入文字 | ||||
|  |      * @param image     需要添加文字的图片 | ||||
|  |      * @为图片添加文字 | ||||
|  |      */ | ||||
|  |     private static BufferedImage pressText(String pressText, BufferedImage image) throws Exception { | ||||
|  | 
 | ||||
|  |         BufferedImage outImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); | ||||
|  |         //计算文字开始的位置
 | ||||
|  |         //x开始的位置:(图片宽度-字体大小*字的个数)/2
 | ||||
|  |         int startX = (WIDTH - (FONTSIZE * pressText.length())) / 2; | ||||
|  |         //y开始的位置:图片高度-(图片高度-图片宽度)/2
 | ||||
|  |         int startY = HEIGHT - (HEIGHT - WIDTH) / 2; | ||||
|  | 
 | ||||
|  |         int imageW = outImage.getWidth(); | ||||
|  |         int imageH = outImage.getHeight(); | ||||
|  |         Graphics2D g = outImage.createGraphics(); | ||||
|  |         g.drawImage(image, 0, 0, imageW, imageH, null); | ||||
|  |         g.setColor(QRCOLOR); | ||||
|  |         g.setFont(new Font("微软雅黑", Font.BOLD, FONTSIZE)); | ||||
|  |         g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); | ||||
|  |         g.setBackground(Color.white); | ||||
|  | //        获取文字数量  按照字节展示
 | ||||
|  |         int size = pressText.getBytes("GBK").length; | ||||
|  | //        获取一行最多能容纳多少文字   按照文字字节展示
 | ||||
|  |         int maxSize = (WIDTH / FONTSIZE - 2) * 2; | ||||
|  |         if (size > maxSize) { | ||||
|  |             int v = size % maxSize; | ||||
|  |             for (int a = 0; a < (size / maxSize); a++) { | ||||
|  |                 String s = outStringByByte(pressText, maxSize); | ||||
|  |                 g.drawString(s, (WIDTH - (FONTSIZE * (WIDTH / FONTSIZE - 2))) / 2, startY); | ||||
|  |                 pressText = pressText.substring(s.length(), pressText.length()); | ||||
|  |                 startY = startY + 30; | ||||
|  |             } | ||||
|  |             if (v != 0) { | ||||
|  |                 g.drawString(pressText, (WIDTH - (FONTSIZE * v)) / 2, startY); | ||||
|  |             } | ||||
|  |         } else { | ||||
|  |             g.drawString(pressText, (WIDTH - ((pressText.getBytes("GBK").length) / 2) * FONTSIZE) / 2, startY); | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         g.dispose(); | ||||
|  |         return outImage; | ||||
|  |     } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 保存二维码图片到本地 | ||||
|  |      * | ||||
|  |      * @param contents | ||||
|  |      * @throws Exception | ||||
|  |      */ | ||||
|  |     public static void createImg(String pressText, String contents, String filename, String filePath) throws Exception { | ||||
|  |         BufferedImage qRImageWithLogo = drawQRImage(pressText, contents); | ||||
|  |         // 写入返回
 | ||||
|  |         ByteArrayOutputStream baos = new ByteArrayOutputStream(); | ||||
|  |         ImageIO.write(qRImageWithLogo, "jpg", baos); | ||||
|  |         //图片类型
 | ||||
|  |         String imageType = "jpg"; | ||||
|  |         //生成二维码存放文件
 | ||||
|  |         File file = new File(filePath + filename + ".jpg"); | ||||
|  |         if (!file.exists()) { | ||||
|  |             file.mkdirs(); | ||||
|  |         } | ||||
|  |         ImageIO.write(qRImageWithLogo, imageType, file); | ||||
|  |         baos.close(); | ||||
|  |     } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |     private static String outStringByByte(String str, int len) throws IOException { | ||||
|  |         byte[] btf = str.getBytes("gbk"); | ||||
|  |         int count = 0; | ||||
|  | 
 | ||||
|  |         for (int j = len - 1; j >= 0; j--) { | ||||
|  |             if (btf[j] < 0) { | ||||
|  |                 count++; | ||||
|  |             } else { | ||||
|  |                 break; | ||||
|  |             } | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         if (count % 2 == 0) { | ||||
|  |             return new String(btf, 0, len, "gbk"); | ||||
|  |         } else { | ||||
|  |             return new String(btf, 0, len - 1, "gbk"); | ||||
|  |         } | ||||
|  | 
 | ||||
|  |     } | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | } | ||||
|  | 
 | ||||
| @ -0,0 +1,16 @@ | |||||
|  | package com.epmet.dao; | ||||
|  | 
 | ||||
|  | import com.epmet.commons.mybatis.dao.BaseDao; | ||||
|  | import com.epmet.entity.UserRegGridChangeRecEntity; | ||||
|  | import org.apache.ibatis.annotations.Mapper; | ||||
|  | 
 | ||||
|  | /** | ||||
|  |  * 用户注册网格变更记录表 | ||||
|  |  * | ||||
|  |  * @author generator generator@elink-cn.com | ||||
|  |  * @since v1.0.0 2022-03-17 | ||||
|  |  */ | ||||
|  | @Mapper | ||||
|  | public interface UserRegGridChangeRecDao extends BaseDao<UserRegGridChangeRecEntity> { | ||||
|  | 	 | ||||
|  | } | ||||
| @ -0,0 +1,41 @@ | |||||
|  | package com.epmet.entity; | ||||
|  | 
 | ||||
|  | import com.baomidou.mybatisplus.annotation.TableName; | ||||
|  | import com.epmet.commons.mybatis.entity.BaseEpmetEntity; | ||||
|  | import lombok.Data; | ||||
|  | import lombok.EqualsAndHashCode; | ||||
|  | 
 | ||||
|  | /** | ||||
|  |  * 用户注册网格变更记录表 | ||||
|  |  * | ||||
|  |  * @author generator generator@elink-cn.com | ||||
|  |  * @since v1.0.0 2022-03-17 | ||||
|  |  */ | ||||
|  | @Data | ||||
|  | @EqualsAndHashCode(callSuper=false) | ||||
|  | @TableName("user_reg_grid_change_rec") | ||||
|  | public class UserRegGridChangeRecEntity extends BaseEpmetEntity { | ||||
|  | 
 | ||||
|  | 	private static final long serialVersionUID = 1L; | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 客户id | ||||
|  |      */ | ||||
|  | 	private String customerId; | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 居民端用户id | ||||
|  |      */ | ||||
|  | 	private String userId; | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 原始网格id | ||||
|  |      */ | ||||
|  | 	private String originGridId; | ||||
|  | 
 | ||||
|  |     /** | ||||
|  |      * 当前所选择的注册网格 | ||||
|  |      */ | ||||
|  | 	private String gridId; | ||||
|  | 
 | ||||
|  | } | ||||
| @ -0,0 +1,14 @@ | |||||
|  | CREATE TABLE `user_reg_grid_change_rec` ( | ||||
|  |   `ID` varchar(64) NOT NULL COMMENT '主键', | ||||
|  |   `CUSTOMER_ID` varchar(64) NOT NULL COMMENT '客户id', | ||||
|  |   `USER_ID` varchar(64) NOT NULL COMMENT '居民端用户id', | ||||
|  |   `ORIGIN_GRID_ID` varchar(64) NOT NULL COMMENT '原始网格id', | ||||
|  |   `GRID_ID` varchar(64) NOT NULL COMMENT '当前所选择的注册网格', | ||||
|  |   `DEL_FLAG` varchar(1) NOT NULL DEFAULT '0' COMMENT '删除标识 1删除;0未删除', | ||||
|  |   `REVISION` int(11) NOT NULL COMMENT '乐观锁', | ||||
|  |   `CREATED_BY` varchar(32) NOT NULL COMMENT '创建人', | ||||
|  |   `CREATED_TIME` datetime NOT NULL COMMENT '创建时间', | ||||
|  |   `UPDATED_BY` varchar(32) NOT NULL COMMENT '更新人', | ||||
|  |   `UPDATED_TIME` datetime NOT NULL COMMENT '更新时间', | ||||
|  |   PRIMARY KEY (`ID`) | ||||
|  | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户注册网格变更记录表'; | ||||
| @ -0,0 +1,8 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||
|  | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
|  | 
 | ||||
|  | <mapper namespace="com.epmet.dao.UserRegGridChangeRecDao"> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | </mapper> | ||||
					Loading…
					
					
				
		Reference in new issue