Browse Source

生成自定义二维码

master
yanyan 3 years ago
parent
commit
4a784986ea
  1. 15
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/scene/manage.html
  2. 11
      lib/EmergencyService/zdxtEmergencyKnowledgeService/pom.xml
  3. 12
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneManageController.java
  4. 2
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneManageService.java
  5. 52
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneManageServiceImpl.java
  6. 45
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/utils/QRCodeGeneratorUtil.java
  7. 1
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneManageMapper.xml

15
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/scene/manage.html

@ -209,12 +209,21 @@
function generateQRCode() { function generateQRCode() {
table.set(); table.set();
var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId); var rows = $.common.isEmpty(table.options.uniqueId) ? $.table.selectFirstColumns() : $.table.selectColumns(table.options.uniqueId);
if (rows.length == 0) { if (rows.length === 0) {
$.modal.alertWarning("请选择一条记录"); $.modal.alertWarning("请选择一条记录");
return; return;
} }
$.post(ctx + "small/scene/manage/generateQRCode/", {"guid": rows.join()}, function (req,status ) { if (rows.length > 1) {
$.modal.alertWarning("请选择一条记录");
return;
}
$.post(ctx + "small/scene/manage/createQrCode/", {"guid": rows.join()}, function (req,status ) {
if (req.success) {
$.table.refresh();
$.modal.alertSuccess("生成二维码成功");
}else{
$.modal.alertWarning(req.message);
}
}) })
} }

11
lib/EmergencyService/zdxtEmergencyKnowledgeService/pom.xml

@ -36,6 +36,17 @@
<version>1.0</version> <version>1.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- 二维码 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

12
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneManageController.java

