Parcourir la source

增加二维码.备注功能

chenyi406 il y a 2 ans
Parent
commit
36d9f9ae81

+ 8 - 0
pom.xml

@@ -134,6 +134,14 @@
             <version>2.2.10</version>
         </dependency>
 
+        <!--二维码处理-->
+        <!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 33 - 0
src/main/java/com/zy/bms/controller/DeviceController.java

@@ -0,0 +1,33 @@
+package com.zy.bms.controller;
+
+import com.zy.bms.common.ServerResponse;
+import com.zy.bms.entity.DeviceBase;
+import com.zy.bms.service.IDeviceBaseService;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * 设备静态信息
+ *
+ * @author yangxiaokun
+ * @since 2021-06-01
+ */
+@RestController
+@RequestMapping("/bms/api/operate/device/base")
+public class DeviceController extends BaseController {
+    @Resource
+    private IDeviceBaseService deviceBaseService;
+
+    /**
+     * 更新设备备注
+     */
+    @PostMapping("remark.do")
+    public ServerResponse remark(DeviceBase deviceBase) {
+        deviceBaseService.updateRemark(deviceBase);
+        return ServerResponse.success();
+    }
+
+}

+ 9 - 0
src/main/java/com/zy/bms/controller/UserController.java

@@ -36,6 +36,15 @@ public class UserController {
         return ServerResponse.success(userService.listPage(io));
     }
 
+    /**
+     * 更新设备备注
+     */
+    @PostMapping("remark.do")
+    public ServerResponse remark(User user) {
+        userService.updateRemark(user);
+        return ServerResponse.success();
+    }
+
     /**
      * 获取用户未有权限的设备组
      */

+ 9 - 0
src/main/java/com/zy/bms/entity/DeviceBase.java

