查询设备

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 lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
/**
@ -54,7 +55,7 @@ public class DeviceAssignments {
/**
* 分配时间
*/
private Date assignedAt;
private LocalDateTime assignedAt;
/**
* 0 未授权

View File

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

View File

@ -141,12 +141,7 @@ public class DeviceController {
@ApiOperation("分配客户")
@PutMapping(value = "/assignCustomer")
public ResponseVO<Object> assignCustomer(@Validated @RequestBody CustomerVo customerVo) {
try {
deviceService.assignCustomer(customerVo);
} catch (Exception e) {
log.error("updateDevice error: " + e.getMessage());
return ResponseVO.fail(e.getMessage());
}
deviceService.assignCustomer(customerVo);
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.collection.CollectionUtil;
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.DeviceAuthorizationStatus;
import com.fuyuanshen.modules.system.enums.DeviceStatusEnum;
import com.fuyuanshen.modules.system.mapper.DeviceMapper;
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.*;
import com.fuyuanshen.modules.system.mapper.app.APPDeviceMapper;
import com.fuyuanshen.modules.system.service.DeviceAssignmentsService;
import com.fuyuanshen.modules.system.service.DeviceService;
@ -45,6 +44,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -79,6 +79,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
private final APPDeviceMapper appDeviceMapper;
private final DeviceTypeGrantsMapper deviceTypeGrantsMapper;
private final DeviceAssignmentsService deviceAssignmentsService;
private final DeviceAssignmentsMapper deviceAssignmentsMapper;
private final DeviceTypeGrantsService deviceTypeGrantsService;
@Autowired
@ -106,7 +107,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 只能看到自己的创建的设备,以及被分配的设备。
if (onlineuser.getTenantId() != null && !onlineuser.getTenantId().equals(UserConstants.SUPER_ADMIN_ID)) {
criteria.setTenantId(onlineuser.getTenantId());
// criteria.setTenantId(onlineuser.getTenantId());
criteria.setCurrentOwnerId(onlineuser.getId());
}
@ -199,7 +200,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 新增设备类型记录
DeviceAssignments assignments = new DeviceAssignments();
assignments.setDeviceId(device.getId());
assignments.setAssignedAt(new Date());
assignments.setAssignedAt(LocalDateTime.now());
// 分配者
assignments.setAssignerId(currentUser.getId());
// 接收者
@ -297,7 +298,7 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
deviceAssignments.setDeviceId(deviceId);
deviceAssignments.setFromCustomerId(currentUser.getId());
deviceAssignments.setToCustomerId(customerVo.getCustomerId());
deviceAssignments.setAssignedAt(new Date());
deviceAssignments.setAssignedAt(LocalDateTime.now());
deviceAssignments.setDeviceTypeGranted(DeviceAuthorizationStatus.AUTHORIZED.getValue());
assignments.add(deviceAssignments);
@ -341,27 +342,61 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 防止管理员误操作
AdminCheckUtil.checkIfSuperAdmin(currentUser);
// 获取分配用户信息
User user = userService.findById(customerVo.getCustomerId());
User assignUser = userService.findById(customerVo.getCustomerId());
// 获取分配设备信息
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<>();
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;
}
// 更改分配客户
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());
@ -385,6 +420,9 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
// 创建并保存设备类型授权记录
createAndSaveDeviceTypeGrants(device, currentUser, customerVo, deviceTypeGrants);
}
this.updateBatchById(devices);
deviceTypeGrantsService.saveBatch(deviceTypeGrants);
//

View File

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