@ -17,7 +17,6 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -72,10 +71,19 @@ public class SceneManageController extends BaseController {
*/ */
@PostMapping("/generateQRCode") @PostMapping("/generateQRCode")
@ResponseBody @ResponseBody
public ZDResponse generateQRCode(SceneManage sceneManage) throws Exception{ public ZDResponse generateQRCode(SceneManage sceneManage) throws Exception {
return sceneManageService.generateQRCode(sceneManage); return sceneManageService.generateQRCode(sceneManage);
} }
/**
* 生成动态二维码
*/
@PostMapping(value = "/createQrCode")
@ResponseBody
public ZDResponse createQrCode(SceneManage sceneManage) {
return sceneManageService.createQrCode(sceneManage);
}
/** /**
* 查看详情 * 查看详情
*/ */

2
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneManageService.java

@ -45,6 +45,8 @@ public interface ISceneManageService {
public ZDResponse generateQRCode(SceneManage sceneManage) throws Exception; public ZDResponse generateQRCode(SceneManage sceneManage) throws Exception;
public ZDResponse createQrCode(SceneManage sceneManage);
/** /**
* 新增【请填写功能名称】 * 新增【请填写功能名称】
* *

52
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneManageServiceImpl.java

@ -2,7 +2,6 @@ package com.zdxt.knowledge.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
@ -28,22 +27,18 @@ import com.zdxt.knowledge.domain.SceneManage;
import com.zdxt.knowledge.mapper.SceneManageMapper; import com.zdxt.knowledge.mapper.SceneManageMapper;
import com.zdxt.knowledge.service.ISceneManageService; import com.zdxt.knowledge.service.ISceneManageService;
import com.zdxt.knowledge.utils.ExcelUtil; import com.zdxt.knowledge.utils.ExcelUtil;
import com.zdxt.knowledge.utils.QRCodeGeneratorUtil;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.activation.MimetypesFileTypeMap; import java.io.File;
import javax.servlet.http.HttpServletResponse; import java.io.InputStream;
import java.io.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -90,7 +85,6 @@ public class SceneManageServiceImpl implements ISceneManageService {
} }
/** /**
* 查询列表 * 查询列表
* *
@ -101,6 +95,7 @@ public class SceneManageServiceImpl implements ISceneManageService {
public List<SceneManage> selectSceneManageListAll(SceneManage sceneManage) { public List<SceneManage> selectSceneManageListAll(SceneManage sceneManage) {
return sceneManageMapper.selectSceneManageListAll(sceneManage); return sceneManageMapper.selectSceneManageListAll(sceneManage);
} }
/** /**
* 查询【请填写功能名称】列表 * 查询【请填写功能名称】列表
* *
@ -119,13 +114,15 @@ public class SceneManageServiceImpl implements ISceneManageService {
public ZDResponse generateQRCode(SceneManage sceneManage) throws Exception { public ZDResponse generateQRCode(SceneManage sceneManage) throws Exception {
String accessToken = getAccessToken(); String accessToken = getAccessToken();
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + accessToken;
// 发送请求参数 // 发送请求参数
JSONObject paramJson = new JSONObject(); JSONObject paramJson = new JSONObject();
paramJson.set("page", "subpkg/role/role"); paramJson.set("path", "subpkg/role/role");
paramJson.set("check_path", false); //paramJson.set("check_path", false);
paramJson.set("width", 280); paramJson.set("width", 280);
//paramJson.set("auto_color", false);
//paramJson.set("is_hyaline", false);
//scene数据不能中文 //scene数据不能中文
paramJson.set("scene", sceneManage.getGuid()); paramJson.set("scene", sceneManage.getGuid());
//设置小程序码版本 //设置小程序码版本
@ -136,7 +133,7 @@ public class SceneManageServiceImpl implements ISceneManageService {
InputStream inputStream = HttpUtils.postInputStream(url, paramJson); InputStream inputStream = HttpUtils.postInputStream(url, paramJson);
//存入本地数据库 //存入本地数据库
File file = File.createTempFile("temp", ".png"); File file = File.createTempFile("temp", ".png");
FileUtils.copyInputStreamToFile(inputStream,file); FileUtils.copyInputStreamToFile(inputStream, file);
MultipartFile multipartFile = new LocalFileMultipartFile(file); MultipartFile multipartFile = new LocalFileMultipartFile(file);
String uploadPath = fileUploadApi.upload(multipartFile); String uploadPath = fileUploadApi.upload(multipartFile);
zdxtFileCommonApi.deleteZdxtFileByIds(sceneManage.getGuid() + "0000"); zdxtFileCommonApi.deleteZdxtFileByIds(sceneManage.getGuid() + "0000");
@ -145,12 +142,39 @@ public class SceneManageServiceImpl implements ISceneManageService {
sceneManage.setUrl(uploadPath); sceneManage.setUrl(uploadPath);
int result = sceneManageMapper.updateSceneManage(sceneManage); int result = sceneManageMapper.updateSceneManage(sceneManage);
file.deleteOnExit(); file.deleteOnExit();
if (result>0) { if (result > 0) {
return ZDResponse.success("生成二维码成功"); return ZDResponse.success("生成二维码成功");
} }
return ZDResponse.error("生成二维码失败"); return ZDResponse.error("生成二维码失败");
} }
@Override
public ZDResponse createQrCode(SceneManage sceneManage) {
try {
if (Objects.nonNull(sceneManage.getGuid())) {
//这个地方则是调用了工具类第二个方法
byte[] qrcode = QRCodeGeneratorUtil.getQRCodeImage(sceneManage.getGuid(), 350, 350);
//存入本地数据库
File file = File.createTempFile("temp", ".png");
FileUtils.writeByteArrayToFile(file, qrcode);
MultipartFile multipartFile = new LocalFileMultipartFile(file);
String uploadPath = fileUploadApi.upload(multipartFile);
zdxtFileCommonApi.deleteZdxtFileByIds(sceneManage.getGuid() + "0000");
zdxtFileCommonApi.insertZdxtFile(multipartFile, sceneManage.getGuid() + "0000", uploadPath);
sceneManage.setUpdateTime(DateUtils.getNowDate());
sceneManage.setUrl(uploadPath);
sceneManageMapper.updateSceneManage(sceneManage);
file.deleteOnExit();
} else {
return ZDResponse.error("二维码参数不能为空");
}
} catch (Exception e) {
e.printStackTrace();
}
return ZDResponse.success("生成二维码成功");
}
public String getAccessToken() { public String getAccessToken() {
String appid = APPID; String appid = APPID;
String secret = SECRET; String secret = SECRET;

45
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/utils/QRCodeGeneratorUtil.java

@ -0,0 +1,45 @@
package com.zdxt.knowledge.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
public class QRCodeGeneratorUtil {
/* 高度——height,
宽度——width,
二维码内容——text(url需要自动跳转前面加上https://)
背景图片的路径——filePath*/
public static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
Path path = FileSystems.getDefault().getPath(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
}
/* 高度——height,
宽度——width,
二维码内容——text(url需要自动跳转前面加上https://)
*/
public static byte[] getQRCodeImage(String text, int width, int height) throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "JPG", pngOutputStream);
byte[] pngData = pngOutputStream.toByteArray();
return pngData;
}
}

1
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneManageMapper.xml

@ -147,6 +147,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
inner join zdxt_file as zd inner join zdxt_file as zd
on cu.guid = zd.business_id on cu.guid = zd.business_id
<where> <where>
<if test="guid != null and guid != ''">and cu.guid = #{guid}</if>
<if test="name != null and name != ''"> and cu.name like concat('%', #{name}, '%')</if> <if test="name != null and name != ''"> and cu.name like concat('%', #{name}, '%')</if>
<if test="status != null "> and cu.status = #{status}</if> <if test="status != null "> and cu.status = #{status}</if>
</where> </where>

Loading…
Cancel
Save