@@ -51,6 +51,15 @@ public class DeviceBase implements Serializable {
      */
     private String type;
 
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 设备码二维码
+     */
+    private String qrCode;
     /**
      * 创建时间
      */

+ 5 - 0
src/main/java/com/zy/bms/entity/User.java

@@ -88,4 +88,9 @@ public class User implements Serializable {
      * 是否是管理员
      */
     private Integer admin;
+
+    /**
+     * 备注
+     */
+    private String remark;
 }

+ 5 - 0
src/main/java/com/zy/bms/entity/ubi/UbiInfoState.java

@@ -86,6 +86,11 @@ public class UbiInfoState implements Serializable {
      */
     private Integer status;
 
+    /**
+     * 卡号
+     */
+    private String sim;
+
     /**
      * 数据更新时间
      */

+ 2 - 0
src/main/java/com/zy/bms/handler/MqttCallbackHandler.java

@@ -7,6 +7,7 @@ import com.zy.bms.pojo.dto.MqttDTO;
 import com.zy.bms.sender.CommonSender;
 import com.zy.bms.service.*;
 import com.zy.bms.utils.MD5Util;
+import com.zy.bms.utils.QRCodeUtil;
 import com.zy.bms.utils.RabbitMQApi;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -90,6 +91,7 @@ public class MqttCallbackHandler {
             device.setId(dbData.getId());
         }
         device.setOpenNum(openNum);
+        device.setQrCode(QRCodeUtil.generate(openNum));
         device.setGroupId(mqttDTO.getString("group"));
         device.setUsername(Constant.PREF.RABBIT_MQ_USERNAME + openNum);
         device.setPassword(MD5Util.encode(openNum));

+ 13 - 1
src/main/java/com/zy/bms/pojo/vo/UbiDeviceListVo.java

@@ -1,5 +1,7 @@
 package com.zy.bms.pojo.vo;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -45,7 +47,7 @@ public class UbiDeviceListVo {
     /**
      * 电压
      */
-    private Integer powerVolt;
+    private Double powerVolt;
 
     /**
      * 信号强度
@@ -57,6 +59,16 @@ public class UbiDeviceListVo {
      */
     private String version;
 
+    /**
+     * 卡号
+     */
+    private String sim;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
     /**
      * 数据更新时间
      */

+ 5 - 0
src/main/java/com/zy/bms/service/IDeviceBaseService.java

@@ -15,6 +15,11 @@ import java.util.Map;
  */
 public interface IDeviceBaseService extends IService<DeviceBase> {
 
+    /**
+     * 更新设备备注
+     */
+    void updateRemark(DeviceBase deviceBase);
+
     /**
      * 微信
      * 通过设备组查询设备集合

+ 6 - 0
src/main/java/com/zy/bms/service/IUserService.java

@@ -26,4 +26,10 @@ public interface IUserService extends IService<User> {
      * @param io 查询参数
      */
     IPage<User> listPage(SearchIO io);
+
+    /**
+     * 更新设备备注
+     */
+    void updateRemark(User user);
+
 }

+ 9 - 0
src/main/java/com/zy/bms/service/impl/DeviceBaseServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zy.bms.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.zy.bms.common.Constant;
 import com.zy.bms.entity.DeviceBase;
 import com.zy.bms.entity.lp.LpInfoState;
@@ -34,6 +35,14 @@ public class DeviceBaseServiceImpl extends ServiceImpl<DeviceBaseMapper, DeviceB
     @Resource
     private ILpInfoStateService lpInfoStateService;
 
+    @Override
+    public void updateRemark(DeviceBase deviceBase) {
+        UpdateWrapper<DeviceBase> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("remark", deviceBase.getRemark())
+                .eq("open_num", deviceBase.getOpenNum());
+        this.update(updateWrapper);
+    }
+
     @Override
     public List listByGroupIdWx(String groupId) {
         String type = baseMapper.getTypeByGroupId(groupId);

+ 10 - 0
src/main/java/com/zy/bms/service/impl/UserServiceImpl.java

@@ -1,9 +1,11 @@
 package com.zy.bms.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.bms.common.Constant;
+import com.zy.bms.entity.DeviceBase;
 import com.zy.bms.entity.User;
 import com.zy.bms.mapper.UserMapper;
 import com.zy.bms.pojo.io.SearchIO;
@@ -43,4 +45,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         Page<User> page = new Page<>(io.getCurrent(), io.getSize());
         return baseMapper.listPage(page, io);
     }
+
+    @Override
+    public void updateRemark(User user) {
+        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.set("remark", user.getRemark())
+                .eq("id", user.getId());
+        this.update(updateWrapper);
+    }
 }

+ 69 - 0
src/main/java/com/zy/bms/utils/QRCodeUtil.java

@@ -0,0 +1,69 @@
+package com.zy.bms.utils;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.common.BitMatrix;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * 二维码生成工具类
+ *
+ * @author chen_yi
+ * Create on 2021/11/14
+ */
+@Slf4j
+public class QRCodeUtil {
+    private static final int BLACK = 0xFF000000;
+    private static final int WHITE = 0xFFFFFFFF;
+    private static final int WIDTH = 200;
+    private static final int HEIGHT = 200;
+    private static final String localFilePath = "/chenyi/open_file/bms/qrcode";
+    private static final String urlPrefix = "http://lq.ailishi.org:4032/chenyi/static/bms/qrcode/";
+    private static final String fileSuffix = ".jpg";
+    private static final String imageFormat = "jpg";
+
+    /**
+     * 根据内容,生成指定宽高、指定格式的二维码图片
+     *
+     * @param content 内容
+     * @return 生成的二维码访问路径
+     */
+    public static String generate(String content) {
+        String url = null;
+        try {
+            //二维码对象
+            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, WIDTH, HEIGHT);
+            //文件存储的本地目录
+            File outputFile = new File(localFilePath + content + fileSuffix);
+            writeToFile(bitMatrix, outputFile);
+            //返回网络访问路径
+            url = urlPrefix + content + fileSuffix;
+        } catch (Exception e) {
+            log.error("二维码生成失败", e);
+        }
+        return url;
+    }
+
+    /**
+     * 生成二维码并存储至本地磁盘
+     *
+     * @param matrix 二维码属性对象
+     * @param file   文件路径
+     */
+    private static void writeToFile(BitMatrix matrix, File file) throws IOException {
+        //渲染图片
+        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) ? BLACK : WHITE);
+            }
+        }
+        //写入文件
+        ImageIO.write(image, QRCodeUtil.imageFormat, file);
+    }
+}

+ 2 - 2
src/main/resources/application-dev.yml

@@ -24,5 +24,5 @@ spring:
 mybatis-plus:
   type-aliases-package: com.zy.bms.entity
   mapper-locations: classpath:mapper/*.xml
-#  configuration:
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

+ 2 - 0
src/main/resources/mapper/UbiInfoStateMapper.xml

@@ -8,6 +8,8 @@
             t1.username,
             t1.password,
             t1.sn,
+            t1.remark,
+            t2.sim,
             t1.create_time,
             t1.group_id,
             t2.freq,