APP/小程序用户设备绑定

This commit is contained in:
2025-07-05 15:55:46 +08:00
parent 5322e84a92
commit ad82ab5fca
18 changed files with 376 additions and 98 deletions

View File

@ -0,0 +1,48 @@
package com.fuyuanshen.app.enums;
import com.fasterxml.jackson.annotation.JsonValue;
/**
* 用户类型枚举
*
* @author: 默苍璃
* @date: 2025-06-1811:14
*/
public enum UserType {
APP(0, "APP"), MINI_PROGRAM(1, "小程序");
private final int value;
private final String description;
UserType(int value, String description) {
this.value = value;
this.description = description;
}
@JsonValue
public int getValue() {
return value;
}
public String getDescription() {
return description;
}
/**
* 根据值获取对应的枚举
*
* @param value 枚举值
* @return 对应的枚举对象
*/
public static UserType fromValue(int value) {
for (UserType userType : values()) {
if (userType.getValue() == value) {
return userType;
}
}
throw new IllegalArgumentException("Invalid user type value: " + value);
}
}

View File

@ -0,0 +1,29 @@
package com.fuyuanshen.app.mapper.equipment;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fuyuanshen.app.domain.APPDeviceType;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author 97433
* @description 针对表【app_device_type(设备类型表)】的数据库操作Mapper
* @createDate 2025-06-24 11:16:18
* @Entity system.domain.AppDeviceType
*/
@Mapper
public interface AppDeviceTypeMapper extends BaseMapper<APPDeviceType> {
/**
* 查询设备类型列表
*
* @param criteria 查询条件
* @return 设备类型列表
*/
List<APPDeviceType> appTypeList(@Param("criteria") DeviceQueryCriteria criteria);
}

View File

