|
|
@@ -10,6 +10,7 @@ import com.xunmei.mediator.api.server.service.IotServerInfoService;
|
|
|
import com.xunmei.mediator.api.video.service.IotDvrDiskService;
|
|
|
import com.xunmei.mediator.iot.service.IIotDeviceInfoExtendService;
|
|
|
import com.xunmei.mediator.iot.service.IIotDeviceInfoService;
|
|
|
+import com.xunmei.mediator.websocket.dto.alarmHost.AlarmHostInfo;
|
|
|
import com.xunmei.mediator.websocket.dto.dvs.ChannelInfo;
|
|
|
import com.xunmei.mediator.websocket.dto.dvs.DiskInfo;
|
|
|
import com.xunmei.mediator.websocket.dto.dvs.DvsBaseInfo;
|
|
|
@@ -56,7 +57,9 @@ public class WebsocketServiceImpl implements WebsocketService {
|
|
|
private IotDvrDiskService iIotDvrDiskService;
|
|
|
|
|
|
|
|
|
- private static final String LOCK_ACCPET_KEY_PREFIX = "websocket:lock:base_info_";
|
|
|
+ private static final String LOCK_DVS_ACCPET_KEY_PREFIX = "websocket:lock:base_info_dvs_";
|
|
|
+
|
|
|
+ private static final String LOCK_ALARM_HOST_ACCPET_KEY_PREFIX = "websocket:lock:base_info_alarm_host_";
|
|
|
|
|
|
/**
|
|
|
* 给指定iot服务发送消息
|
|
|
@@ -92,8 +95,8 @@ public class WebsocketServiceImpl implements WebsocketService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- private void lockAndExecute(String token, Runnable action) {
|
|
|
- String lockKey = LOCK_ACCPET_KEY_PREFIX + token;
|
|
|
+ private void lockAndExecute(String lockKey, Runnable action) {
|
|
|
+ //String lockKey = LOCK_ACCPET_KEY_PREFIX + token;
|
|
|
RLock lock = RedisUtils.getClient().getLock(lockKey);
|
|
|
try {
|
|
|
Boolean cacheLock = lock.tryLock(5, 10, TimeUnit.SECONDS);
|
|
|
@@ -101,7 +104,7 @@ public class WebsocketServiceImpl implements WebsocketService {
|
|
|
action.run();
|
|
|
Thread.sleep(10000);
|
|
|
} else {
|
|
|
- log.error("Failed to acquire lock for order: {}", token);
|
|
|
+ log.error("Failed to acquire lock for order: {}", lockKey);
|
|
|
}
|
|
|
} catch (InterruptedException e) {
|
|
|
Thread.currentThread().interrupt();
|
|
|
@@ -119,7 +122,8 @@ public class WebsocketServiceImpl implements WebsocketService {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void dealDvsBaseInfo(DvsBaseInfo dvsBaseInfo, String token) throws Exception {
|
|
|
//添加分布式锁
|
|
|
- lockAndExecute(token, () -> {
|
|
|
+ String lockKey = LOCK_DVS_ACCPET_KEY_PREFIX + token;
|
|
|
+ lockAndExecute(lockKey, () -> {
|
|
|
if (StringUtils.isEmpty(token) || dvsBaseInfo == null) {
|
|
|
log.error("同步视频类基础信息失败。原因:token或DvsBaseInfo为null");
|
|
|
return;
|
|
|
@@ -178,6 +182,46 @@ public class WebsocketServiceImpl implements WebsocketService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void dealAlarmHostInfo(List<AlarmHostInfo> alarmHostInfos, String token) throws Exception {
|
|
|
+ //添加分布式锁
|
|
|
+ String lockKey = LOCK_ALARM_HOST_ACCPET_KEY_PREFIX + token;
|
|
|
+ lockAndExecute(lockKey, () -> {
|
|
|
+ if (StringUtils.isEmpty(token) || alarmHostInfos.isEmpty()) {
|
|
|
+ log.error("同步报警主机基础信息失败。原因:token或alarmHostInfos为空");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ if (StringUtils.isEmpty(token)) {
|
|
|
+ log.error("同步报警主机基础信息,token为null,同步数据失败!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ IotServerInfo serverInfo = iotServerInfoService.selectByToken(token);
|
|
|
+ if (ObjectUtil.isEmpty(serverInfo)) {
|
|
|
+ log.error("同步报警主机基础信息,token:{},获取机构信息未空,结束同步!", token);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //逻辑删除报警主机
|
|
|
+ iIotDeviceInfoService.deleteAlarmHostDeviceByToken(token);
|
|
|
+
|
|
|
+ //添加报警主机集合
|
|
|
+ List<IotDeviceInfo> addAlarmHostList = new ArrayList();
|
|
|
+ //更新报警主机集合
|
|
|
+ List<IotDeviceInfo> updateAlarmHostList = new ArrayList();
|
|
|
+
|
|
|
+ processAlarmHostDevices(alarmHostInfos,serverInfo,token,addAlarmHostList,updateAlarmHostList,null,null);
|
|
|
+
|
|
|
+ saveOrUpdateAlarmHostBatches(addAlarmHostList,updateAlarmHostList,null,null);
|
|
|
+
|
|
|
+
|
|
|
+ } catch (Exception var8) {
|
|
|
+ log.error("同步报警主机基础信息过程中出现异常", var8);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 批量保存和更新设备信息
|
|
|
* @param addList
|
|
|
@@ -448,4 +492,89 @@ public class WebsocketServiceImpl implements WebsocketService {
|
|
|
private Integer convertToMB(Long size) {
|
|
|
return size == null ? 0 : (int) (size / 1024L / 1024L);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理dvs数据
|
|
|
+ *
|
|
|
+ * @param alarmHostInfos
|
|
|
+ * @param serverInfo
|
|
|
+ * @param token
|
|
|
+ * @param addList
|
|
|
+ * @param updateList
|
|
|
+ * @param addListExtend
|
|
|
+ * @param updateListExtend
|
|
|
+ */
|
|
|
+ private void processAlarmHostDevices(List<AlarmHostInfo> alarmHostInfos, IotServerInfo serverInfo, String token, List<IotDeviceInfo> addList, List<IotDeviceInfo> updateList, List<IotDeviceInfoExtend> addListExtend, List<IotDeviceInfoExtend> updateListExtend) {
|
|
|
+ if (ObjectUtil.isEmpty(alarmHostInfos)) {
|
|
|
+ log.error("同步报警主机基础信息,获取报警主机信息为空");
|
|
|
+ } else {
|
|
|
+ for (AlarmHostInfo alarmHostInfo : alarmHostInfos) {
|
|
|
+ IotDeviceInfo info = iIotDeviceInfoService.selectByTypeAndCode(token, DeviceTypeEnum.ALARM_HOST.getCode(), alarmHostInfo.getDeviceName());
|
|
|
+ if (info == null) {
|
|
|
+ info = createAlarmHostInfo(alarmHostInfo, serverInfo);
|
|
|
+ addList.add(info);
|
|
|
+ //addListExtend.add(createIotDeviceInfoExtend(dvsInfo, info.getId(),token));
|
|
|
+ } else {
|
|
|
+ dealAlarmHostInfo(alarmHostInfo, info,serverInfo);
|
|
|
+ updateList.add(info);
|
|
|
+ //IotDeviceInfoExtend extend = iIotDeviceInfoExtendService.selectByDeviceId(info.getId());
|
|
|
+ //dealDvsExtend(dvsInfo, extend);
|
|
|
+ //updateListExtend.add(extend);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转换报警主机设备数据(新增数据)
|
|
|
+ * @param alarmHostInfos
|
|
|
+ * @param serverInfo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private IotDeviceInfo createAlarmHostInfo(AlarmHostInfo alarmHostInfos, IotServerInfo serverInfo){
|
|
|
+ IotDeviceInfo info = new IotDeviceInfo();
|
|
|
+ long id = IdWorker.getId(info);
|
|
|
+ info.setDeleted(0);
|
|
|
+ info.setDeviceCode(alarmHostInfos.getDeviceName());
|
|
|
+ info.setDeviceProduct(alarmHostInfos.getProductName());
|
|
|
+ info.setDeviceModel(alarmHostInfos.getModel());
|
|
|
+ info.setDeviceType(DeviceTypeEnum.ALARM_HOST.getCode());
|
|
|
+ //info.setNetStatus("0");
|
|
|
+ info.setIotToken(serverInfo.getIotCode());
|
|
|
+ info.setDeviceName(alarmHostInfos.getDisplayName());
|
|
|
+ info.setOrgName(serverInfo.getOrgName());
|
|
|
+ info.setOrgId(serverInfo.getOrgId());
|
|
|
+ info.setOrgPath(serverInfo.getOrgPath());
|
|
|
+ info.setId(id);
|
|
|
+ return info;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新数据
|
|
|
+ * @param alarmHostInfos
|
|
|
+ * @param info
|
|
|
+ * @param serverInfo
|
|
|
+ */
|
|
|
+ private void dealAlarmHostInfo(AlarmHostInfo alarmHostInfos, IotDeviceInfo info, IotServerInfo serverInfo) {
|
|
|
+ info.setDeleted(0);
|
|
|
+ info.setDeviceName(alarmHostInfos.getDisplayName());
|
|
|
+ info.setDeviceModel(alarmHostInfos.getModel());
|
|
|
+ info.setOrgId(serverInfo.getOrgId());
|
|
|
+ info.setOrgName(serverInfo.getOrgName());
|
|
|
+ info.setOrgPath(serverInfo.getOrgPath());
|
|
|
+ info.setUpdateBy("system");
|
|
|
+ info.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveOrUpdateAlarmHostBatches(List<IotDeviceInfo> addAlarmHostInfos,List<IotDeviceInfo> updateAlarmHostInfos,List<IotDeviceInfoExtend> addAlarmHostExtendInfos,List<IotDeviceInfoExtend> updateAlarmHostExtendInfos){
|
|
|
+ if (!addAlarmHostInfos.isEmpty()) {
|
|
|
+ iIotDeviceInfoService.saveAlarmHostDevice(addAlarmHostInfos);
|
|
|
+ }
|
|
|
+ if (!updateAlarmHostInfos.isEmpty()) {
|
|
|
+ iIotDeviceInfoService.updateAlarmHostDevice(updateAlarmHostInfos);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|