<dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.4.1</version>
        </dependency>
package com.shpl.scp.cms.service.impl;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
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 com.shpl.scp.cms.api.feign.RemoteCmsFileService;
import com.shpl.scp.cms.api.feign.RemoteCmsSerialGenService;
import com.shpl.scp.cms.entity.CmsComplianceTrainingEntity;
import com.shpl.scp.cms.mapper.CmsComplianceTrainingMapper;
import com.shpl.scp.cms.service.CmsComplianceAttendanceService;
import com.shpl.scp.cms.service.CmsComplianceTrainingService;
import com.shpl.scp.cms.util.CustomMultipartFile;
import com.shpl.scp.common.core.util.R;
import com.shpl.scp.common.file.core.FileProperties;
import com.shpl.scp.common.file.core.FileTemplate;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

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.Map;

/**
 * cms_合规培训
 *
 * @author geng
 * @date 2025-12-24 10:12:30
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class CmsComplianceTrainingServiceImpl extends ServiceImpl<CmsComplianceTrainingMapper, CmsComplianceTrainingEntity> implements CmsComplianceTrainingService {


    private final RemoteCmsSerialGenService remoteCmsSerialGenService;
    private final RemoteCmsFileService remoteCmsFileService;
    private final CmsComplianceAttendanceService cmsComplianceAttendanceService;
    //注入 OssTemplate
    private final FileTemplate fileTemplate;
    private final FileProperties properties;

    @Value("${file.tempPath}")
    private  String tmpPath;
    @Override
    public boolean saveTraining(CmsComplianceTrainingEntity cmsComplianceTraining) {
        String serialNumber = remoteCmsSerialGenService.generate("cmsTrainingSerial");//3位
        cmsComplianceTraining.setTrainingCode(serialNumber);
        //1本地磁盘生成二维码
        String fileType = "png";
        //String fileName = IdUtil.simpleUUID() + StrUtil.DOT + fileType;
        String fileName = serialNumber + StrUtil.DOT + fileType;
        String filePathLocal = tmpPath +File.separator+ fileName;
        try {
            //String qrCodeUrlText = "https://www.baidu.com";
            //构造企业微信网页授权链接
            String qrCodeUrl = cmsComplianceAttendanceService.getQyWechatAuthorizeUrl(serialNumber);
            log.info("生成企业微信二维码链接: {}", qrCodeUrl);
            generateQRCodeImage(qrCodeUrl, 300, 300, filePathLocal); // 替换为你的文件路径
        } catch (WriterException | IOException e) {
            e.printStackTrace();
        }
        //2把本地磁盘二维码图片上传到OSS路径下
        String uploadDir = "complianceTraining/";
        File file = new File(filePathLocal);
        MultipartFile multipartFile = new CustomMultipartFile(file);
        /*//本地上传无文件表日志,不能下载try (InputStream inputStream = FileUtil.getInputStream(file)) {
            fileTemplate.putObject(properties.getBucketName(), uploadDir, fileName, inputStream, fileType);
        } catch (Exception e) {
            log.error("上传失败", e);
        }*/
        remoteCmsFileService.innerUpload(multipartFile,uploadDir,fileName);
        String qrCodeUrl = "/admin/sys-file/oss/file?fileName="+fileName+"&originalFileName="+fileName+"";
        cmsComplianceTraining.setQrCodeUrl(qrCodeUrl);//签到二维码访问地址
        this.save(cmsComplianceTraining);
        return false;
    }

    public  void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符编码为UTF-8
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        Path path = FileSystems.getDefault().getPath(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path); // 输出图片格式为PNG,也可以选择其他格式如JPG等
    }


}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