#适配前端的二维码新增接口

This commit is contained in:
2026-05-15 10:58:51 +08:00
parent 45a5ce1e8e
commit 0ba48cdae5
5 changed files with 146 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package com.maibu.web.controller.system;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.maibu.core.business.dto.QrCodeGenerateRequest;
import com.maibu.core.business.sys_robot_qrcode.SysQrCode;
import com.maibu.core.domain.AjaxResult;
import com.maibu.service.ISysQrCodeService;
@@ -52,6 +53,7 @@ public class SysQrCodeController {
return AjaxResult.success(qrCodeService.selectBySerialNumber(serialNumber));
}
/*
@PreAuthorize("@ss.hasPermi('system:qrcode:generate')")
@ApiOperation("生成二维码并保存记录")
@PostMapping("/generate")
@@ -64,6 +66,18 @@ public class SysQrCodeController {
modelId, configId, typeId, countryId, provinceId);
return AjaxResult.success(qrCode);
}
*/
@PreAuthorize("@ss.hasPermi('system:qrcode:generate')")
@ApiOperation("生成二维码并保存记录")
@PostMapping("/generate")
public AjaxResult generate(@RequestBody QrCodeGenerateRequest request) {
SysQrCode qrCode = qrCodeService.generateQrCodeFromFrontend(request);
return AjaxResult.success(qrCode);
}
@PreAuthorize("@ss.hasPermi('system:qrcode:bind')")
@ApiOperation("绑定设备")

View File

@@ -0,0 +1,37 @@
package com.maibu.core.business.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("二维码生成请求")
public class QrCodeGenerateRequest {
@ApiModelProperty("型号")
private String model;
@ApiModelProperty("配置")
private String config;
@ApiModelProperty("类型")
private String type;
@ApiModelProperty("国家代码")
private String countryCode;
@ApiModelProperty("国家全称")
private String countryFullName;
@ApiModelProperty("省份代码")
private String provinceCode;
@ApiModelProperty("省份全称")
private String provinceFullName;
@ApiModelProperty("序列号")
private String serialNumber;
@ApiModelProperty("二维码Base64数据")
private String qrcode;
}

View File

@@ -1,54 +1,78 @@
package com.maibu.core.business.sys_robot_qrcode;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@ApiModel("二维码管理")
@TableName("sys_qr_code")
public class SysQrCode implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("主键ID")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty("序列号")
private String serialNumber;
@ApiModelProperty("型号ID")
private Long modelId;
@ApiModelProperty("配置ID")
private Long configId;
@ApiModelProperty("类型ID")
private Long typeId;
@ApiModelProperty("国家ID")
private Long countryId;
@ApiModelProperty("省份ID")
private Long provinceId;
@ApiModelProperty("二维码图片URL")
private String qrCodeUrl;
@ApiModelProperty("二维码内容")
private String qrCodeContent;
@ApiModelProperty("二维码Base64图片数据")
private String qrCodeBase64;
@ApiModelProperty("状态")
private Integer status;
@ApiModelProperty("设备ID")
private Long deviceId;
@ApiModelProperty("绑定时间")
private LocalDateTime bindTime;
@ApiModelProperty("创建时间")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@ApiModelProperty("更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@ApiModelProperty("创建者")
@TableField(fill = FieldFill.INSERT)
private String createBy;
@ApiModelProperty("更新者")
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("删除标志")
@TableLogic
private Integer delFlag;
}
}

View File

@@ -2,6 +2,7 @@ package com.maibu.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.maibu.core.business.dto.QrCodeGenerateRequest;
import com.maibu.core.business.sys_robot_qrcode.SysQrCode;
import java.util.List;
@@ -22,4 +23,7 @@ public interface ISysQrCodeService extends IService<SysQrCode> {
boolean bindDevice(Long qrCodeId, Long deviceId);
boolean unbindDevice(Long qrCodeId);
SysQrCode generateQrCodeFromFrontend(QrCodeGenerateRequest request);
}

View File

@@ -8,6 +8,7 @@ import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.maibu.core.business.dto.QrCodeGenerateRequest;
import com.maibu.core.business.sys_robot_qrcode.*;
import com.maibu.mapper.*;
import com.maibu.service.ISysQrCodeService;
@@ -199,4 +200,69 @@ public class SysQrCodeServiceImpl extends ServiceImpl<SysQrCodeMapper, SysQrCode
qrCode.setBindTime(null);
return this.updateById(qrCode);
}
@Override
@Transactional(rollbackFor = Exception.class)
public SysQrCode generateQrCodeFromFrontend(QrCodeGenerateRequest request) {
SysRobotModel model = findModelByStoreValue(request.getModel());
SysRobotConfig config = findConfigByStoreValue(request.getConfig());
SysRobotType type = findTypeByStoreValue(request.getType());
SysRobotCountry country = findCountryByStoreValue(request.getCountryCode());
SysRobotProvince province = findProvinceByStoreValue(request.getProvinceCode());
if (model == null || config == null || type == null || country == null || province == null) {
throw new RuntimeException("基础数据不存在");
}
LambdaQueryWrapper<SysQrCode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysQrCode::getSerialNumber, request.getSerialNumber());
if (this.count(wrapper) > 0) {
throw new RuntimeException("序列号已存在");
}
SysQrCode qrCode = new SysQrCode();
qrCode.setSerialNumber(request.getSerialNumber());
qrCode.setModelId(model.getId());
qrCode.setConfigId(config.getId());
qrCode.setTypeId(type.getId());
qrCode.setCountryId(country.getId());
qrCode.setProvinceId(province.getId());
qrCode.setQrCodeBase64(request.getQrcode());
qrCode.setQrCodeContent(request.getSerialNumber());
qrCode.setStatus(0);
this.save(qrCode);
return qrCode;
}
private SysRobotModel findModelByStoreValue(String storeValue) {
LambdaQueryWrapper<SysRobotModel> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRobotModel::getStoreValue, storeValue);
return robotModelMapper.selectOne(wrapper);
}
private SysRobotConfig findConfigByStoreValue(String storeValue) {
LambdaQueryWrapper<SysRobotConfig> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRobotConfig::getStoreValue, storeValue);
return robotConfigMapper.selectOne(wrapper);
}
private SysRobotType findTypeByStoreValue(String storeValue) {
LambdaQueryWrapper<SysRobotType> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRobotType::getStoreValue, storeValue);
return robotTypeMapper.selectOne(wrapper);
}
private SysRobotCountry findCountryByStoreValue(String storeValue) {
LambdaQueryWrapper<SysRobotCountry> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRobotCountry::getStoreValue, storeValue);
return robotCountryMapper.selectOne(wrapper);
}
private SysRobotProvince findProvinceByStoreValue(String storeValue) {
LambdaQueryWrapper<SysRobotProvince> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysRobotProvince::getStoreValue, storeValue);
return robotProvinceMapper.selectOne(wrapper);
}
}