From e5c6cc664dffd65f84d6e232bca89ed74b9584ab Mon Sep 17 00:00:00 2001 From: daiyongfei <974332738@qq.com> Date: Sat, 21 Jun 2025 17:16:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/domain/DeviceAssignments.java | 3 +- .../mapper/DeviceAssignmentsMapper.java | 1 + .../modules/system/rest/DeviceController.java | 7 +- .../service/impl/DeviceServiceImpl.java | 72 ++++++++++++++----- .../resources/mapper/system/DeviceMapper.xml | 10 +-- 5 files changed, 65 insertions(+), 28 deletions(-) diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/DeviceAssignments.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/DeviceAssignments.java index fb31970..e4f26b3 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/DeviceAssignments.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/DeviceAssignments.java @@ -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 未授权 diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/mapper/DeviceAssignmentsMapper.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/mapper/DeviceAssignmentsMapper.java index 2e52a09..4303d24 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/mapper/DeviceAssignmentsMapper.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/mapper/DeviceAssignmentsMapper.java @@ -14,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper; public interface DeviceAssignmentsMapper extends BaseMapper { + } diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/DeviceController.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/DeviceController.java index 18f84fe..c23ca8e 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/DeviceController.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/DeviceController.java @@ -141,12 +141,7 @@ public class DeviceController { @ApiOperation("分配客户") @PutMapping(value = "/assignCustomer") public ResponseVO 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); } diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/DeviceServiceImpl.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/DeviceServiceImpl.java index 2d20d10..65f5408 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/DeviceServiceImpl.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/DeviceServiceImpl.java @@ -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 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 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 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 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 impleme // 防止管理员误操作 AdminCheckUtil.checkIfSuperAdmin(currentUser); // 获取分配用户信息 - User user = userService.findById(customerVo.getCustomerId()); + User assignUser = userService.findById(customerVo.getCustomerId()); + // 获取分配设备信息 List 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 = new ArrayList<>(); for (Device device : devices) { // 如果设备已分配给需要分配的客户,则跳过 - if (device.getCustomerId() != null && device.getCustomerId().equals(customerVo.getCustomerId())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceAssignments::getDeviceId, device.getId()).eq(DeviceAssignments::getAssigneeId, customerVo.getCustomerId()).ne(DeviceAssignments::getActive, DeviceActiveStatusEnum.INACTIVE.getCode()); + List deviceAssignments = deviceAssignmentsMapper.selectList(wrapper); + if (CollectionUtil.isNotEmpty(deviceAssignments)) { + log.info("设备 {} 已分配给客户 {}", device.getDeviceName(), device.getCustomerName()); continue; } + // 更改分配客户 + QueryWrapper 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().eq(DeviceAssignments::getDeviceId, device.getId()).eq(DeviceAssignments::getAssigneeId, currentUser.getId()).eq(DeviceAssignments::getActive, DeviceActiveStatusEnum.ACTIVE.getCode())); + + LambdaQueryWrapper 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 ancestorsById = userMapper.findAncestorsById(currentUser.getId()); @@ -385,6 +420,9 @@ public class DeviceServiceImpl extends ServiceImpl impleme // 创建并保存设备类型授权记录 createAndSaveDeviceTypeGrants(device, currentUser, customerVo, deviceTypeGrants); } + + this.updateBatchById(devices); + deviceTypeGrantsService.saveBatch(deviceTypeGrants); // diff --git a/fys-system/src/main/resources/mapper/system/DeviceMapper.xml b/fys-system/src/main/resources/mapper/system/DeviceMapper.xml index 3888524..cb419ce 100644 --- a/fys-system/src/main/resources/mapper/system/DeviceMapper.xml +++ b/fys-system/src/main/resources/mapper/system/DeviceMapper.xml @@ -39,9 +39,11 @@