diff --git a/fys-common/src/main/java/com/fuyuanshen/config/AuthorityConfig.java b/fys-common/src/main/java/com/fuyuanshen/config/AuthorityConfig.java index afc4c4f..f713a99 100644 --- a/fys-common/src/main/java/com/fuyuanshen/config/AuthorityConfig.java +++ b/fys-common/src/main/java/com/fuyuanshen/config/AuthorityConfig.java @@ -39,4 +39,5 @@ public class AuthorityConfig { // 判断当前用户的所有权限是否包含接口上定义的权限 return elPermissions.contains("admin") || Arrays.stream(permissions).anyMatch(elPermissions::contains); } + } 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 1e4c40b..af60852 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 @@ -18,7 +18,7 @@ public class DeviceAssignments { * id */ @TableId(type = IdType.AUTO) - private Integer id; + private Long id; /** * 设备id diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java index fb2601b..653c72c 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java @@ -108,7 +108,7 @@ public class APPUser extends BaseEntity implements Serializable { */ @ApiModelProperty(value = "是否为admin账号", hidden = true) @TableField(value = "is_admin") - private Byte admin; + private Byte admin = 0; @TableField(exist = false) private Boolean isAdmin = false; diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/DeviceQueryCriteria.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/DeviceQueryCriteria.java index 9624b18..76bac9e 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/DeviceQueryCriteria.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/DeviceQueryCriteria.java @@ -49,6 +49,9 @@ public class DeviceQueryCriteria { private Long customerId; private Set customerIds; + @ApiModelProperty(value = "当前所有者") + private Long currentOwnerId; + @ApiModelProperty(value = "租户ID") private Long tenantId; 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 edd4a6e..9e77151 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 @@ -27,6 +27,7 @@ import com.fuyuanshen.modules.system.mapper.UserMapper; import com.fuyuanshen.modules.system.mapper.app.APPDeviceMapper; import com.fuyuanshen.modules.system.service.DeviceAssignmentsService; import com.fuyuanshen.modules.system.service.DeviceService; +import com.fuyuanshen.modules.system.service.DeviceTypeGrantsService; import com.fuyuanshen.modules.system.service.UserService; import com.fuyuanshen.modules.utils.NanoId; import com.fuyuanshen.utils.*; @@ -34,8 +35,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -71,7 +70,7 @@ public class DeviceServiceImpl extends ServiceImpl impleme private final APPDeviceMapper appDeviceMapper; private final DeviceTypeGrantsMapper deviceTypeGrantsMapper; private final DeviceAssignmentsService deviceAssignmentsService; - + private final DeviceTypeGrantsService deviceTypeGrantsService; @Autowired private UserService userService; @@ -98,7 +97,8 @@ 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()); } IPage devices = deviceMapper.findAll(criteria, page); @@ -257,6 +257,8 @@ public class DeviceServiceImpl extends ServiceImpl impleme } List assignments = new ArrayList<>(); + List deviceTypeGrants = new ArrayList<>(); + List devices = new ArrayList<>(); customerVo.getDeviceIds().forEach(deviceId -> { // 阻止重复分配 @@ -265,79 +267,42 @@ public class DeviceServiceImpl extends ServiceImpl impleme throw new BadRequestException("设备 " + device.getDeviceName() + " 已被分配给客户 " + device.getCustomerName()); } + // 自定义16位id + Long generatedId = NanoId.generate(16); + // -- 记录分配历史 DeviceAssignments deviceAssignments = new DeviceAssignments(); + deviceAssignments.setId(generatedId); deviceAssignments.setDeviceId(deviceId); deviceAssignments.setFromCustomerId(currentUser.getId()); deviceAssignments.setToCustomerId(customerVo.getCustomerId()); deviceAssignments.setAssignedAt(new Date()); deviceAssignments.setDeviceTypeGranted(DeviceAuthorizationStatus.AUTHORIZED.getValue()); assignments.add(deviceAssignments); + + // -- 授权设备类型给客户 + // QueryWrapper deviceTypeGrantsQueryWrapper = new QueryWrapper<>(); + // Long count = deviceTypeGrantsMapper.selectCount(deviceTypeGrantsQueryWrapper); + DeviceTypeGrants deviceTypeGrant = new DeviceTypeGrants(); + deviceTypeGrant.setGrantedAt(new Date()); + // 设备类型 + deviceTypeGrant.setDeviceTypeId(device.getDeviceType()); + deviceTypeGrant.setAssignmentId(generatedId); + // 被授权的客户 + deviceTypeGrant.setCustomerId(customerVo.getCustomerId()); + // 授权方客户 + deviceTypeGrant.setGrantorCustomerId(currentUser.getId()); + deviceTypeGrants.add(deviceTypeGrant); + + // -- 更新设备所有者 + device.setCurrentOwnerId(customerVo.getCustomerId()); + devices.add( device); }); + deviceAssignmentsService.saveBatch(assignments); - - // -- 授权设备类型给客户 - QueryWrapper deviceTypeGrantsQueryWrapper = new QueryWrapper<>(); - deviceTypeGrantsMapper.selectCount(deviceTypeGrantsQueryWrapper); - - User user = 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); - } + deviceTypeGrantsService.saveBatch(deviceTypeGrants); this.updateBatchById(devices); - // 批量更新设备状态 - for (Device device : devices) { - // 获取当前用户的所有祖先用户 - List ancestorsById = userMapper.findAncestorsById(currentUser.getId()); - Set excludedTenantIds = new HashSet<>(); - if (CollectionUtil.isNotEmpty(ancestorsById)) { - // 提取所有需要排除的 tenant_id - excludedTenantIds = ancestorsById.stream().map(User::getTenantId).distinct().collect(Collectors.toSet()); - } - excludedTenantIds.add(currentUser.getTenantId()); - // 构建查询条件:device_mac 相同,并且 tenant_id 不在 excludedTenantIds 列表中 - Wrapper wrapper = new QueryWrapper().eq("device_mac", device.getDeviceMac()).notIn("tenant_id", excludedTenantIds); - - // 构建要更新的数据 - Device updateDevice = new Device(); - updateDevice.setDeviceStatus(0); - updateDevice.setUpdateTime(new Timestamp(System.currentTimeMillis())); - - // 根据条件批量更新 - deviceMapper.update(updateDevice, wrapper); - } - - // 批量分配 - Set deviceTypes = new HashSet<>(); - for (Device device : devices) { - device.setId(null); - device.setCustomerName(null); - device.setCustomerId(null); - device.setTenantId(user.getTenantId()); - device.setCreateTime(timestamp); - device.setCreateBy(currentUser.getUsername()); - device.setUpdateTime(timestamp); - - // 查询设备类型 - DeviceType deviceType = deviceTypeMapper.selectById(device.getDeviceType()); - // SnowflakeGenerator snowflakeGenerator = new SnowflakeGenerator(); - Long id = NanoId.generate(16); - deviceType.setId(id); - deviceType.setCreateTime(timestamp); - deviceType.setCreateBy(currentUser.getUsername()); - deviceType.setCustomerId(customerVo.getCustomerId()); - deviceTypes.add(deviceType); - - device.setDeviceType(deviceType.getId()); - } - this.saveBatch(devices); - deviceTypeService.saveBatch(deviceTypes); - } diff --git a/fys-system/src/main/resources/mapper/system/DeviceMapper.xml b/fys-system/src/main/resources/mapper/system/DeviceMapper.xml index 477cf94..a812fb1 100644 --- a/fys-system/src/main/resources/mapper/system/DeviceMapper.xml +++ b/fys-system/src/main/resources/mapper/system/DeviceMapper.xml @@ -21,25 +21,29 @@ id - , device_type, customer_id, device_name, device_pic, device_mac, device_sn, remark, create_by, update_by, create_time, update_time + , device_type, customer_id, device_name, device_pic, device_mac, device_sn, + remark, create_by, update_by, create_time, update_time - d.id, - d.device_type, d.customer_id, d.device_name, d.device_pic, d.device_mac, + d + . + id + ,d.device_type, + d.customer_id, d.device_name, d.device_pic, d.device_mac, d.device_sn, d.remark, d.create_by, d.update_by, d.create_time, d.update_time, - d.binding_status, d.current_owner_id, d.original_owner_id, d.customer_name, + d.binding_status, d.device_status, d.current_owner_id, d.original_owner_id, d.customer_name, d.device_imei, d.longitude, d.latitude, d.tenant_id