diff --git a/boot-service/pom.xml b/boot-service/pom.xml index 2698e50..8b155c3 100644 --- a/boot-service/pom.xml +++ b/boot-service/pom.xml @@ -55,6 +55,17 @@ jedis 2.7.3 + + + com.google.zxing + core + ${zxing.version} + + + com.google.zxing + javase + ${zxing.version} + javax.servlet diff --git a/boot-service/src/main/java/com/xwbing/entity/Trace.java b/boot-service/src/main/java/com/xwbing/entity/ExpressTrace.java similarity index 89% rename from boot-service/src/main/java/com/xwbing/entity/Trace.java rename to boot-service/src/main/java/com/xwbing/entity/ExpressTrace.java index 0bbba12..acb66a1 100644 --- a/boot-service/src/main/java/com/xwbing/entity/Trace.java +++ b/boot-service/src/main/java/com/xwbing/entity/ExpressTrace.java @@ -9,7 +9,7 @@ import lombok.Data; * 说明: 快递追踪信息 */ @Data -public class Trace { +public class ExpressTrace { private String AcceptTime; private String AcceptStation; } diff --git a/boot-service/src/main/java/com/xwbing/entity/vo/ExpressInfoVo.java b/boot-service/src/main/java/com/xwbing/entity/vo/ExpressInfoVo.java index 2ff57c1..9cdf466 100644 --- a/boot-service/src/main/java/com/xwbing/entity/vo/ExpressInfoVo.java +++ b/boot-service/src/main/java/com/xwbing/entity/vo/ExpressInfoVo.java @@ -1,6 +1,6 @@ package com.xwbing.entity.vo; -import com.xwbing.entity.Trace; +import com.xwbing.entity.ExpressTrace; import lombok.Data; import java.util.List; @@ -29,7 +29,7 @@ public class ExpressInfoVo { /** * 物流信息 */ - private List traces; + private List expressTraces; /** * 描述 */ diff --git a/boot-service/src/main/java/com/xwbing/service/ExpressDeliveryService.java b/boot-service/src/main/java/com/xwbing/service/ExpressDeliveryService.java index 1d76b7e..7eb8fb6 100644 --- a/boot-service/src/main/java/com/xwbing/service/ExpressDeliveryService.java +++ b/boot-service/src/main/java/com/xwbing/service/ExpressDeliveryService.java @@ -70,7 +70,7 @@ public class ExpressDeliveryService { String requestData = "{'ShipperCode':'" + info.getShipperCode() + "','LogisticCode':'" + info.getLogisticCode() + "'}"; Map params = new HashMap<>(); try { - params.put("RequestData", urlEncoder(requestData, "UTF-8")); + params.put("RequestData", KdniaoUtil.urlEncoder(requestData, "UTF-8")); params.put("EBusinessID", EBusinessID); params.put("RequestType", "1002"); String dataSign = KdniaoUtil.encrypt(requestData, appKey, "UTF-8"); @@ -79,6 +79,7 @@ public class ExpressDeliveryService { } catch (Exception e) { logger.error("快递查询出错:{}", e.getMessage()); throw new BusinessException("快递查询出错"); + } // 返回物流信息 // status: 0|null 无信息 1已取件 2在途中 3已签收 4问题件 5待取件 6待派件 8已发货 9未发货 @@ -93,7 +94,7 @@ public class ExpressDeliveryService { int statusValue = Integer.valueOf(status); CommonEnum.ExpressStatusEnum expressStatus = Arrays.stream(CommonEnum.ExpressStatusEnum.values()).filter(obj -> obj.getValue() == statusValue).findFirst().get(); infoVo.setDescribe(expressStatus.getName()); - // TODO: 2017/11/17 根据公司业务处理返回的信息...... + // TODO: 2017/11/16 根据公司业务处理返回的信息...... } return infoVo; } diff --git a/boot-service/src/main/java/com/xwbing/service/QRcodeZipService.java b/boot-service/src/main/java/com/xwbing/service/QRcodeZipService.java new file mode 100644 index 0000000..2f4737f --- /dev/null +++ b/boot-service/src/main/java/com/xwbing/service/QRcodeZipService.java @@ -0,0 +1,128 @@ +package com.xwbing.service; + +import com.xwbing.exception.BusinessException; +import com.xwbing.util.QRCodeUtils; +import com.xwbing.util.RestMessage; +import com.xwbing.util.ZipUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.ClassPathResource; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 项目名称: boot-module-demo + * 创建时间: 2017/11/17 13:36 + * 作者: xiangwb + * 说明: + */ +@Service +public class QRcodeZipService { + private final Logger logger = LoggerFactory.getLogger(QRcodeZipService.class); + + /** + * 生成默认长度的二维码 + * + * @param name 图片名 + * @param text 二维码内容 + * @return + */ + public RestMessage createQRCode(String name, String text) { + RestMessage result = new RestMessage(); + String path = getPath(); + File output = new File(path + File.separator + name + ".png"); + QRCodeUtils.createCode(text, output); + result.setSuccess(true); + result.setMessage("生成二维码成功"); + return result; + } + + /** + * 解析二维码 + * + * @param file + * @return + */ + public RestMessage decode(File file) { + RestMessage result = new RestMessage(); + try { + String decode = QRCodeUtils.decode(file); + result.setData(decode); + result.setSuccess(true); + result.setMessage("解析二维码成功"); + return result; + } catch (Exception e) { + logger.error("解析二维码失败"); + throw new BusinessException("解析二维码失败"); + } + } + + /** + * 获取图片zip + * + * @return + */ + public RestMessage batchGetImage(HttpServletResponse response, String[] names, String fileName) { + List files = new ArrayList<>(); + if (names.length == 0) + throw new BusinessException("请选择要导出的图片"); + Arrays.stream(names).forEach(name -> { + File file = getFile(name); + if (file != null && file.length() > 0) { + files.add(file); + } + }); + return zipFile(response, files, fileName); + } + + /** + * 根据文件名获取图片 + * + * @param name + * @return + */ + private File getFile(String name) { + String path = getPath(); + File output = new File(path + File.separator + name + ".png"); + if (output.exists()) { + return output; + } + return null; + } + + /** + * 获取pic路径 + * + * @return + */ + private String getPath() { + ClassPathResource pic = new ClassPathResource("file"); + String absolutePath; + try { + absolutePath = pic.getFile().getAbsolutePath(); + } catch (IOException e) { + throw new BusinessException("获取图片路径错误"); + } + return absolutePath; + } + + /** + * 导出文件 + * + * @return + */ + private RestMessage zipFile(HttpServletResponse response, List files, String fileName) { + RestMessage restMessage = new RestMessage(); + String path = getPath(); + ZipUtil.zipFile(response, files, path, fileName); + restMessage.setSuccess(true); + restMessage.setMessage("导出zip文件成功"); + return restMessage; + } +} diff --git a/boot-service/src/main/java/com/xwbing/util/JSONUtil.java b/boot-service/src/main/java/com/xwbing/util/JSONUtil.java index dfa2917..5f84397 100644 --- a/boot-service/src/main/java/com/xwbing/util/JSONUtil.java +++ b/boot-service/src/main/java/com/xwbing/util/JSONUtil.java @@ -24,6 +24,8 @@ public class JSONUtil { public static Object beanToMap(Object obj) { if (obj == null) return null; + if (obj instanceof String) + return obj; if (obj instanceof List) { List list = (List) obj; ArrayList result = new ArrayList<>(); diff --git a/boot-service/src/main/java/com/xwbing/util/KdniaoUtil.java b/boot-service/src/main/java/com/xwbing/util/KdniaoUtil.java index 22856b6..323000f 100644 --- a/boot-service/src/main/java/com/xwbing/util/KdniaoUtil.java +++ b/boot-service/src/main/java/com/xwbing/util/KdniaoUtil.java @@ -28,8 +28,7 @@ public class KdniaoUtil { StringBuilder result = new StringBuilder(); try { URL realUrl = new URL(url); - HttpURLConnection conn = (HttpURLConnection) realUrl - .openConnection(); + HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection(); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); @@ -38,10 +37,8 @@ public class KdniaoUtil { // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); - conn.setRequestProperty("user-agent", - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); - conn.setRequestProperty("Content-Type", - "application/x-www-form-urlencoded"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.connect(); // 获取URLConnection对象对应的输出流 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); @@ -63,8 +60,7 @@ public class KdniaoUtil { // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 - in = new BufferedReader(new InputStreamReader( - conn.getInputStream(), "UTF-8")); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); diff --git a/boot-service/src/main/java/com/xwbing/util/QRCodeUtils.java b/boot-service/src/main/java/com/xwbing/util/QRCodeUtils.java new file mode 100644 index 0000000..80ec9ee --- /dev/null +++ b/boot-service/src/main/java/com/xwbing/util/QRCodeUtils.java @@ -0,0 +1,285 @@ +package com.xwbing.util; + +import com.google.zxing.*; +import com.google.zxing.client.j2se.BufferedImageLuminanceSource; +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 org.apache.commons.io.output.ByteArrayOutputStream; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.FileSystems; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +/** + * 项目名称: boot-module-demo + * 创建时间: 2017/11/17 11:43 + * 作者: xiangwb + * 说明: 二维码工具类 + */ +public class QRCodeUtils { + private static QRCodeUtils.Internal internal = new QRCodeUtils.Internal(); + + /*** + * 生成默认尺寸不带logo的二维码 + * @param text 二维码内容 + * @param output 图片文件 + */ + public static void createCode(String text, File output) { + createCode(text, 200, 200, output); + } + + /** + * 自定义尺寸不带logo的二维码 + * + * @param text 二维码内容 + * @param width 宽 + * @param height 高 + * @param output 图片文件 + */ + public static void createCode(String text, int width, int height, File output) { + try { + System.out.println(output.getParentFile().getAbsolutePath()); + internal._codeHeight = height; + internal._codeWidth = width; + internal._output = output; + internal.output(output, internal.createCode(text)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 生成默认尺寸带logo的二维码 + * + * @param url 二维码 + * @param logoImg + * @param text + */ + public static void createCodeLogo(String url, InputStream logoImg, String text) { + createCodeLogo(url, 200, 200, logoImg, text, 14); + } + + /** + * 生成自定义尺寸带logo的二维码 + * + * @param text + * @param width + * @param height + * @param logoImg + */ + public static InputStream createCodeLogo(String url, int width, int height, InputStream logoImg, String text, int size) { + try { + internal._codeHeight = height; + internal._codeWidth = width; + internal._logoImg = logoImg; + internal._text = text; + internal._fontSize = size; + BitMatrix bitMatrix = internal.createCode(url); + return internal.addMaterial(bitMatrix); + //internal.output(output, bitMatrix); + } catch (WriterException e) { + e.printStackTrace(); + return null; + } + + } + + /** + * 解析二维码图片 + * + * @param file + * @return + * @throws Exception + */ + public static String decode(File file) throws Exception { + if (file == null) { + return null; + } + MultiFormatReader formatReader = new MultiFormatReader(); + BufferedImage image = ImageIO.read(file); + BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image); + BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); + Hashtable hints = new Hashtable<>(); + hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); + Result result = formatReader.decode(binaryBitmap, hints); + return result.getText(); + + } + + private static class Internal { + // 二维码大小 + private int _codeWidth; + private int _codeHeight; + //二维码导出位置 + private File _output; + /** + * logo文件流,二维码文本 + */ + private InputStream _logoImg; + private String _text; + private int _fontSize; + //logo大小 + private int _logoWidth; + private int _logoHeight; + //logo x,y坐标 + private int _logoX; + private int _logoY; + //文字x,y坐标 + private int _textX; + private int _textY; + //图像类型 + private final String _format = "png"; + + private BitMatrix createCode(String url) throws WriterException { + Map hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); + BitMatrix encode = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, _codeWidth, _codeHeight, hints);// 生成矩阵 + return encode; + } + + /*** + * 输出生成的二维码 + * @param output + * @param bitMatrix + * @throws IOException + */ + private void output(File output, BitMatrix bitMatrix) throws IOException { + Path path = FileSystems.getDefault().getPath(output.getParentFile().getAbsolutePath(), output.getName()); + MatrixToImageWriter.writeToPath(bitMatrix, _format, path);// 输出图像 + } + + /*** + * 输出带特殊需求的二维码 + * @throws IOException + */ + private void output(BufferedImage image) throws IOException { + if (!ImageIO.write(image, _format, _output)) { + throw new IOException("Could not write an image of format " + _format + " to " + _output); + } + } + + /** + * 在二维码基础上添加需求 + * + * @param bitMatrix + */ + private InputStream addMaterial(BitMatrix bitMatrix) { + try { + BufferedImage image = toBufferedImage(bitMatrix); + //计算高宽 + computeWidthHeight(); + //定位logo + image = position_logo(image); + //定位文字 + image = position_text(image); + //生成二维码 + //output(image); + //转InputStream + return bufferImage_to_InputStream(image); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + private BufferedImage position_text(BufferedImage image) { + Graphics2D gh = image.createGraphics(); + gh.setColor(Color.black); + //如果linux上没有该字体的话,会出现类似乱码的情况 + //Font.SANS_SERIF + gh.setFont(new Font("Microsoft YaHei", Font.BOLD, _fontSize)); + gh.setComposite(AlphaComposite.getInstance( + AlphaComposite.SRC_IN, 1.0f)); + gh.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + gh.drawString(_text, 20, _fontSize); + return image; + } + + /** + * 定位logo + */ + private BufferedImage position_logo(BufferedImage image) throws IOException { + Graphics2D gs = image.createGraphics(); + //载入logo + BufferedImage logo = changeWidthHeight(); + gs.drawImage(logo, _logoX, _logoY, null); + gs.dispose(); + logo.flush(); + return image; + } + + /** + * 改变图片大小 + * + * @return + * @throws IOException + */ + private BufferedImage changeWidthHeight() throws IOException { + BufferedImage img = ImageIO.read(_logoImg); + BufferedImage newLogo = new BufferedImage(_logoWidth, _logoHeight, BufferedImage.TYPE_INT_BGR); + Graphics graphics = newLogo.createGraphics(); + graphics.drawImage(img, 0, 0, _logoWidth, _logoHeight, null); + graphics.setColor(Color.white); + graphics.drawRect(0, 0, _logoWidth - 1, _logoHeight - 1); + graphics.drawRect(1, 1, _logoWidth - 1, _logoHeight - 1); + graphics.drawRect(0, 0, _logoWidth - 2, _logoHeight - 2); + img.flush(); + return newLogo; + } + + private void computeWidthHeight() { + //计算logo大小 + _logoHeight = _codeHeight * 2 / 10; + _logoWidth = _codeWidth * 2 / 10; + //计算logo坐标 + _logoX = (_codeWidth - _logoWidth) / 2; + _logoY = (_codeHeight - _logoHeight) / 2; + } + + + /** + * BitMatrix转BufferedImage + * + * @param matrix + * @return + */ + private BufferedImage toBufferedImage(BitMatrix matrix) { + BufferedImage image = new BufferedImage(matrix.getWidth(), matrix.getHeight(), BufferedImage.TYPE_INT_RGB); + for (int x = 0; x < matrix.getWidth(); x++) { + for (int y = 0; y < matrix.getHeight(); y++) { + image.setRGB(x, y, matrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB()); + } + } + return image; + } + + private InputStream bufferImage_to_InputStream(BufferedImage image) throws IOException { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + ImageIO.write(image, _format, os); + return new ByteArrayInputStream(os.toByteArray()); + } + } + + public static void main(String[] args) throws Exception { +// String tomcatHome = System.getProperty("catalina.home"); +// String name="QRcode"; +// File output=new File(tomcatHome+File.separator+"file"+File.separator+name+".png"); + File output = new File("C:/Users/10232/Desktop/xwbing.png"); + createCode("xwbing", 500, 500, output);//text即QRcode + String decode = decode(output); + } +} + diff --git a/boot-service/src/main/java/com/xwbing/util/ZipUtil.java b/boot-service/src/main/java/com/xwbing/util/ZipUtil.java new file mode 100644 index 0000000..b54895f --- /dev/null +++ b/boot-service/src/main/java/com/xwbing/util/ZipUtil.java @@ -0,0 +1,95 @@ +package com.xwbing.util; + +import com.xwbing.exception.BusinessException; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * 项目名称: boot-module-demo + * 创建时间: 2017/11/17 14:24 + * 作者: xiangwb + * 说明: + */ +public class ZipUtil { + /** + * @param response 响应 + * @param files 所有文件 + * @param fileName 文件名 + */ + public static void zipFile(HttpServletResponse response, List files, String path, String fileName) { + try { + //classpath下有file文件夹 + File zipFile = new File(path + File.separator + fileName + ".zip"); + if (!zipFile.exists()) { + zipFile.createNewFile(); + } + FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(fos)); + FileInputStream fis; + BufferedInputStream bis; + byte[] data = new byte[1024 * 10]; + if (files != null && files.size() > 0) { + for (File file : files) { + String name = file.getName(); + //创建ZIP实体,并添加进压缩包 + ZipEntry zipEntry = new ZipEntry(name); + zos.putNextEntry(zipEntry); + //读取待压缩的文件并写进压缩包里 + fis = new FileInputStream(file); + bis = new BufferedInputStream(fis); + int d; + while ((d = bis.read(data, 0, 1024 * 10)) != -1) { + zos.write(data, 0, d); + } + bis.close(); + fis.close(); + } + } + zos.close(); + // 输出到客户端 + OutputStream out = response.getOutputStream(); + response.reset(); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".zip");//在消息头里命名输出的zip文件夹名称 + response.setContentType("application/octet-stream; charset=utf-8"); + out.write(toByte(zipFile)); +// out.flush(); + out.close(); + zipFile.delete(); + } catch (Exception e) { + throw new BusinessException("文件压缩错误"); + } + } + + /** + * 文件转换byte字节数组 + * + * @param file + * @return + */ + private static byte[] toByte(File file) { + { + byte[] bytes; + try { + FileInputStream fis = new FileInputStream(file); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + byte[] data = new byte[1024 * 10]; + int len; + while ((len = fis.read(data)) != -1) { + bos.write(data, 0, len); + } + bytes = bos.toByteArray(); + fis.close(); + bos.close(); + } catch (IOException e) { + throw new BusinessException("文件转化错误"); + } + return bytes; + } + } +} + diff --git a/boot-service/src/main/resources/kdniao.properties b/boot-service/src/main/resources/kdniao.properties index 4e34a29..08cd193 100644 --- a/boot-service/src/main/resources/kdniao.properties +++ b/boot-service/src/main/resources/kdniao.properties @@ -1,5 +1,6 @@ #---------------¿ìµÝÄñconfig---------------- -###------------IDºÍKeyÇ뵽¹ÙÍøÉêÇ룺http://www.kdniao.com/ServiceApply.aspx-------------### +###------------IDºÍKeyÇ뵽¹ÙÍøÉêÇë:http://www.kdniao.com/ServiceApply.aspx-------------### +###------------Ïà¹ØÎĵµ:http://www.kdniao.com/documents-------------### EBusinessID=1255383 appKey=94f7286a-8ae5-4394-8809-26dd645e82ca reqURL=http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx diff --git a/boot-web/src/main/java/com/xwbing/controller/MailTestControl.java b/boot-web/src/main/java/com/xwbing/controller/MailTestControl.java index 61dc22e..bc14e2d 100644 --- a/boot-web/src/main/java/com/xwbing/controller/MailTestControl.java +++ b/boot-web/src/main/java/com/xwbing/controller/MailTestControl.java @@ -60,7 +60,7 @@ public class MailTestControl { @GetMapping("sendInlineResourceMail") @ApiOperation(value = "发送文本内嵌图片邮件") public JSONObject sendInlineResourceMail() { - String rscId = "pic"; + String rscId = "file"; String content = "这是有图片的邮件:"; String imgPath = "C:\\Users\\admin\\Desktop\\0000001.png"; RestMessage restMessage = mailService.sendInlineResourceMail("786461501@qq.com", "内嵌图片测试邮件", content, imgPath, rscId); diff --git a/boot-web/src/main/java/com/xwbing/controller/TestControl.java b/boot-web/src/main/java/com/xwbing/controller/TestControl.java index c456eeb..d0fadfe 100644 --- a/boot-web/src/main/java/com/xwbing/controller/TestControl.java +++ b/boot-web/src/main/java/com/xwbing/controller/TestControl.java @@ -6,7 +6,9 @@ import com.xwbing.entity.ExpressInfo; import com.xwbing.entity.vo.ExpressInfoVo; import com.xwbing.redis.RedisService; import com.xwbing.service.ExpressDeliveryService; +import com.xwbing.service.QRcodeZipService; import com.xwbing.util.JSONObjResult; +import com.xwbing.util.RestMessage; import io.swagger.annotations.Api; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -14,6 +16,8 @@ import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.File; import java.util.List; /** @@ -30,6 +34,8 @@ public class TestControl { private RedisService redisService; @Resource private ExpressDeliveryService expressDeliveryService; + @Resource + private QRcodeZipService QRcodeZipService; private final Logger logger = LoggerFactory.getLogger(TestControl.class); @LogInfo("redis功能测试") @@ -54,7 +60,6 @@ public class TestControl { return JSONObjResult.toJSONObj(list, true, ""); } - @LogInfo("快递查询") @PostMapping("expressInfo") public JSONObject getExpressInfo(@RequestBody ExpressInfo info) { @@ -63,4 +68,30 @@ public class TestControl { ExpressInfoVo infoVo = expressDeliveryService.queryOrderTraces(info); return JSONObjResult.toJSONObj(infoVo, true, "查询快递信息成功"); } + + @LogInfo("生成二维码")//为什么内置tomcat会重启 + @PostMapping("createQRCode") + public JSONObject createQRCode(@RequestParam String name, @RequestParam String text) { + RestMessage qrCode = QRcodeZipService.createQRCode(name, text); + return JSONObjResult.toJSONObj(qrCode); + } + + @LogInfo("解析二维码") + @GetMapping("decode") + public JSONObject decode(@RequestParam String path) { + if (StringUtils.isEmpty(path)) + return JSONObjResult.toJSONObj("二维码图片路径不能为空"); + File file = new File(path); + RestMessage decode = QRcodeZipService.decode(file); + return JSONObjResult.toJSONObj(decode); + } + + @LogInfo("导出zip") + @GetMapping("batchGetImage") + public JSONObject batchGetImage(HttpServletResponse response, @RequestParam String[] names, @RequestParam String fileName) { + if (StringUtils.isEmpty(fileName)) + return JSONObjResult.toJSONObj("zip名称不能为空"); + RestMessage restMessage = QRcodeZipService.batchGetImage(response, names, fileName); + return JSONObjResult.toJSONObj(restMessage); + } } diff --git a/boot-web/src/main/resources/file/0000001.png b/boot-web/src/main/resources/file/0000001.png new file mode 100644 index 0000000..7a16c01 Binary files /dev/null and b/boot-web/src/main/resources/file/0000001.png differ diff --git a/pom.xml b/pom.xml index d44ade2..27bbd59 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ 1.8 1.3.1 1.16.16 + 3.2.1 true 2.4.0