【新增】设备激活接口

This commit is contained in:
MichaelWin
2026-01-27 16:43:21 +08:00
parent c93a74e9a5
commit 6da2b05345
14 changed files with 304 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
package com.corewing.app.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class DeviceActivationRequest {
@ApiModelProperty(value = "MAC地址", required = true)
@NotBlank(message = "MAC地址不能为空")
private String mac;
}

View File

@@ -0,0 +1,40 @@
package com.corewing.app.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.corewing.app.common.base.CommonEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 设备表
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("biz_device")
public class BizDevice extends CommonEntity {
@TableId
@ApiModelProperty("设备id")
private String id;
@ApiModelProperty("设备mac地址")
private String deviceMac;
@ApiModelProperty("状态")
private String status;
@ApiModelProperty("公布状态")
private String publicStatus;
@ApiModelProperty("排序")
private int sortCode;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("扩展字段")
private String extJson;
}

View File

@@ -0,0 +1,45 @@
package com.corewing.app.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.corewing.app.common.base.CommonEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 设备激活表
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("biz_device_activation")
public class BizDeviceActivation extends CommonEntity {
@TableId
@ApiModelProperty("激活id")
private String id;
@ApiModelProperty("设备mac地址")
private String deviceMac;
@ApiModelProperty("设备id")
private String deviceId;
@ApiModelProperty("激活时间")
private Date activationTime;
@ApiModelProperty("用户id")
private Long userId;
@ApiModelProperty("激活ip")
private String activationIp;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("扩展字段")
private String extJson;
}

View File

@@ -0,0 +1,38 @@
package com.corewing.app.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.corewing.app.common.base.CommonEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 设备型号表
*/
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("biz_device_category")
public class BizDeviceCategory extends CommonEntity {
@TableId
@ApiModelProperty("设备型号id")
private String id;
@ApiModelProperty("设备型号缩略图")
private String thumbnail;
@ApiModelProperty("设备型号名称")
private String deviceName;
@ApiModelProperty("排序")
private int sortCode;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("扩展字段")
private String extJson;
}

View File

@@ -0,0 +1,9 @@
package com.corewing.app.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.corewing.app.entity.BizDeviceActivation;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BizDeviceActivationMapper extends BaseMapper<BizDeviceActivation> {
}

View File

@@ -0,0 +1,9 @@
package com.corewing.app.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.corewing.app.entity.BizDeviceCategory;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BizDeviceCategoryMapper extends BaseMapper<BizDeviceCategory> {
}

View File

@@ -0,0 +1,9 @@
package com.corewing.app.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.corewing.app.entity.BizDevice;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BizDeviceMapper extends BaseMapper<BizDevice> {
}

View File

@@ -0,0 +1,33 @@
package com.corewing.app.modules.app;
import com.corewing.app.common.Result;
import com.corewing.app.dto.DeviceActivationRequest;
import com.corewing.app.service.BizDeviceActivationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 产品激活接口
*/
@Api(tags = "产品激活")
@RestController
@RequestMapping("/api/app/device")
public class AppDeviceController {
@Resource
private BizDeviceActivationService activationService;
@ApiOperation("激活接口")
@PostMapping("activation")
public Result<Boolean> activation(@RequestBody DeviceActivationRequest deviceActivationRequest) {
return Result.success(activationService.activation(deviceActivationRequest));
}
}

View File

@@ -0,0 +1,9 @@
package com.corewing.app.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.corewing.app.dto.DeviceActivationRequest;
import com.corewing.app.entity.BizDeviceActivation;
public interface BizDeviceActivationService extends IService<BizDeviceActivation> {
Boolean activation(DeviceActivationRequest deviceActivationRequest);
}

View File

@@ -0,0 +1,8 @@
package com.corewing.app.service;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.corewing.app.entity.BizDeviceCategory;
public interface BizDeviceCategoryService extends IService<BizDeviceCategory> {
}

View File

@@ -0,0 +1,7 @@
package com.corewing.app.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.corewing.app.entity.BizDevice;
public interface BizDeviceService extends IService<BizDevice> {
}

View File

@@ -0,0 +1,60 @@
package com.corewing.app.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.corewing.app.dto.DeviceActivationRequest;
import com.corewing.app.entity.BizDevice;
import com.corewing.app.entity.BizDeviceActivation;
import com.corewing.app.mapper.BizDeviceActivationMapper;
import com.corewing.app.service.BizDeviceActivationService;
import com.corewing.app.service.BizDeviceService;
import com.corewing.app.util.CommonServletUtil;
import com.corewing.app.util.IpUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Service
public class BizDeviceActivationServiceImpl extends ServiceImpl<BizDeviceActivationMapper, BizDeviceActivation> implements BizDeviceActivationService {
@Resource
private BizDeviceService deviceService;
@Override
public Boolean activation(DeviceActivationRequest deviceActivationRequest) {
Object loginId = StpUtil.getLoginId();
LambdaQueryWrapper<BizDeviceActivation> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BizDeviceActivation::getDeviceMac, deviceActivationRequest.getMac());
BizDeviceActivation checkDeviceActivation = getOne(wrapper);
if(checkDeviceActivation != null) {
// 该用户已经激活过该设备
if(checkDeviceActivation.getUserId().equals(loginId)) {
return true;
}
return updateById(checkDeviceActivation);
}
// 校验是否为酷翼飞控设备
LambdaQueryWrapper<BizDevice> checkDeviceWrapper = new LambdaQueryWrapper<>();
checkDeviceWrapper.eq(BizDevice::getDeviceMac, deviceActivationRequest.getMac());
List<BizDevice> list = deviceService.list(checkDeviceWrapper);
if(list.isEmpty()) {
throw new RuntimeException("该设备不是酷翼官方产品");
}
BizDevice bizDevice = list.get(0);
// 执行新设备绑定激活
BizDeviceActivation deviceActivation = new BizDeviceActivation();
deviceActivation.setDeviceMac(bizDevice.getDeviceMac());
deviceActivation.setActivationIp(IpUtil.getClientIp(CommonServletUtil.getRequest()));
deviceActivation.setActivationTime(new Date());
deviceActivation.setUserId(Long.valueOf(loginId.toString()));
deviceActivation.setDeviceId(bizDevice.getId());
return this.saveOrUpdate(deviceActivation);
}
}

View File

@@ -0,0 +1,11 @@
package com.corewing.app.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.corewing.app.entity.BizDeviceCategory;
import com.corewing.app.mapper.BizDeviceCategoryMapper;
import com.corewing.app.service.BizDeviceCategoryService;
import org.springframework.stereotype.Service;
@Service
public class BizDeviceCategoryServiceImpl extends ServiceImpl<BizDeviceCategoryMapper, BizDeviceCategory> implements BizDeviceCategoryService {
}

View File

@@ -0,0 +1,11 @@
package com.corewing.app.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.corewing.app.entity.BizDevice;
import com.corewing.app.mapper.BizDeviceMapper;
import com.corewing.app.service.BizDeviceService;
import org.springframework.stereotype.Service;
@Service
public class BizDeviceServiceImpl extends ServiceImpl<BizDeviceMapper, BizDevice> implements BizDeviceService {
}