src/main/java/com/product/administration/controller/ConferenceManagerController.java
@@ -3,6 +3,8 @@ import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSONObject; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.product.administration.config.CmnConst; import com.product.administration.config.SystemCode; import com.product.administration.service.ConferenceManagerService; @@ -23,7 +25,10 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -486,12 +491,53 @@ } /** * 会议管理签到二维码 * @param request * @param response * @throws IOException * @throws WriterException */ @PostMapping("/get_QrCode/{version}") @ApiVersion(1) public String getQrCode(HttpServletRequest request) throws IOException, WriterException { public void getQrCode(HttpServletRequest request, HttpServletResponse response) throws IOException, WriterException { //获取参数 FieldSetEntity fse = null; conferenceManagerService.getQrCode(fse); return OK(); Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA); if (bean != null) { RequestParameterEntity reqp = (RequestParameterEntity) bean; fse = reqp.getFormData(); //判断参数是否为空 if (bean == null || fse == null) { this.error(com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getValue(), com.product.admin.config.SystemCode.SYSTEM_FORM_NODATA.getText()); } String uuid = fse.getString("uuid"); if(!StringUtils.isEmpty(uuid)){ // 设置响应流信息 response.setContentType("image/jpg"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); OutputStream stream = response.getOutputStream(); //后端跳转地址 // String content = ("http://www.baidu.com"); JSONObject jsonData = new JSONObject(); jsonData.put("uuid",uuid); jsonData.put("date",new Date()); //jsonData.put("url",content); //获取一个二维码图片 BitMatrix bitMatrix = conferenceManagerService.getQrCode(jsonData.toString()); //以流的形式输出到前端 MatrixToImageWriter.writeToStream(bitMatrix , "jpg" , stream); } } } src/main/java/com/product/administration/service/ConferenceManagerService.java
@@ -7,6 +7,7 @@ import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.product.administration.config.CmnConst; import com.product.administration.config.SystemCode; import com.product.administration.service.ide.IConferenceManagerService; @@ -15,12 +16,14 @@ import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.entity.RequestParameterEntity; import com.product.core.exception.BaseException; import com.product.core.permission.PermissionService; import com.product.core.service.support.AbstractBaseService; import com.product.core.service.support.QueryFilterService; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.core.transfer.Transactional; import com.product.core.util.QuickResponUtil; import com.product.core.websocket.service.WebsocketMesssageServiceThread; import com.product.module.sys.entity.SystemUser; import com.product.util.BaseUtil; @@ -400,47 +403,31 @@ } @Override public String getQrCode(FieldSetEntity fse) throws BaseException, WriterException, IOException { String uuid="96f161b4-6360-40ba-8dc1-72bb39d56be4"; int BLACK = 0xFF000000; int WHITE = 0xFFFFFFFF; Date date = new Date(); String text = "http://127.0.0.1:9998/lx/api/conference/get_QrCode_Info/v1?uuid=" + uuid+"&date="+date; String path = "D:/QRCode"; // 图片生成的位置 int width = 400; int height = 400; // 二维码图片格式 String format = "jpg"; // 设置编码,防止中文乱码 Hashtable<EncodeHintType, Object> ht = new Hashtable<EncodeHintType, Object>(); ht.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置二维码参数(编码内容,编码类型,图片宽度,图片高度,格式) BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, ht); // 生成二维码(定义二维码输出服务器路径) File outputFile = new File(path); if (!outputFile.exists()) { // 创建文件夹 outputFile.mkdir(); }else { outputFile.delete(); outputFile.mkdir(); public BitMatrix getQrCode(String content) throws BaseException, WriterException, IOException { //二维码的宽高 int width = 200; int height = 200; //其他参数,如字符集编码 Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); //容错级别为H hints.put(EncodeHintType.ERROR_CORRECTION , ErrorCorrectionLevel.H); //白边的宽度,可取0~4 hints.put(EncodeHintType.MARGIN , 0); BitMatrix bitMatrix = null; try { //生成矩阵,因为我的业务场景传来的是编码之后的URL,所以先解码 bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints); } catch (WriterException e) { e.printStackTrace(); } int b_width = bitMatrix.getWidth(); int b_height = bitMatrix.getHeight(); // 建立图像缓冲器 BufferedImage image = new BufferedImage(b_width, b_height, BufferedImage.TYPE_3BYTE_BGR); for (int x = 0; x < b_width; x++) { for (int y = 0; y < b_height; y++) { image.setRGB(x, y, bitMatrix.get(x, y) ? BLACK : WHITE); } } // 生成二维码 ImageIO.write(image, format, new File(path + "/code." + format)); // 二维码的名称 // code.jpg return path + "/code." + format; return bitMatrix; } src/main/java/com/product/administration/service/ide/IConferenceManagerService.java
@@ -1,6 +1,7 @@ package com.product.administration.service.ide; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.exception.BaseException; @@ -41,7 +42,7 @@ HashMap saveOrUpdateMeetingInfo(FieldSetEntity fse)throws BaseException; String getQrCode(FieldSetEntity fse) throws BaseException, WriterException, IOException; BitMatrix getQrCode(String content) throws BaseException, WriterException, IOException;