• 为数据列表的每条记录生成对应的二维码


    效果图:

    一、前端

    1. html>
    2. <html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
    3. <head>
    4. <th:block th:include="include :: header('固定资产信息列表')" />
    5. head>
    6. <body class="gray-bg">
    7. <div class="container-div">
    8. <div class="row">
    9. <div class="col-sm-12 search-collapse">
    10. <form id="formId">
    11. <div class="select-list">
    12. <ul>
    13. <li>
    14. <label>资产名称:label>
    15. <input type="text" name="zcmc"/>
    16. li>
    17. <li>
    18. <label>资产型号:label>
    19. <input type="text" name="zcxh"/>
    20. li>
    21. <li>
    22. <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search">i> 搜索a>
    23. <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh">i> 重置a>
    24. li>
    25. ul>
    26. div>
    27. form>
    28. div>
    29. <div class="btn-group-sm" id="toolbar" role="group">
    30. <a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="biz:gdzcxx:add">
    31. <i class="fa fa-plus">i> 添加
    32. a>
    33. <a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="biz:gdzcxx:edit">
    34. <i class="fa fa-edit">i> 修改
    35. a>
    36. <a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="biz:gdzcxx:remove">
    37. <i class="fa fa-remove">i> 删除
    38. a>
    39. <a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="biz:gdzcxx:export">
    40. <i class="fa fa-download">i> 导出
    41. a>
    42. div>
    43. <div class="col-sm-12 select-table table-striped">
    44. <table id="bootstrap-table">table>
    45. div>
    46. div>
    47. div>
    48. <th:block th:include="include :: footer" />
    49. <script th:inline="javascript">
    50. var qrcodeFlag = [[${@permission.hasPermi('biz:gdzcxx:createQRCode')}]];
    51. var editFlag = [[${@permission.hasPermi('biz:gdzcxx:edit')}]];
    52. var removeFlag = [[${@permission.hasPermi('biz:gdzcxx:remove')}]];
    53. var prefix = ctx + "biz/gdzcxx";
    54. //生成二维码
    55. function createQRCode(id){
    56. $.ajax({
    57. url: prefix + "/createQRCode",
    58. data: {gdzcxxid:id},
    59. type: 'POST',
    60. success: function (result) {
    61. $.table.refresh();
    62. }
    63. });
    64. }
    65. $(function() {
    66. var options = {
    67. url: prefix + "/list",
    68. createUrl: prefix + "/add",
    69. updateUrl: prefix + "/edit/{id}",
    70. removeUrl: prefix + "/remove",
    71. exportUrl: prefix + "/export",
    72. modalName: "固定资产信息",
    73. columns: [{
    74. checkbox: true
    75. },
    76. {
    77. field: 'gdzcxxId',
    78. title: '资产ID'
    79. },
    80. {
    81. field: 'zcmc',
    82. title: '资产名称'
    83. },
    84. {
    85. field: 'zcxh',
    86. title: '资产型号'
    87. },
    88. {
    89. field: 'ewm',
    90. title: '二维码',
    91. formatter:function(value, row, index){
    92. var imageDataUrl = 'data:image/png;base64,' + value;
    93. return "";
    94. }
    95. },
    96. {
    97. field: 'bz',
    98. title: '备注'
    99. },
    100. {
    101. title: '操作',
    102. align: 'center',
    103. formatter: function(value, row, index) {
    104. var actions = [];
    105. return actions.join('');
    106. }
    107. }]
    108. };
    109. $.table.init(options);
    110. });
    111. script>
    112. body>
    113. html>

    二、后端

    1. <dependency>
    2. <groupId>com.google.zxinggroupId>
    3. <artifactId>coreartifactId>
    4. <version>3.4.1version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.google.zxinggroupId>
    8. <artifactId>javaseartifactId>
    9. <version>3.4.1version>
    10. dependency>
    1. @Controller
    2. @RequestMapping("/biz/gdzcxx")
    3. public class BizGdzcxxController extends BaseController
    4. {
    5. private String prefix = "biz/gdzcxx";
    6. /**
    7. * 创建二维码
    8. */
    9. @RequiresPermissions("biz:gdzcxx:createQRCode")
    10. @PostMapping("/createQRCode")
    11. public String createQRCode(String gdzcxxid) throws IOException, WriterException {
    12. //根据ID取记录,并为其生成二维码
    13. BizGdzcxx bizGdzcxx = bizGdzcxxService.selectBizGdzcxxByGdzcxxId(Long.valueOf(gdzcxxid));
    14. QRCode qrCode = new QRCode();
    15. //二维码物理存放路径
    16. String uploadPath = "D:/qrcode";
    17. qrCode.setFilePath(uploadPath + "/ewm/gdzcxx/" + bizGdzcxx.getZcmc() + ".png");
    18. //二维码内容:http://localhost:8088/prefix/info/1
    19. qrCode.setQrCodeData("/" + prefix + "/info/" + bizGdzcxx.getGdzcxxId());
    20. //创建二维码
    21. qrCodeService.createQRCode(qrCode);
    22. //将二维码转二进制
    23. FileInputStream fis = new FileInputStream(qrCode.getFilePath());
    24. byte[] bytes = FileCopyUtils.copyToByteArray(fis);
    25. //二进制入库
    26. bizGdzcxx.setEwm(bytes);
    27. bizGdzcxxService.updateBizGdzcxx(bizGdzcxx);
    28. return prefix + "/gdzcewm";
    29. }
    1. import com.google.zxing.BarcodeFormat;
    2. import com.google.zxing.EncodeHintType;
    3. import com.google.zxing.WriterException;
    4. import com.google.zxing.client.j2se.MatrixToImageWriter;
    5. import com.google.zxing.common.BitMatrix;
    6. import com.google.zxing.qrcode.QRCodeWriter;
    7. import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
    8. import com.chenf.biz.domain.QRCode;
    9. import com.chenf.biz.service.IQRCodeService;
    10. import org.springframework.stereotype.Service;
    11. import java.io.IOException;
    12. import java.nio.file.Files;
    13. import java.nio.file.Path;
    14. import java.nio.file.Paths;
    15. import java.util.HashMap;
    16. import java.util.Map;
    17. @Service
    18. public class QRCodeServiceImpl implements IQRCodeService {
    19. @Override
    20. public void createQRCode(QRCode qrCode) throws IOException, WriterException {
    21. QRCodeWriter qrCodeWriter = new QRCodeWriter();
    22. Map hintMap = new HashMap<>();
    23. hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
    24. hintMap.put(EncodeHintType.CHARACTER_SET, qrCode.getCharset());
    25. BitMatrix matrix = qrCodeWriter.encode(new String(qrCode.getQrCodeData().getBytes(qrCode.getCharset()), qrCode.getCharset()),
    26. //BitMatrix matrix = qrCodeWriter.encode(qrCode.getQrCodeData(),
    27. BarcodeFormat.QR_CODE, qrCode.getQrCodeWidth(), qrCode.getQrCodeHeight(), hintMap);
    28. Path path = Paths.get(qrCode.getFilePath());
    29. if (!Files.exists(path)) {
    30. try {
    31. Files.createDirectories(path);
    32. System.out.println("Path created!");
    33. } catch (Exception e) {
    34. System.out.println("An error occurred while creating the path: " + e.getMessage());
    35. }
    36. } else {
    37. System.out.println("Path already exists!");
    38. }
    39. MatrixToImageWriter.writeToPath(matrix, qrCode.getFilePath().substring(qrCode.getFilePath().lastIndexOf('.') + 1), path);
    40. }
    41. }
    1. import com.google.zxing.WriterException;
    2. import com.chenf.biz.domain.QRCode;
    3. import java.io.IOException;
    4. public interface IQRCodeService {
    5. void createQRCode(QRCode qrCode) throws IOException, WriterException;
    6. }
    1. /**
    2. * 二维码
    3. */
    4. public class QRCode {
    5. //二维码内容
    6. private String qrCodeData;
    7. //二维码存放路径
    8. private String filePath;
    9. private String charset="UTF-8";
    10. //二维码调度
    11. private int qrCodeHeight=200;
    12. //二维码宽度
    13. private int qrCodeWidth=200;
    14. public String getQrCodeData(){return this.qrCodeData;}
    15. public void setQrCodeData(String qrCodeData){ this.qrCodeData = qrCodeData;}
    16. public String getFilePath(){return this.filePath;}
    17. public void setFilePath(String filePath){ this.filePath = filePath;}
    18. public String getCharset(){return this.charset;}
    19. public void setCharset(String charset){ this.charset = charset;}
    20. public int getQrCodeHeight(){return this.qrCodeHeight;}
    21. public void setQrCodeHeight(int qrCodeHeight){ this.qrCodeHeight = qrCodeHeight;}
    22. public int getQrCodeWidth(){return this.qrCodeWidth;}
    23. public void setQrCodeWidth(int qrCodeWidth){ this.qrCodeWidth = qrCodeWidth;}
    24. }

    《完结》

  • 相关阅读:
    如何建立云存储应急演练体系及进行场景设计
    嵌入式项目:智慧农业1---V4L2编程之USB摄像头采集图像
    [go学习笔记.第十五章.反射] 1.反射的基本介绍以及实践
    排序算法的分析及实现
    关于智能控制领域中模糊控制算法的概述
    论文精读:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
    认识NAT技术
    2022 年牛客多校第七场补题记录
    QT实现TCP服务器客户端的实现
    透明安全地解释Moonbeam基金会分配的GLMR去了哪
  • 原文地址:https://blog.csdn.net/yetyrain/article/details/133828805