设备绑定,解绑

This commit is contained in:
2025-07-08 09:00:14 +08:00
parent 6b2ebf2414
commit 43f6f2ca0b
10 changed files with 207 additions and 60 deletions

View File

@ -0,0 +1,31 @@
package com.fuyuanshen.equipment.domain.dto;
import com.fuyuanshen.common.core.validate.EditGroup;
import com.fuyuanshen.common.mybatis.core.domain.BaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 绑定设备参数
*/
@Data
public class AppDeviceBo {
/**
* 设备IMEI
*/
private String deviceImei;
/**
* 设备MAC
*/
private String deviceMac;
/**
* 通讯方式 0:4G; 1:蓝牙
*/
@NotNull(message = "通讯方式不能为空", groups = { EditGroup.class })
private Integer communicationMode;
}

View File

@ -65,4 +65,6 @@ public class DeviceQueryCriteria {
@Schema(name = "通讯方式", example = "0:4G;1:蓝牙")
private Integer communicationMode;
/* app绑定用户id */
private Long bindingUserId;
}

View File

@ -0,0 +1,24 @@
package com.fuyuanshen.equipment.domain.vo;
import lombok.Data;
@Data
public class AppDeviceVo {
private Long id;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备IMEI
*/
private String deviceImei;
/**
* 设备MAC
*/
private String deviceMac;
}

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -31,4 +32,5 @@ public interface DeviceMapper extends BaseMapper<Device> {
List<Device> findAllDevices(@Param("criteria") DeviceQueryCriteria criteria);
Page<AppDeviceVo> queryAppDeviceList(Page<AppDeviceVo> page,@Param("criteria") DeviceQueryCriteria criteria);
}

View File

@ -3,10 +3,13 @@ package com.fuyuanshen.equipment.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fuyuanshen.common.core.domain.PageResult;
import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.dto.AppDeviceBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;
import java.io.IOException;
@ -81,4 +84,10 @@ public interface DeviceService extends IService<Device> {
* @param deviceForm
*/
void unbindDevice(DeviceForm deviceForm);
TableDataInfo<AppDeviceVo> queryAppDeviceList(DeviceQueryCriteria bo, PageQuery pageQuery);
int bindDevice(AppDeviceBo bo);
int unBindDevice(Long id);
}

View File

@ -1,21 +1,30 @@
package com.fuyuanshen.equipment.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fuyuanshen.common.core.domain.model.LoginUser;
import com.fuyuanshen.common.mybatis.core.page.PageQuery;
import com.fuyuanshen.common.mybatis.core.page.TableDataInfo;
import com.fuyuanshen.common.satoken.utils.AppLoginHelper;
import com.fuyuanshen.common.satoken.utils.LoginHelper;
import com.fuyuanshen.customer.domain.Customer;
import com.fuyuanshen.customer.mapper.CustomerMapper;
import com.fuyuanshen.equipment.constants.DeviceConstants;
import com.fuyuanshen.equipment.domain.Device;
import com.fuyuanshen.equipment.domain.DeviceType;
import com.fuyuanshen.equipment.domain.dto.AppDeviceBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm;
import com.fuyuanshen.equipment.domain.query.DeviceQueryCriteria;
import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria;
import com.fuyuanshen.equipment.domain.vo.AppDeviceVo;
import com.fuyuanshen.equipment.domain.vo.CustomerVo;
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 com.fuyuanshen.equipment.service.DeviceService;
@ -306,5 +315,72 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
}
@Override
public TableDataInfo<AppDeviceVo> queryAppDeviceList(DeviceQueryCriteria bo, PageQuery pageQuery) {
Long userId = AppLoginHelper.getUserId();
bo.setBindingUserId(userId);
Page<AppDeviceVo> result = baseMapper.queryAppDeviceList(pageQuery.build(), bo);
return TableDataInfo.build(result);
}
@Override
public int bindDevice(AppDeviceBo bo) {
Integer mode = bo.getCommunicationMode();
Long userId = AppLoginHelper.getUserId();
if(mode == CommunicationModeEnum.FOUR_G.getValue()){
String deviceImei = bo.getDeviceImei();
QueryWrapper<Device> qw = new QueryWrapper<Device>()
.eq("device_imei", deviceImei);
List<Device> devices = baseMapper.selectList(qw);
if(devices.isEmpty()){
throw new RuntimeException("请先将设备入库!!!");
}
Device device = devices.get(0);
if(device.getBindingStatus()!=null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()){
throw new RuntimeException("设备已绑定");
}
UpdateWrapper<Device> deviceUpdateWrapper = new UpdateWrapper<>();
deviceUpdateWrapper.eq("id", device.getId())
.set("binding_status", BindingStatusEnum.BOUND.getCode())
.set("binding_user_id",userId);;
return baseMapper.update(null, deviceUpdateWrapper);
}else if(mode == CommunicationModeEnum.BLUETOOTH.getValue()){
String deviceMac = bo.getDeviceMac();
QueryWrapper<Device> qw = new QueryWrapper<Device>()
.eq("device_mac", deviceMac);
List<Device> devices = baseMapper.selectList(qw);
if(devices.isEmpty()){
throw new RuntimeException("请先将设备入库!!!");
}
Device device = devices.get(0);
if(device.getBindingStatus() != null && device.getBindingStatus() == BindingStatusEnum.BOUND.getCode()){
throw new RuntimeException("设备已绑定");
}
UpdateWrapper<Device> deviceUpdateWrapper = new UpdateWrapper<>();
deviceUpdateWrapper.eq("id", device.getId())
.set("binding_status", BindingStatusEnum.BOUND.getCode())
.set("binding_user_id",userId);
return baseMapper.update(null, qw);
}else{
throw new RuntimeException("通讯方式错误");
}
}
@Override
public int unBindDevice(Long id) {
Device device = baseMapper.selectById(id);
if(device == null){
throw new RuntimeException("请先将设备入库!!!");
}
DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType());
String mode = deviceType.getCommunicationMode();
UpdateWrapper<Device> deviceUpdateWrapper = new UpdateWrapper<>();
deviceUpdateWrapper.eq("id", device.getId())
.set("binding_status", BindingStatusEnum.UNBOUND.getCode());
return baseMapper.update(null, deviceUpdateWrapper);
}
}

View File

@ -92,5 +92,14 @@
</where>
order by d.id desc
</select>
<select id="queryAppDeviceList" resultType="com.fuyuanshen.equipment.domain.vo.AppDeviceVo">
select
d.id, d.device_name, d.device_pic, d.device_mac, d.device_sn,
d.device_status, d.create_time, d.update_time, d.longitude, d.latitude,
d.customer_id, d.current_owner_id, d.original_owner_id, d.customer_name,
d.device_imei, d.tenant_id
from device d
where d.binding_user_id = #{criteria.bindingUserId}
</select>
</mapper>