拓恒接入
This commit is contained in:
parent
8f0d69b42f
commit
dad7be582e
|
|
@ -9,6 +9,7 @@ import com.ruoyi.device.domain.model.thingsboard.TelemetryValue;
|
|||
import com.ruoyi.device.domain.model.thingsboard.attributes.psdk.PsdkDevice;
|
||||
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceAttributes;
|
||||
import com.ruoyi.device.domain.model.thingsboard.constants.DeviceTelemetry;
|
||||
import com.ruoyi.device.domain.model.thingsboard.tuoheng.constants.TuohengDeviceAttributes;
|
||||
import com.ruoyi.device.api.enums.PayloadTypeEnum;
|
||||
import com.ruoyi.device.service.enums.DeviceType;
|
||||
import org.slf4j.Logger;
|
||||
|
|
@ -73,6 +74,7 @@ public class SynService {
|
|||
/**
|
||||
* 初始化设备名称过滤正则表达式列表
|
||||
* 延迟初始化,在第一次使用时编译正则表达式
|
||||
* 改动点: 首先不要用这个过滤了,TH开头的就是拓恒无人机
|
||||
*/
|
||||
private void initExcludePatterns() {
|
||||
if (excludePatternList == null) {
|
||||
|
|
@ -188,17 +190,20 @@ public class SynService {
|
|||
}
|
||||
|
||||
try {
|
||||
// 获取子设备属性
|
||||
String deviceName = childDeviceInfo.getName();
|
||||
|
||||
// 判断是大疆还是拓恒设备(通过设备名称是否以 TH 开头)
|
||||
if (deviceName.startsWith("TH")) {
|
||||
// 拓恒设备处理逻辑
|
||||
log.info("检测到拓恒设备: {}", deviceName);
|
||||
syncTuohengDevice(childDeviceInfo, gatewayInfo.getId());
|
||||
} else {
|
||||
// 大疆设备处理逻辑(原有逻辑)
|
||||
AttributeMap attributes = iThingsBoardDomain.getPredefinedDeviceAttributes(childDeviceId);
|
||||
|
||||
// 判断设备类型
|
||||
DeviceType deviceType = determineDeviceType(childDeviceInfo, attributes);
|
||||
|
||||
// 同步子设备(传入网关ID)
|
||||
Long deviceId = syncDevice(childDeviceInfo, deviceType, gatewayInfo.getId());
|
||||
|
||||
// 根据设备类型进行不同的处理
|
||||
syncDeviceByType(deviceId, childDeviceInfo.getName(), deviceType, attributes);
|
||||
}
|
||||
|
||||
totalCount++;
|
||||
|
||||
|
|
@ -321,8 +326,12 @@ public class SynService {
|
|||
newDevice.setGateway(gatewayId);
|
||||
newDevice.setCreateBy("system");
|
||||
|
||||
log.info("准备插入新设备: deviceName={}, deviceType={}, deviceSn={}",
|
||||
deviceName, deviceType, deviceSn);
|
||||
// 根据设备名称判断厂商
|
||||
String manufacturer = deviceName.startsWith("TH") ? "tuoheng" : "dajiang";
|
||||
newDevice.setDeviceManufacturer(manufacturer);
|
||||
|
||||
log.info("准备插入新设备: deviceName={}, deviceType={}, deviceSn={}, manufacturer={}",
|
||||
deviceName, deviceType, deviceSn, manufacturer);
|
||||
deviceDomain.insertDevice(newDevice);
|
||||
|
||||
Long deviceId = newDevice.getDeviceId();
|
||||
|
|
@ -657,4 +666,117 @@ public class SynService {
|
|||
log.info("将机场添加到默认分组: dockId={}, dockName={}, groupId={}",
|
||||
dockId, dockName, defaultGroupId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步拓恒设备(机场和无人机不区分类型,同时落三个表)
|
||||
*
|
||||
* @param deviceInfo 设备信息
|
||||
* @param gatewayId 网关ID
|
||||
*/
|
||||
private void syncTuohengDevice(DeviceInfo deviceInfo, String gatewayId) {
|
||||
String deviceId = deviceInfo.getId();
|
||||
String deviceName = deviceInfo.getName(); // 这是SN号,如 THJSQ03B2410TGJ3MCJY
|
||||
|
||||
log.info("开始同步拓恒设备: deviceName(SN)={}", deviceName);
|
||||
|
||||
try {
|
||||
// 获取拓恒设备属性
|
||||
AttributeMap attributes = iThingsBoardDomain.getPredefinedTuohengDeviceAttributes(deviceId);
|
||||
|
||||
// 获取 airportID(机场和无人机的名称)
|
||||
Optional<String> airportIdOpt = attributes.get(TuohengDeviceAttributes.AIRPORT_ID);
|
||||
String airportId = airportIdOpt.orElse(deviceName); // 如果没有 airportID,使用设备名称
|
||||
|
||||
// 获取固件版本
|
||||
Optional<String> firmwareVersionOpt = attributes.get(TuohengDeviceAttributes.HARDWARE_VERSION);
|
||||
String firmwareVersion = firmwareVersionOpt.orElse("");
|
||||
|
||||
log.info("拓恒设备属性: SN={}, airportID={}, firmwareVersion={}",
|
||||
deviceName, airportId, firmwareVersion);
|
||||
|
||||
// 1. 同步到 device 表(作为机场)
|
||||
Long dockDeviceId = syncDevice(deviceInfo, DeviceType.DOCK, gatewayId);
|
||||
|
||||
// 2. 同步到 device_dock 表
|
||||
syncTuohengDock(dockDeviceId, deviceName, airportId, firmwareVersion);
|
||||
|
||||
// 3. 同步到 device 表(作为无人机)
|
||||
Long aircraftDeviceId = syncDevice(deviceInfo, DeviceType.AIRCRAFT, gatewayId);
|
||||
|
||||
// 4. 同步到 device_aircraft 表
|
||||
syncTuohengAircraft(aircraftDeviceId, deviceName, airportId, firmwareVersion);
|
||||
|
||||
// 5. 同步到 device_dock_aircraft 表(建立机场-无人机关联)
|
||||
syncDockAircraft(dockDeviceId, aircraftDeviceId);
|
||||
|
||||
log.info("拓恒设备同步完成: SN={}, dockDeviceId={}, aircraftDeviceId={}",
|
||||
deviceName, dockDeviceId, aircraftDeviceId);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("同步拓恒设备失败: deviceName={}, error={}", deviceName, e.getMessage(), e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步拓恒机场数据
|
||||
*
|
||||
* @param deviceId 设备主键ID
|
||||
* @param sn 设备SN号(设备名称)
|
||||
* @param airportId 机场ID(airportID属性)
|
||||
* @param firmwareVersion 固件版本
|
||||
*/
|
||||
private void syncTuohengDock(Long deviceId, String sn, String airportId, String firmwareVersion) {
|
||||
log.info("开始同步拓恒机场: deviceId={}, SN={}, airportID={}", deviceId, sn, airportId);
|
||||
|
||||
// 查询机场是否已存在
|
||||
Dock existingDock = dockDomain.selectDockByDeviceId(deviceId);
|
||||
|
||||
if (existingDock == null) {
|
||||
// 机场不存在,插入新机场
|
||||
Dock newDock = new Dock();
|
||||
newDock.setDockName(airportId); // 使用 airportID 作为机场名称
|
||||
newDock.setDeviceId(deviceId);
|
||||
newDock.setCreateBy("system");
|
||||
|
||||
log.info("准备插入新拓恒机场: deviceId={}, dockName={}, SN={}", deviceId, airportId, sn);
|
||||
dockDomain.insertDock(newDock);
|
||||
log.info("插入新拓恒机场成功: dockId={}", newDock.getDockId());
|
||||
|
||||
// 确保默认分组存在并加入
|
||||
ensureDefaultGroupExists();
|
||||
insertDockToDefaultGroup(newDock.getDockId(), airportId);
|
||||
} else {
|
||||
log.info("拓恒机场已存在: deviceId={}, dockId={}", deviceId, existingDock.getDockId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步拓恒无人机数据
|
||||
*
|
||||
* @param deviceId 设备主键ID
|
||||
* @param sn 设备SN号(设备名称)
|
||||
* @param airportId 机场ID(airportID属性)
|
||||
* @param firmwareVersion 固件版本
|
||||
*/
|
||||
private void syncTuohengAircraft(Long deviceId, String sn, String airportId, String firmwareVersion) {
|
||||
log.info("开始同步拓恒无人机: deviceId={}, SN={}, airportID={}", deviceId, sn, airportId);
|
||||
|
||||
// 查询无人机是否已存在
|
||||
Aircraft existingAircraft = aircraftDomain.selectAircraftByDeviceId(deviceId);
|
||||
|
||||
if (existingAircraft == null) {
|
||||
// 无人机不存在,插入新无人机
|
||||
Aircraft newAircraft = new Aircraft();
|
||||
newAircraft.setAircraftName(airportId); // 使用 airportID 作为无人机名称
|
||||
newAircraft.setDeviceId(deviceId);
|
||||
newAircraft.setCreateBy("system");
|
||||
|
||||
log.info("准备插入新拓恒无人机: deviceId={}, aircraftName={}, SN={}", deviceId, airportId, sn);
|
||||
aircraftDomain.insertAircraft(newAircraft);
|
||||
log.info("插入新拓恒无人机成功: aircraftId={}", newAircraft.getAircraftId());
|
||||
} else {
|
||||
log.info("拓恒无人机已存在: deviceId={}, aircraftId={}", deviceId, existingAircraft.getAircraftId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue