From f6a1bf1d9b19dd8b3750034048f3876d086db1f1 Mon Sep 17 00:00:00 2001 From: ZQN <364596817@qq.com> Date: 星期三, 14 八月 2024 17:11:49 +0800 Subject: [PATCH] 企业二维码添加 --- project-common/src/main/java/com/project/common/utils/file/ImageUtils.java | 41 ++---- project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java | 3 project-system/src/main/java/com/project/system/domain/SysCompany.java | 3 project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java | 34 ++++- project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java | 60 ++++++++++ project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java | 73 ++++++++++++ project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java | 25 ++++ project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java | 37 ++++++ project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java | 50 ++++++++ 9 files changed, 288 insertions(+), 38 deletions(-) diff --git a/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java b/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java index 9c23927..30e97c1 100644 --- a/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java +++ b/project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java @@ -1,12 +1,18 @@ package com.project.admin.controller.system; +import cn.hutool.core.convert.Convert; import com.project.common.annotation.Log; import com.project.common.annotation.RepeatSubmit; +import com.project.common.config.ProjectConfig; import com.project.common.core.controller.BaseController; import com.project.common.core.domain.AjaxResult; import com.project.common.core.page.TableDataInfo; import com.project.common.enums.BusinessType; +import com.project.common.utils.StringUtils; +import com.project.common.utils.file.ImageUtils; import com.project.common.utils.poi.ExcelUtil; +import com.project.common.utils.zip.ZipUtils; +import com.project.system.domain.SysCompany; import com.project.system.domain.bo.editBo.SysCompanyBo; import com.project.system.domain.bo.queryBo.SysCompanyQueryBo; import com.project.system.domain.vo.SysCompanyResultVo; @@ -20,9 +26,11 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * 浼佷笟淇℃伅Controller @@ -38,6 +46,7 @@ private final ISysCompanyService iSysCompanyService; + @ApiOperation("鏌ヨ浼佷笟淇℃伅鍒楄〃") @GetMapping("/list") public TableDataInfo list(SysCompanyQueryBo bo) @@ -48,6 +57,22 @@ } + @ApiOperation("涓嬭浇浜岀淮鐮�") + @GetMapping("/downloadQrcode") + public void downloadQrcode(SysCompanyQueryBo bo, HttpServletResponse response) + { + List<SysCompanyVo> list = iSysCompanyService.queryList(bo); + list.forEach(e->{ + if (StringUtils.isEmpty(e.getQrcodeImg())){ + String qrcode = ImageUtils.createQrcode(e.getCompanyCode(), e.getCompanyName(), "2"); + e.setQrcodeImg(qrcode); + iSysCompanyService.updateById(Convert.convert(SysCompany.class, e)); + } + }); + List<String> collect = list.stream().map(SysCompanyVo::getQrcodeImg).collect(Collectors.toList()); + ZipUtils.downloadToZip(collect, response); + } + @ApiOperation("瀵煎嚭浼佷笟淇℃伅鍒楄〃") //@PreAuthorize("@ss.hasPermi('system:company:export')") diff --git a/project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java b/project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java new file mode 100644 index 0000000..1c502c6 --- /dev/null +++ b/project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java @@ -0,0 +1,37 @@ +package com.project.admin.controller.tool; + +import com.project.common.core.domain.AjaxResult; +import com.project.common.utils.file.ImageUtils; +import com.project.system.service.ISysConfigService; +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 鍔熻兘鎻忚堪锛� + * + * @author ZQN + * @version 1.0 2024骞�07鏈�17鏃� + */ + +@Api(value = "浜岀淮鐮�", tags = {"浜岀淮鐮�"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) +@RestController +@RequestMapping("/tool/qrcode") +public class QrcodeController +{ + + private final ISysConfigService configService; + + + @PostMapping("/createQrcode") + public AjaxResult createQrcode() + { + String content = configService.selectConfigByKey("sys.trans.qrcode.url"); + return AjaxResult.success(ImageUtils.createQrcode("abssdf1asdfasdfasdfasdsa","娌堜笜鍘垮崕椤哄啘涓氬缓璁惧伐绋嬫湁闄愬叕鍙告矆涓樺垎鍏徃","2")); + } + +} diff --git a/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java b/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java index 7a70cdf..ad21297 100644 --- a/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java +++ b/project-common/src/main/java/com/project/common/utils/file/ImageUtils.java @@ -1,5 +1,17 @@ package com.project.common.utils.file; +import com.alibaba.fastjson2.JSONObject; +import com.google.zxing.WriterException; +import com.project.common.config.ProjectConfig; +import com.project.common.constant.Constants; +import com.project.common.utils.StringUtils; +import com.project.common.utils.WeChatUtils; +import com.project.common.utils.qrcode.QRCodeUtil; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.*; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; @@ -8,23 +20,6 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.Arrays; - -import com.alibaba.fastjson2.JSONObject; -import com.project.common.config.ProjectConfig; -import com.project.common.utils.WeChatUtils; -import com.project.common.utils.qrcode.QRCodeUtil; -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; -import org.apache.poi.util.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.project.common.constant.Constants; -import com.project.common.utils.StringUtils; - -import javax.net.ssl.*; import static com.project.common.utils.file.FileUploadUtils.getPathFileName; @@ -120,7 +115,7 @@ * @throws WriterException * @throws IOException */ - public static Object createQrcode(String content, String type) + public static String createQrcode(String content, String name, String type) { // 鏈湴璧勬簮璺緞 String localPath = ProjectConfig.getQrcodePath(); @@ -192,15 +187,7 @@ } } else if ("2".equals(type)){ - try { - String destPath = localPath+"/logo.png"; - QRCodeUtil.encode(content, destPath, file.getPath(),true); - - } catch (IOException | WriterException e) { - throw new RuntimeException(e); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } + QRCodeUtil.contextLoads2(content, name, file.getPath()); } } diff --git a/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java b/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java index 81fa4b6..b34ffe2 100644 --- a/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java +++ b/project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java @@ -2,6 +2,7 @@ import com.google.zxing.*; +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; @@ -14,7 +15,11 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; import java.util.Hashtable; +import java.util.Map; public class QRCodeUtil { private static final String CHARSET = "utf-8"; @@ -106,7 +111,8 @@ QRCodeUtil.encode(content, null, outputStream, false); } - public static String decode(File file) throws IOException, NotFoundException { + public static String decode(File file) throws IOException, NotFoundException + { BufferedImage image; image = ImageIO.read(file); if (image == null) { @@ -133,5 +139,70 @@ } } + + //浜岀淮鐮佸浘涓婂甫瀛� + public static void contextLoads2(String content, String name, String filePathStr) + { + int qrCodeWidth = 700; + int qrCodeHeight = 700; + int textPadding = 5; // 鏂囨湰涓庝簩缁寸爜涔嬮棿鐨勯棿璺� + int textSize = 30; // 鏂囨湰瀛椾綋澶у皬 + int totalHeight = qrCodeHeight + 300; + + try { + // 鐢熸垚浜岀淮鐮佺殑BitMatrix + BitMatrix bitMatrix = generateQRCode(content, qrCodeWidth, qrCodeHeight); + + // 灏咮itMatrix杞崲涓築ufferedImage + BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(bitMatrix); + + // 鍒涘缓涓�涓柊鐨凚ufferedImage鏉ュ绾充簩缁寸爜鍜屾枃鏈� + BufferedImage combinedImage = new BufferedImage( + qrCodeWidth, 900, BufferedImage.TYPE_INT_RGB); + + // 缁樺埗浜岀淮鐮佸埌鏂扮殑BufferedImage涓� + Graphics2D g2d = combinedImage.createGraphics(); + g2d.setColor(Color.WHITE); + g2d.fillRect(0, 0, qrCodeWidth, 900); + g2d.drawImage(qrCodeImage, 0, 0, null); + + // 璁剧疆鏂囨湰鏍峰紡 + Font font = new Font("BLACK", Font.PLAIN, textSize); + g2d.setFont(font); + g2d.setColor(Color.BLACK); // 鏂囨湰棰滆壊 + + // 缁樺埗鏂囨湰鍒板浘鐗囦笅鏂� + FontMetrics metrics = g2d.getFontMetrics(); + int textX = (qrCodeWidth - metrics.stringWidth("娌堜笜鎯犱紒鎵ф硶")) / 2; + int textX1 = (qrCodeWidth - metrics.stringWidth(name)) / 2; + int textY = qrCodeHeight + textPadding; + g2d.drawString("娌堜笜鎯犱紒鎵ф硶", textX, textY); + g2d.drawString(name, textX1, textY+50); + + g2d.dispose(); + + // 鎸囧畾瀛樺偍鍥剧墖鐨勮矾寰� + Path filePath = Paths.get(filePathStr); + + // 纭繚鏂囦欢璺緞鐨勭埗鐩綍瀛樺湪 + filePath.getParent().toFile().mkdirs(); + + // 淇濆瓨鍥剧墖鍒版枃浠� + ImageIO.write(combinedImage, "PNG", filePath.toFile()); + + System.out.println("QR Code with text has been generated: " + filePath.toAbsolutePath()); + } catch (WriterException | IOException e) { + e.printStackTrace(); + } + } + + + private static BitMatrix generateQRCode(String text, int width, int height) throws WriterException + { + Map<EncodeHintType, Object> hints = new HashMap<>(); + hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); + return new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints); + } + } diff --git a/project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java b/project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java new file mode 100644 index 0000000..de4c736 --- /dev/null +++ b/project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java @@ -0,0 +1,50 @@ +package com.project.common.utils.zip; + +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; +import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +public class ImageDownloader { + + public static void main(String[] args) throws IOException { + File[] imageFiles = new File("images").listFiles(); + + if (imageFiles != null) { + File zipFile = new File("images.zip"); + FileOutputStream fos = new FileOutputStream(zipFile); + ZipArchiveOutputStream zos = new ZipArchiveOutputStream(fos); + + for (File imageFile : imageFiles) { + if (imageFile.isFile()) { + ZipArchiveEntry entry = new ZipArchiveEntry(imageFile.getName()); + zos.putArchiveEntry(entry); + + FileInputStream fis = new FileInputStream(imageFile); + byte[] buffer = new byte[1024]; + int length; + while ((length = fis.read(buffer)) != -1) { + zos.write(buffer, 0, length); + } + + fis.close(); + zos.closeArchiveEntry(); + } + } + + zos.finish(); + zos.close(); + fos.close(); + + System.out.println("Images downloaded and packed into 'images.zip' successfully."); + } else { + System.out.println("No images found."); + } + } + + + +} diff --git a/project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java b/project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java new file mode 100644 index 0000000..619e89f --- /dev/null +++ b/project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java @@ -0,0 +1,60 @@ +package com.project.common.utils.zip; + +import cn.hutool.core.util.ZipUtil; +import com.project.common.config.ProjectConfig; +import com.project.common.utils.StringUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +@Component +@Slf4j +public class ZipUtils { + + // 鏈湴璧勬簮璺緞 + private static String localPath = ProjectConfig.getQrcodePath(); + + /** + * 涓嬭浇澶氫釜鏂囦欢杞瑉ip鍘嬬缉鍖� + * + * @param list 鍥剧墖鏁扮粍 + * @param response 鍝嶅簲 + */ + public static void downloadToZip(List<String> list, HttpServletResponse response) + { + int i = 0; + //濡傛灉鏈夐檮浠� 杩涜zip澶勭悊 + if (StringUtils.isNotEmpty(list)) { + try { + //琚帇缂╂枃浠舵祦闆嗗悎 + InputStream[] srcFiles = new InputStream[list.size()]; + //琚帇缂╂枃浠跺悕绉� + String[] srcFileNames = new String[list.size()]; + for (String path : list) { + //浠ヤ笅浠g爜涓鸿幏鍙栧浘鐗噄nputStream + String s = path.substring(path.lastIndexOf("/")); + InputStream ins = Files.newInputStream(Paths.get(localPath + s)); + //濉炲叆娴佹暟缁勪腑 + srcFiles[i] = ins; + srcFileNames[i] = path.substring(path.lastIndexOf("/",path.lastIndexOf("-"))); + i++; + } + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("涓嬭浇.zip", "UTF-8")); + //澶氫釜鏂囦欢鍘嬬缉鎴愬帇缂╁寘杩斿洖 + ZipUtil.zip(response.getOutputStream(), srcFileNames, srcFiles); + } catch (IOException e) { + e.printStackTrace(); + } + } + + } +} + diff --git a/project-system/src/main/java/com/project/system/domain/SysCompany.java b/project-system/src/main/java/com/project/system/domain/SysCompany.java index 9e9858a..11b9aa3 100644 --- a/project-system/src/main/java/com/project/system/domain/SysCompany.java +++ b/project-system/src/main/java/com/project/system/domain/SysCompany.java @@ -82,6 +82,9 @@ @ApiModelProperty("鑷畾涔夋帓搴�") private Integer sortNum; + @ApiModelProperty("浼佷笟浜岀淮鐮�") + private String qrcodeImg; + diff --git a/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java b/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java index c99e3a2..593de96 100644 --- a/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java +++ b/project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java @@ -93,6 +93,9 @@ @ApiModelProperty("澶囨敞") private String remark; + @ApiModelProperty("浼佷笟浜岀淮鐮�") + private String qrcodeImg; + @ApiModelProperty("閿欒淇℃伅鏁版嵁") private List<ImportError> errorList; diff --git a/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java b/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java index c3f46d2..08f121d 100644 --- a/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java +++ b/project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java @@ -1,28 +1,29 @@ package com.project.system.service.impl; +import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.project.common.constant.UserConstants; import com.project.common.core.domain.entity.SysUser; import com.project.common.core.domain.model.ImportError; import com.project.common.exception.base.BaseException; import com.project.common.utils.SecurityUtils; +import com.project.common.utils.StringUtils; +import com.project.common.utils.file.ImageUtils; +import com.project.system.domain.SysCompany; +import com.project.system.domain.bo.editBo.SysCompanyBo; +import com.project.system.domain.bo.queryBo.SysCompanyQueryBo; import com.project.system.domain.vo.SysCompanyResultVo; +import com.project.system.domain.vo.SysCompanyVo; +import com.project.system.mapper.SysCompanyMapper; +import com.project.system.service.ISysCompanyService; import com.project.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; -import cn.hutool.core.convert.Convert; -import com.project.common.utils.StringUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.transaction.annotation.Transactional; -import com.project.system.domain.vo.SysCompanyVo; -import com.project.system.domain.bo.editBo.SysCompanyBo; -import com.project.system.domain.bo.queryBo.SysCompanyQueryBo; -import com.project.system.domain.SysCompany; -import com.project.system.mapper.SysCompanyMapper; -import com.project.system.service.ISysCompanyService; import java.util.ArrayList; import java.util.Collection; @@ -51,6 +52,11 @@ public SysCompanyVo queryById(Long companyId) { SysCompany db = this.baseMapper.selectById(companyId); + if (StringUtils.isEmpty(db.getQrcodeImg())){ + String qrcode = ImageUtils.createQrcode(db.getCompanyCode(), db.getCompanyName(), "2"); + db.setQrcodeImg(qrcode); + this.updateById(db); + } return Convert.convert(SysCompanyVo.class , db); } @@ -62,6 +68,9 @@ SysCompany add = Convert.convert(SysCompany.class, bo); add.setCompanyStatus(1); validEntityBeforeSave(add); + String qrcode = ImageUtils.createQrcode(add.getCompanyCode(), add.getCompanyName(), "2"); + add.setQrcodeImg(qrcode); + boolean save = this.save(add); if (isAddUser(bo.getCompanyPhone())){ addCompanyUser(add, 0); @@ -156,6 +165,10 @@ } }); List<SysCompany> companies = Convert.toList(SysCompany.class, resultVo.getVoList()); + companies.forEach(e->{ + String qrcode = ImageUtils.createQrcode(e.getCompanyCode(), e.getCompanyName(), "2"); + e.setQrcodeImg(qrcode); + }); boolean b = this.saveOrUpdateBatch(companies); for (SysCompany company : companies) { if (isAddUser(company.getCompanyPhone())){ @@ -168,6 +181,7 @@ //------------------------------------------------------------------------------------- + /** * 淇濆瓨鍓嶆牎楠� * @param entity 鍙傛暟 -- Gitblit v1.9.1