ZQN
2024-08-14 f6a1bf1d9b19dd8b3750034048f3876d086db1f1
企业二维码添加
3个文件已添加
6个文件已修改
326 ■■■■ 已修改文件
project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-common/src/main/java/com/project/common/utils/file/ImageUtils.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-common/src/main/java/com/project/common/utils/qrcode/QRCodeUtil.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/domain/SysCompany.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/domain/vo/SysCompanyVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/service/impl/SysCompanyServiceImpl.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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')")
project-admin/src/main/java/com/project/admin/controller/tool/QrcodeController.java
New file
@@ -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"));
    }
}
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());
            }
        }
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);
            // 将BitMatrix转换为BufferedImage
            BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
            // 创建一个新的BufferedImage来容纳二维码和文本
            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);
    }
}
project-common/src/main/java/com/project/common/utils/zip/ImageDownloader.java
New file
@@ -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.");
        }
    }
}
project-common/src/main/java/com/project/common/utils/zip/ZipUtils.java
New file
@@ -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();
    /**
     * 下载多个文件转zip压缩包
     *
     * @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) {
                    //以下代码为获取图片inputStream
                    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();
            }
        }
    }
}
project-system/src/main/java/com/project/system/domain/SysCompany.java
@@ -82,6 +82,9 @@
    @ApiModelProperty("自定义排序")
    private Integer sortNum;
    @ApiModelProperty("企业二维码")
    private String qrcodeImg;
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;
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    参数