@ -1,11 +1,11 @@
package com.fuyuanshen.web.service.device ;
import cn.hutool.core.bean.BeanUtil ;
import cn.hutool.core.collection.CollectionUtil ;
import cn.hutool.core.lang.UUID ;
import cn.hutool.core.util.StrUtil ;
import com.alibaba.fastjson2.JSON ;
import com.alibaba.fastjson2.JSONObject ;
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.toolkit.CollectionUtils ;
@ -15,20 +15,17 @@ import com.fuyuanshen.app.domain.AppPersonnelInfo;
import com.fuyuanshen.app.domain.AppPersonnelInfoRecords ;
import com.fuyuanshen.app.domain.bo.AppPersonnelInfoBo ;
import com.fuyuanshen.app.domain.dto.AppDeviceLogoUploadDto ;
import com.fuyuanshen.app.domain.dto.DeviceInstructDto ;
import com.fuyuanshen.app.domain.vo.AppDeviceDetailVo ;
import com.fuyuanshen.app.domain.vo.AppPersonnelInfoVo ;
import com.fuyuanshen.app.mapper.AppPersonnelInfoMapper ;
import com.fuyuanshen.app.mapper.AppPersonnelInfoRecordsMapper ;
import com.fuyuanshen.equipment.service.IAppBusinessFileService ;
import com.fuyuanshen.equipment.service.IAppOperationVideoService ;
import com.fuyuanshen.common.core.constant.GlobalConstants ;
import com.fuyuanshen.common.core.domain.R ;
import com.fuyuanshen.common.core.domain.model.AppLoginUser ;
import com.fuyuanshen.common.core.domain.model.LoginUser ;
import com.fuyuanshen.common.core.exception.BadRequestException ;
import com.fuyuanshen.common.core.exception.ServiceException ;
import com.fuyuanshen.common.core.utils.ImageToCArrayConverter ;
import com.fuyuanshen.common.core.utils.MapstructUtils ;
import com.fuyuanshen.common.core.utils.ObjectUtils ;
import com.fuyuanshen.common.core.utils.StringUtils ;
import com.fuyuanshen.common.json.utils.JsonUtils ;
import com.fuyuanshen.common.redis.utils.RedisUtils ;
@ -40,7 +37,6 @@ import com.fuyuanshen.equipment.domain.dto.AppDeviceSendMsgBo;
import com.fuyuanshen.equipment.domain.form.DeviceForm ;
import com.fuyuanshen.equipment.domain.query.DeviceTypeQueryCriteria ;
import com.fuyuanshen.equipment.enums.DeviceActiveStatusEnum ;
import com.fuyuanshen.equipment.enums.LightModeEnum ;
import com.fuyuanshen.equipment.mapper.DeviceLogMapper ;
import com.fuyuanshen.equipment.mapper.DeviceMapper ;
import com.fuyuanshen.equipment.mapper.DeviceTypeGrantsMapper ;
@ -51,8 +47,6 @@ import com.fuyuanshen.global.mqtt.base.MqttXinghanJson;
import com.fuyuanshen.global.mqtt.config.MqttGateway ;
import com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants ;
import com.fuyuanshen.global.mqtt.constants.MqttConstants ;
import com.fuyuanshen.system.domain.vo.SysOssVo ;
import com.fuyuanshen.system.domain.vo.SysRoleVo ;
import com.fuyuanshen.web.domain.Dto.DeviceDebugLogoUploadDto ;
import com.fuyuanshen.web.domain.Dto.DeviceXinghanInstructDto ;
import com.fuyuanshen.web.domain.vo.DeviceXinghanDetailVo ;
@ -64,15 +58,12 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.springframework.validation.annotation.Validated ;
import org.springframework.web.bind.annotation.ModelAttribute ;
import org.springframework.web.multipart.MultipartFile ;
import java.io.IOException ;
import java.time.Duration ;
import java.time.LocalDateTime ;
import java.util.* ;
import java.util.stream.Collectors ;
import static com.fuyuanshen.common.core.constant.GlobalConstants.GLOBAL_REDIS_KEY ;
import static com.fuyuanshen.common.core.utils.ImageToCArrayConverter.convertHexToDecimal ;
@ -93,6 +84,8 @@ public class DeviceXinghanBizService {
private final IDeviceAlarmService deviceAlarmService ;
private final DeviceTypeGrantsMapper deviceTypeGrantsMapper ;
private final DeviceAssignmentsService deviceAssignmentsService ;
private final IAppBusinessFileService appBusinessFileService ;
private final IAppOperationVideoService appOperationVideoService ;
@Autowired
private ObjectMapper objectMapper ;
private final AliyunVoiceUtil voiceUtil ;
@ -721,20 +714,31 @@ public class DeviceXinghanBizService {
return deviceTypeMapper . findAll ( criteria ) ;
}
// @Log("新增设备")
public void addDevice ( DeviceForm deviceForm ) {
if ( deviceForm . getDeviceMac ( ) ! = null & & deviceForm . getBluetoothName ( ) = = null ) {
/**
* 校验唯一性约束
*/
private void validateDeviceUnique ( DeviceForm form ) {
if ( form . getDeviceMac ( ) ! = null & & form . getBluetoothName ( ) = = null ) {
throw new BadRequestException ( " 请填写蓝牙名称!!! " ) ;
}
Device device1 = deviceMapper . selectOne ( new QueryWrapper < Device > ( ) . eq ( " device_mac " , deviceForm . getDeviceMac ( ) ) ) ;
if ( device1 ! = null ) {
// 使用 QueryWrapper 替代 lambdaQuery()
Long macCount = deviceMapper . selectCount ( new LambdaQueryWrapper < Device > ( )
. eq ( Device : : getDeviceMac , form . getDeviceMac ( ) ) ) ;
if ( macCount > 0 ) {
throw new BadRequestException ( " 设备MAC已存在! ! ! " ) ;
}
Device device2 = deviceMapper . selectOne ( new QueryWrapper < Device > ( ) . eq ( " device_imei " , deviceForm . getDeviceImei ( ) ) ) ;
if ( device2 ! = null ) {
Long imeiCount = deviceMapper . selectCount ( new LambdaQueryWrapper < Device > ( )
. eq ( Device : : getDeviceImei , form . getDeviceImei ( ) ) ) ;
if ( imeiCount > 0 ) {
throw new BadRequestException ( " 设备IMEI已存在! ! ! " ) ;
}
}
// @Log("新增设备")
public void addDevice ( DeviceForm deviceForm ) {
validateDeviceUnique ( deviceForm ) ;
DeviceTypeQueryCriteria queryCriteria = new DeviceTypeQueryCriteria ( ) ;
queryCriteria . setDeviceTypeId ( deviceForm . getDeviceType ( ) ) ;
@ -768,6 +772,14 @@ public class DeviceXinghanBizService {
device . setBindingStatus ( 0 ) ;
deviceMapper . insert ( device ) ;
Long deviceId = device . getDeviceId ( ) ;
// 查询设备类型的文件列表
// 4. 核心优化:同步设备类型的文件列表 (一行代码)
appBusinessFileService . cloneFiles ( deviceTypes . getId ( ) , device . getId ( ) ) ;
//同步设备类型的视频列表
appOperationVideoService . cloneFiles ( deviceTypes . getId ( ) , device . getId ( ) ) ;
// 新增设备类型记录
DeviceAssignments assignments = new DeviceAssignments ( ) ;
assignments . setDeviceId ( device . getId ( ) ) ;