查询设备

This commit is contained in:
2025-06-21 17:16:33 +08:00
parent f9a340c77c
commit e5c6cc664d
5 changed files with 65 additions and 28 deletions

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
/** /**
@ -54,7 +55,7 @@ public class DeviceAssignments {
/** /**
* 分配时间 * 分配时间
*/ */
private Date assignedAt; private LocalDateTime assignedAt;
/** /**
* 0 未授权 * 0 未授权

View File

@ -14,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
public interface DeviceAssignmentsMapper extends BaseMapper<DeviceAssignments> { public interface DeviceAssignmentsMapper extends BaseMapper<DeviceAssignments> {
} }

View File

@ -141,12 +141,7 @@ public class DeviceController {
@ApiOperation("分配客户") @ApiOperation("分配客户")
@PutMapping(value = "/assignCustomer") @PutMapping(value = "/assignCustomer")
public ResponseVO<Object> assignCustomer(@Validated @RequestBody CustomerVo customerVo) { public ResponseVO<Object> assignCustomer(@Validated @RequestBody CustomerVo customerVo) {
try {
deviceService.assignCustomer(customerVo); deviceService.assignCustomer(customerVo);
} catch (Exception e) {
log.error("updateDevice error: " + e.getMessage());
return ResponseVO.fail(e.getMessage());
}
return ResponseVO.success(null); return ResponseVO.success(null);
} }

View File

@ -3,8 +3,10 @@ package com.fuyuanshen.modules.system.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fuyuanshen.constants.DeviceConstants; import com.fuyuanshen.constants.DeviceConstants;
@ -21,10 +23,7 @@ import com.fuyuanshen.modules.system.enums.BindingStatusEnum;
import com.fuyuanshen.modules.system.enums.DeviceActiveStatusEnum; import com.fuyuanshen.modules.system.enums.DeviceActiveStatusEnum;
import com.fuyuanshen.modules.system.enums.DeviceAuthorizationStatus; import com.fuyuanshen.modules.system.enums.DeviceAuthorizationStatus;
import com.fuyuanshen.modules.system.enums.DeviceStatusEnum; import com.fuyuanshen.modules.system.enums.DeviceStatusEnum;
import com.fuyuanshen.modules.system.mapper.DeviceMapper; import com.fuyuanshen.modules.system.mapper.*;
import com.fuyuanshen.modules.system.mapper.DeviceTypeGrantsMapper;
import com.fuyuanshen.modules.system.mapper.DeviceTypeMapper;
import com.fuyuanshen.modules.system.mapper.UserMapper;
import com.fuyuanshen.modules.system.mapper.app.APPDeviceMapper; import com.fuyuanshen.modules.system.mapper.app.APPDeviceMapper;
import com.fuyuanshen.modules.system.service.DeviceAssignmentsService; import com.fuyuanshen.modules.system.service.DeviceAssignmentsService;
import com.fuyuanshen.modules.system.service.DeviceService; import com.fuyuanshen.modules.system.service.DeviceService;
@ -45,6 +44,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -79,6 +79,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
private final APPDeviceMapper appDeviceMapper; private final APPDeviceMapper appDeviceMapper;
private final DeviceTypeGrantsMapper deviceTypeGrantsMapper; private final DeviceTypeGrantsMapper deviceTypeGrantsMapper;
private final DeviceAssignmentsService deviceAssignmentsService; private final DeviceAssignmentsService deviceAssignmentsService;
private final DeviceAssignmentsMapper deviceAssignmentsMapper;
private final DeviceTypeGrantsService deviceTypeGrantsService; private final DeviceTypeGrantsService deviceTypeGrantsService;
@Autowired @Autowired
@ -106,7 +107,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 只能看到自己的创建的设备,以及被分配的设备。 // 只能看到自己的创建的设备,以及被分配的设备。
if (onlineuser.getTenantId() != null && !onlineuser.getTenantId().equals(UserConstants.SUPER_ADMIN_ID)) { if (onlineuser.getTenantId() != null && !onlineuser.getTenantId().equals(UserConstants.SUPER_ADMIN_ID)) {
criteria.setTenantId(onlineuser.getTenantId()); // criteria.setTenantId(onlineuser.getTenantId());
criteria.setCurrentOwnerId(onlineuser.getId()); criteria.setCurrentOwnerId(onlineuser.getId());
} }
@ -199,7 +200,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 新增设备类型记录 // 新增设备类型记录
DeviceAssignments assignments = new DeviceAssignments(); DeviceAssignments assignments = new DeviceAssignments();
assignments.setDeviceId(device.getId()); assignments.setDeviceId(device.getId());
assignments.setAssignedAt(new Date()); assignments.setAssignedAt(LocalDateTime.now());
// 分配者 // 分配者
assignments.setAssignerId(currentUser.getId()); assignments.setAssignerId(currentUser.getId());
// 接收者 // 接收者
@ -297,7 +298,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
deviceAssignments.setDeviceId(deviceId); deviceAssignments.setDeviceId(deviceId);
deviceAssignments.setFromCustomerId(currentUser.getId()); deviceAssignments.setFromCustomerId(currentUser.getId());
deviceAssignments.setToCustomerId(customerVo.getCustomerId()); deviceAssignments.setToCustomerId(customerVo.getCustomerId());
deviceAssignments.setAssignedAt(new Date()); deviceAssignments.setAssignedAt(LocalDateTime.now());
deviceAssignments.setDeviceTypeGranted(DeviceAuthorizationStatus.AUTHORIZED.getValue()); deviceAssignments.setDeviceTypeGranted(DeviceAuthorizationStatus.AUTHORIZED.getValue());
assignments.add(deviceAssignments); assignments.add(deviceAssignments);
@ -341,27 +342,61 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 防止管理员误操作 // 防止管理员误操作
AdminCheckUtil.checkIfSuperAdmin(currentUser); AdminCheckUtil.checkIfSuperAdmin(currentUser);
// 获取分配用户信息 // 获取分配用户信息
User user = userService.findById(customerVo.getCustomerId()); User assignUser = userService.findById(customerVo.getCustomerId());
// 获取分配设备信息 // 获取分配设备信息
List<Device> devices = deviceMapper.selectBatchIds(customerVo.getDeviceIds()); List<Device> devices = deviceMapper.selectBatchIds(customerVo.getDeviceIds());
// Timestamp timestamp = new Timestamp(System.currentTimeMillis());
for (Device device : devices) {
device.setCustomerId(user.getId());
device.setCustomerName(user.getNickName());
// device.setUpdateTime(timestamp);
}
this.updateBatchById(devices);
// 批量更新设备状态 // 批量更新设备状态
List<DeviceTypeGrants> deviceTypeGrants = new ArrayList<>(); List<DeviceTypeGrants> deviceTypeGrants = new ArrayList<>();
for (Device device : devices) { for (Device device : devices) {
// 如果设备已分配给需要分配的客户,则跳过 // 如果设备已分配给需要分配的客户,则跳过
if (device.getCustomerId() != null && device.getCustomerId().equals(customerVo.getCustomerId())) { LambdaQueryWrapper<DeviceAssignments> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(DeviceAssignments::getDeviceId, device.getId()).eq(DeviceAssignments::getAssigneeId, customerVo.getCustomerId()).ne(DeviceAssignments::getActive, DeviceActiveStatusEnum.INACTIVE.getCode());
List<DeviceAssignments> deviceAssignments = deviceAssignmentsMapper.selectList(wrapper);
if (CollectionUtil.isNotEmpty(deviceAssignments)) {
log.info("设备 {} 已分配给客户 {}", device.getDeviceName(), device.getCustomerName());
continue; continue;
} }
// 更改分配客户
QueryWrapper<DeviceAssignments> q = new QueryWrapper<>();
q.eq("device_id", device.getId());
q.eq("assignee_id", currentUser.getId());
q.ne("active", DeviceActiveStatusEnum.INACTIVE.getCode());
DeviceAssignments d = new DeviceAssignments();
d.setAssigneeName(assignUser.getUsername());
deviceAssignmentsMapper.update(d, q);
// 设备失效
// 获取用户的设备记录
DeviceAssignments assignment = deviceAssignmentsMapper.selectOne(new LambdaQueryWrapper<DeviceAssignments>().eq(DeviceAssignments::getDeviceId, device.getId()).eq(DeviceAssignments::getAssigneeId, currentUser.getId()).eq(DeviceAssignments::getActive, DeviceActiveStatusEnum.ACTIVE.getCode()));
LambdaQueryWrapper<DeviceAssignments> q1 = new LambdaQueryWrapper<>();
q1.eq(DeviceAssignments::getDeviceId, device.getId()).ne(DeviceAssignments::getAssigneeId, currentUser.getId()).like(DeviceAssignments::getLever, assignment.getLever());
DeviceAssignments d1 = new DeviceAssignments();
d1.setActive(DeviceActiveStatusEnum.INACTIVE.getCode());
deviceAssignmentsMapper.update(d1, q1);
// device.setCustomerId(assignUser.getId());
// device.setCustomerName(assignUser.getUsername());
// 新增设备类型记录
DeviceAssignments assignments = new DeviceAssignments();
assignments.setDeviceId(device.getId());
assignments.setAssignedAt(LocalDateTime.now());
// 分配者
assignments.setAssignerId(currentUser.getId());
assignments.setAssignerName(currentUser.getUsername());
// 接收者
assignments.setAssigneeId(assignUser.getId());
// assignments.setAssigneeName(assignUser.getUsername());
assignments.setActive(DeviceActiveStatusEnum.ACTIVE.getCode());
String lever = assignment.getLever() + ":" + assignUser.getId();
assignments.setLever(lever);
deviceAssignmentsService.save(assignments);
// // 获取当前用户的所有祖先用户 // // 获取当前用户的所有祖先用户
// List<User> ancestorsById = userMapper.findAncestorsById(currentUser.getId()); // List<User> ancestorsById = userMapper.findAncestorsById(currentUser.getId());
@ -385,6 +420,9 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 创建并保存设备类型授权记录 // 创建并保存设备类型授权记录
createAndSaveDeviceTypeGrants(device, currentUser, customerVo, deviceTypeGrants); createAndSaveDeviceTypeGrants(device, currentUser, customerVo, deviceTypeGrants);
} }
this.updateBatchById(devices);
deviceTypeGrantsService.saveBatch(deviceTypeGrants); deviceTypeGrantsService.saveBatch(deviceTypeGrants);
// //

View File

@ -39,9 +39,11 @@
<!-- 分页查询设备 --> <!-- 分页查询设备 -->
<select id="findAll" resultType="com.fuyuanshen.modules.system.domain.Device"> <select id="findAll" resultType="com.fuyuanshen.modules.system.domain.Device">
select select
d.id, d.customer_id, d.customer_name, d.device_name, d.id,d.device_name,
d.device_pic, d.device_mac, d.device_sn, d.create_by, d.update_by,d.device_imei, d.device_pic, d.device_mac, d.device_sn, d.update_by,d.device_imei,
d.create_time, d.update_time, d.device_type, d.remark, d.device_status, d.binding_status,t.type_name d.update_time, d.device_type, d.remark, d.binding_status,t.type_name,
da.assignee_id AS customerId, da.assignee_name AS customerName, da.active AS deviceStatus,
da.assigned_at AS create_time , da.assigner_name AS create_by
from device d from device d
LEFT JOIN device_type t ON d.device_type = t.id LEFT JOIN device_type t ON d.device_type = t.id
LEFT JOIN device_assignments da ON da.device_id = d.id LEFT JOIN device_assignments da ON da.device_id = d.id
@ -60,7 +62,7 @@
and d.device_type = #{criteria.deviceType} and d.device_type = #{criteria.deviceType}
</if> </if>
<if test="criteria.deviceStatus != null"> <if test="criteria.deviceStatus != null">
and d.device_status = #{criteria.deviceStatus} and da.active = #{criteria.deviceStatus}
</if> </if>
<if test="criteria.createTime != null and criteria.createTime.size() != 0"> <if test="criteria.createTime != null and criteria.createTime.size() != 0">
and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]} and d.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}