@ -10,9 +10,19 @@ import com.fuyuanshen.app.domain.APPDevice;
import com.fuyuanshen.app.domain.APPDeviceType;
import com.fuyuanshen.app.domain.dto.APPUnbindDTO;
import com.fuyuanshen.app.domain.query.APPDeviceQueryCriteria;
import com.fuyuanshen.app.enums.UserType;
import com.fuyuanshen.app.mapper.equipment.APPDeviceMapper;
import com.fuyuanshen.app.mapper.equipment.AppDeviceTypeMapper;
import com.fuyuanshen.app.service.equipment.APPDeviceService;
import com.fuyuanshen.common.core.domain.PageResult;
import com.fuyuanshen.common.core.exception.BadRequestException;
import com.fuyuanshen.common.satoken.utils.LoginHelper;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.DeviceType;
import com.fuyuanshen.equipment.enums.BindingStatusEnum;
import com.fuyuanshen.equipment.enums.CommunicationModeEnum;
import com.fuyuanshen.equipment.mapper.DeviceMapper;
import com.fuyuanshen.equipment.mapper.DeviceTypeMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -34,6 +44,9 @@ import java.util.stream.Collectors;
public class APPDeviceServiceImpl extends ServiceImpl<APPDeviceMapper, APPDevice> implements APPDeviceService {
private final APPDeviceMapper appDeviceMapper;
private final DeviceMapper deviceMapper;
private final AppDeviceTypeMapper appDeviceTypeMapper;
private final DeviceTypeMapper deviceTypeMapper;
/**
@ -72,56 +85,58 @@ public class APPDeviceServiceImpl extends ServiceImpl<APPDeviceMapper, APPDevice
@Override
@Transactional
public void appBindDevice(APPDeviceQueryCriteria criteria) {
//
// List<Device> devices = new ArrayList<>();
//
// if (criteria.getCommunicationMode().equals(CommunicationModeEnum.BLUETOOTH.getValue())) {
// devices = deviceMapper.selectList(new QueryWrapper<Device>().eq("device_mac", criteria.getDeviceMac()));
// if (CollectionUtil.isEmpty(devices)) {
// throw new BadRequestException("请先将设备入库!!!");
// }
// List<APPDevice> appDevices = appDeviceMapper.selectList(new QueryWrapper<APPDevice>()
// .eq("device_mac", criteria.getDeviceMac()).eq("binding_type", UserType.APP.getValue()));
// if (CollectionUtil.isNotEmpty(appDevices)) {
// throw new BadRequestException("该设备已绑定!!!");
// }
// }
//
// if (criteria.getCommunicationMode().equals(CommunicationModeEnum.FOUR_G.getValue())) {
// devices = deviceMapper.selectList(new QueryWrapper<Device>().eq("device_imei", criteria.getDeviceImei()));
// if (CollectionUtil.isEmpty(devices)) {
// throw new BadRequestException("请先将设备入库!!!");
// }
// List<APPDevice> appDevices = appDeviceMapper.selectList(new QueryWrapper<APPDevice>()
// .eq("device_imei", criteria.getDeviceImei()).eq("binding_type", UserType.APP.getValue()));
// if (CollectionUtil.isNotEmpty(appDevices)) {
// throw new BadRequestException("该设备已绑定!!!");
// }
// }
//
// Device device = devices.get(0);
// device.setBindingStatus(BindingStatusEnum.BOUND.getCode());
// deviceMapper.updateById(device);
//
// APPDevice appDevice = new APPDevice();
// BeanUtil.copyProperties(device, appDevice);
// appDevice.setBindingType(UserType.APP.getValue());
// appDevice.setBindingStatus(BindingStatusEnum.BOUND.getCode());
// Long currentUserId = SecurityUtils.getCurrentUserId();
// appDevice.setCustomerId(currentUserId);
// appDevice.setCreateTime(new Timestamp(System.currentTimeMillis()));
// // 设备类型名称
// appDevice.setDeviceTypeName(device.getTypeName());
// appDeviceMapper.insert(appDevice);
//
// APPDeviceType appDeviceType = appDeviceTypeMapper.selectById(device.getDeviceType());
// if (appDeviceType == null) {
// DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType());
// APPDeviceType type = new APPDeviceType();
// BeanUtil.copyProperties(deviceType, type);
// type.setCustomerId(currentUserId);
// appDeviceTypeMapper.insert(type);
// }
List<Device> devices = new ArrayList<>();
if (criteria.getCommunicationMode().equals(CommunicationModeEnum.BLUETOOTH.getValue())) {
devices = deviceMapper.selectList(new QueryWrapper<Device>()
.eq("original_device_id", null)
.eq("device_mac", criteria.getDeviceMac()));
if (CollectionUtil.isEmpty(devices)) {
throw new BadRequestException("请先将设备入库!!!");
}
List<APPDevice> appDevices = appDeviceMapper.selectList(new QueryWrapper<APPDevice>()
.eq("device_mac", criteria.getDeviceMac()).eq("binding_type", UserType.APP.getValue()));
if (CollectionUtil.isNotEmpty(appDevices)) {
throw new BadRequestException("该设备已绑定!!!");
}
}
if (criteria.getCommunicationMode().equals(CommunicationModeEnum.FOUR_G.getValue())) {
devices = deviceMapper.selectList(new QueryWrapper<Device>()
.eq("original_device_id", null)
.eq("device_imei", criteria.getDeviceImei()));
if (CollectionUtil.isEmpty(devices)) {
throw new BadRequestException("请先将设备入库!!!");
}
List<APPDevice> appDevices = appDeviceMapper.selectList(new QueryWrapper<APPDevice>()
.eq("device_imei", criteria.getDeviceImei()).eq("binding_type", UserType.APP.getValue()));
if (CollectionUtil.isNotEmpty(appDevices)) {
throw new BadRequestException("该设备已绑定!!!");
}
}
Device device = devices.get(0);
device.setBindingStatus(BindingStatusEnum.BOUND.getCode());
deviceMapper.updateById(device);
APPDevice appDevice = new APPDevice();
BeanUtil.copyProperties(device, appDevice);
appDevice.setBindingType(UserType.APP.getValue());
appDevice.setBindingStatus(BindingStatusEnum.BOUND.getCode());
Long userId = LoginHelper.getUserId();
appDevice.setCustomerId(userId);
appDevice.setCreateTime(new Timestamp(System.currentTimeMillis()));
// 设备类型名称
appDevice.setDeviceTypeName(device.getTypeName());
appDeviceMapper.insert(appDevice);
APPDeviceType appDeviceType = appDeviceTypeMapper.selectById(device.getDeviceType());
if (appDeviceType == null) {
DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType());
APPDeviceType type = new APPDeviceType();
BeanUtil.copyProperties(deviceType, type);
type.setCustomerId(userId);
appDeviceTypeMapper.insert(type);
}
}

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuyuanshen.app.mapper.equipment.AppDeviceTypeMapper">
<resultMap id="BaseResultMap" type="com.fuyuanshen.app.domain.APPDeviceType">
<id property="id" column="id"/>
<result property="typeName" column="type_name"/>
<result property="isSupportBle" column="is_support_ble"/>
<result property="locateMode" column="locate_mode"/>
<result property="networkWay" column="network_way"/>
<result property="createBy" column="create_by"/>
<result property="updateBy" column="update_by"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="customerId" column="customer_id"/>
<result property="communicationMode" column="communication_mode"/>
</resultMap>
<sql id="Base_Column_List">
id
,type_name,is_support_ble,locate_mode,network_way,create_by,
update_by,create_time,update_time,customer_id,communication_mode
</sql>
<!-- 查询设备类型列表 -->
<select id="appTypeList" resultType="com.fuyuanshen.app.domain.APPDeviceType">
select d.* from app_device_type as d
<where>
and d.customer_id = #{criteria.customerId}
</where>
order by d.create_time desc
</select>
</mapper>