兼容不规范的时间格式iso8601格式;升级fastjson版本

pull/497/head
648540858 2022-05-26 12:10:46 +08:00
parent 632630817b
commit dc6769664e
15 changed files with 95 additions and 69 deletions

View File

@ -163,6 +163,7 @@ QQ私信一般不回, 精力有限.欢迎大家在群里讨论.觉得项目对
[hotcoffie](https://github.com/hotcoffie) [xiaomu](https://github.com/nikmu) [TristingChen](https://github.com/TristingChen) [hotcoffie](https://github.com/hotcoffie) [xiaomu](https://github.com/nikmu) [TristingChen](https://github.com/TristingChen)
[chenparty](https://github.com/chenparty) [Hotleave](https://github.com/hotleave) [ydwxb](https://github.com/ydwxb) [chenparty](https://github.com/chenparty) [Hotleave](https://github.com/hotleave) [ydwxb](https://github.com/ydwxb)
[ydpd](https://github.com/ydpd) [szy833](https://github.com/szy833) [ydwxb](https://github.com/ydwxb) [Albertzhu666](https://github.com/Albertzhu666) [ydpd](https://github.com/ydpd) [szy833](https://github.com/szy833) [ydwxb](https://github.com/ydwxb) [Albertzhu666](https://github.com/Albertzhu666)
[mk1990](https://github.com/mk1990)
ps: 刚增加了这个名单,肯定遗漏了一些大佬,欢迎大佬联系我添加。 ps: 刚增加了这个名单,肯定遗漏了一些大佬,欢迎大佬联系我添加。

View File

@ -159,9 +159,10 @@
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <artifactId>fastjson</artifactId>
<version>1.2.73</version> <version>1.2.83</version>
</dependency> </dependency>
<!-- okhttp --> <!-- okhttp -->
<dependency> <dependency>
<groupId>com.squareup.okhttp3</groupId> <groupId>com.squareup.okhttp3</groupId>

View File

@ -99,8 +99,8 @@ public class VideoStreamSessionManager {
return dialog; return dialog;
} }
public SIPDialog getDialogByCallId(String deviceId, String channelId, String callID){ public SIPDialog getDialogByCallId(String deviceId, String channelId, String callId){
SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callID, null); SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callId, null);
if (ssrcTransaction == null) { if (ssrcTransaction == null) {
return null; return null;
} }
@ -108,8 +108,7 @@ public class VideoStreamSessionManager {
if (dialogByteArray == null) { if (dialogByteArray == null) {
return null; return null;
} }
SIPDialog dialog = (SIPDialog)SerializeUtils.deSerialize(dialogByteArray); return (SIPDialog)SerializeUtils.deSerialize(dialogByteArray);
return dialog;
} }
public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){ public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){

View File

@ -11,7 +11,6 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.GbStream; import com.genersoft.iot.vmp.gb28181.bean.GbStream;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction; import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.media.zlm.dto.*; import com.genersoft.iot.vmp.media.zlm.dto.*;
import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.*;

View File

@ -42,7 +42,7 @@ public class ZLMStatusEventListener {
logger.info("[ZLM] 上线 ID" + event.getMediaServerId()); logger.info("[ZLM] 上线 ID" + event.getMediaServerId());
streamPushService.zlmServerOnline(event.getMediaServerId()); streamPushService.zlmServerOnline(event.getMediaServerId());
streamProxyService.zlmServerOnline(event.getMediaServerId()); streamProxyService.zlmServerOnline(event.getMediaServerId());
playService.zlmServerOnline(event.getMediaServerId());
} }
@Async @Async

View File

@ -40,4 +40,6 @@ public interface IPlayService {
DeferredResult<ResponseEntity<String>> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack); DeferredResult<ResponseEntity<String>> download(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo,String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, InviteStreamCallback infoCallBack, PlayBackCallback hookCallBack);
StreamInfo getDownLoadInfo(String deviceId, String channelId, String stream); StreamInfo getDownLoadInfo(String deviceId, String channelId, String stream);
void zlmServerOnline(String mediaServerId);
} }

View File

@ -68,7 +68,6 @@ public class DeviceServiceImpl implements IDeviceService {
if (deviceInRedis != null && deviceInDb == null) { if (deviceInRedis != null && deviceInDb == null) {
// redis 存在脏数据 // redis 存在脏数据
redisCatchStorage.clearCatchByDeviceId(device.getDeviceId()); redisCatchStorage.clearCatchByDeviceId(device.getDeviceId());
} }
device.setUpdateTime(now); device.setUpdateTime(now);
device.setOnline(1); device.setOnline(1);

View File

@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.session.SsrcConfig; import com.genersoft.iot.vmp.gb28181.session.SsrcConfig;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
@ -35,7 +36,9 @@ import org.springframework.util.StringUtils;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* *
@ -189,6 +192,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
public void clearRTPServer(MediaServerItem mediaServerItem) { public void clearRTPServer(MediaServerItem mediaServerItem) {
mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain())); mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()));
redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0); redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId(), mediaServerItem.getId(), 0);
} }
@ -229,11 +233,10 @@ public class MediaServerServiceImpl implements IMediaServerService {
} }
result.sort((serverItem1, serverItem2)->{ result.sort((serverItem1, serverItem2)->{
int sortResult = 0; int sortResult = 0;
try { LocalDateTime localDateTime1 = LocalDateTime.parse(serverItem1.getCreateTime(), DateUtil.formatter);
sortResult = DateUtil.format.parse(serverItem1.getCreateTime()).compareTo(DateUtil.format.parse(serverItem2.getCreateTime())); LocalDateTime localDateTime2 = LocalDateTime.parse(serverItem2.getCreateTime(), DateUtil.formatter);
} catch (ParseException e) {
e.printStackTrace(); sortResult = localDateTime1.compareTo(localDateTime2);
}
return sortResult; return sortResult;
}); });
return result; return result;

View File

@ -648,4 +648,9 @@ public class PlayServiceImpl implements IPlayService {
} }
} }
} }
@Override
public void zlmServerOnline(String mediaServerId) {
// 似乎没啥需要做的
}
} }

View File

@ -18,35 +18,61 @@ import java.util.Locale;
*/ */
public class DateUtil { public class DateUtil {
private static final String yyyy_MM_dd_T_HH_mm_ss_SSSXXX = "yyyy-MM-dd'T'HH:mm:ss"; /**
public static final String yyyy_MM_dd_HH_mm_ss = "yyyy-MM-dd HH:mm:ss"; * iso8601
*/
private static final String ISO8601_COMPATIBLE_PATTERN = "yyyy-M-d'T'H:m:s";
public static final SimpleDateFormat formatISO8601 = new SimpleDateFormat(yyyy_MM_dd_T_HH_mm_ss_SSSXXX, Locale.getDefault()); /**
public static final SimpleDateFormat format = new SimpleDateFormat(yyyy_MM_dd_HH_mm_ss, Locale.getDefault()); * iso8601
*/
private static final String ISO8601_PATTERN = "yyyy-MM-dd'T'HH:mm:ss";
public static final DateTimeFormatter formatterISO8601 = DateTimeFormatter.ofPattern(yyyy_MM_dd_T_HH_mm_ss_SSSXXX, Locale.getDefault()).withZone(ZoneId.systemDefault()); /**
public static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(yyyy_MM_dd_HH_mm_ss, Locale.getDefault()).withZone(ZoneId.systemDefault()); * wvp
*/
public static final String PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final DateTimeFormatter formatterCompatibleISO8601 = DateTimeFormatter.ofPattern(ISO8601_COMPATIBLE_PATTERN, Locale.getDefault()).withZone(ZoneId.systemDefault());
public static final DateTimeFormatter formatterISO8601 = DateTimeFormatter.ofPattern(ISO8601_PATTERN, Locale.getDefault()).withZone(ZoneId.systemDefault());
public static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(PATTERN, Locale.getDefault()).withZone(ZoneId.systemDefault());
public static String yyyy_MM_dd_HH_mm_ssToISO8601(String formatTime) { public static String yyyy_MM_dd_HH_mm_ssToISO8601(String formatTime) {
return formatterISO8601.format(formatter.parse(formatTime)); return formatterISO8601.format(formatter.parse(formatTime));
} }
public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) { public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) {
return formatter.format(formatterISO8601.parse(formatTime)); return formatter.format(formatterCompatibleISO8601.parse(formatTime));
} }
/**
* yyyy_MM_dd_HH_mm_ss
* @param formatTime
* @return
*/
public static long yyyy_MM_dd_HH_mm_ssToTimestamp(String formatTime) { public static long yyyy_MM_dd_HH_mm_ssToTimestamp(String formatTime) {
TemporalAccessor temporalAccessor = formatter.parse(formatTime); TemporalAccessor temporalAccessor = formatter.parse(formatTime);
Instant instant = Instant.from(temporalAccessor); Instant instant = Instant.from(temporalAccessor);
return instant.getEpochSecond(); return instant.getEpochSecond();
} }
/**
*
* @return
*/
public static String getNow() { public static String getNow() {
LocalDateTime nowDateTime = LocalDateTime.now(); LocalDateTime nowDateTime = LocalDateTime.now();
return formatter.format(nowDateTime); return formatter.format(nowDateTime);
} }
/**
*
* @param timeStr
* @param dateTimeFormatter
* @return
*/
public static boolean verification(String timeStr, DateTimeFormatter dateTimeFormatter) { public static boolean verification(String timeStr, DateTimeFormatter dateTimeFormatter) {
try { try {
LocalDate.parse(timeStr, dateTimeFormatter); LocalDate.parse(timeStr, dateTimeFormatter);

View File

@ -24,6 +24,7 @@ import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -98,14 +99,7 @@ public class AlarmController {
} }
try { if (!DateUtil.verification(startTime, DateUtil.formatter) || !DateUtil.verification(endTime, DateUtil.formatter)){
if (startTime != null) {
DateUtil.format.parse(startTime);
}
if (endTime != null) {
DateUtil.format.parse(endTime);
}
} catch (ParseException e) {
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
} }
@ -144,11 +138,7 @@ public class AlarmController {
if (StringUtils.isEmpty(time)) { if (StringUtils.isEmpty(time)) {
time = null; time = null;
} }
try { if (!DateUtil.verification(time, DateUtil.formatter) ){
if (time != null) {
DateUtil.format.parse(time);
}
} catch (ParseException e) {
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
} }
List<String> deviceIdList = null; List<String> deviceIdList = null;
@ -189,7 +179,7 @@ public class AlarmController {
deviceAlarm.setAlarmDescription("test"); deviceAlarm.setAlarmDescription("test");
deviceAlarm.setAlarmMethod("1"); deviceAlarm.setAlarmMethod("1");
deviceAlarm.setAlarmPriority("1"); deviceAlarm.setAlarmPriority("1");
deviceAlarm.setAlarmTime(DateUtil.formatISO8601.format(System.currentTimeMillis())); deviceAlarm.setAlarmTime(DateUtil.formatterISO8601.format(LocalDateTime.now()));
deviceAlarm.setAlarmType("1"); deviceAlarm.setAlarmType("1");
deviceAlarm.setLongitude(115.33333); deviceAlarm.setLongitude(115.33333);
deviceAlarm.setLatitude(39.33333); deviceAlarm.setLatitude(39.33333);

View File

@ -72,7 +72,7 @@ public class GBRecordController {
if (!DateUtil.verification(startTime, DateUtil.formatter)){ if (!DateUtil.verification(startTime, DateUtil.formatter)){
WVPResult<RecordInfo> wvpResult = new WVPResult<>(); WVPResult<RecordInfo> wvpResult = new WVPResult<>();
wvpResult.setCode(-1); wvpResult.setCode(-1);
wvpResult.setMsg("startTime error, format is " + DateUtil.yyyy_MM_dd_HH_mm_ss); wvpResult.setMsg("startTime error, format is " + DateUtil.PATTERN);
ResponseEntity<WVPResult<RecordInfo>> resultResponseEntity = new ResponseEntity<>(wvpResult, HttpStatus.OK); ResponseEntity<WVPResult<RecordInfo>> resultResponseEntity = new ResponseEntity<>(wvpResult, HttpStatus.OK);
result.setResult(resultResponseEntity); result.setResult(resultResponseEntity);
@ -81,7 +81,7 @@ public class GBRecordController {
if (!DateUtil.verification(endTime, DateUtil.formatter)){ if (!DateUtil.verification(endTime, DateUtil.formatter)){
WVPResult<RecordInfo> wvpResult = new WVPResult<>(); WVPResult<RecordInfo> wvpResult = new WVPResult<>();
wvpResult.setCode(-1); wvpResult.setCode(-1);
wvpResult.setMsg("endTime error, format is " + DateUtil.yyyy_MM_dd_HH_mm_ss); wvpResult.setMsg("endTime error, format is " + DateUtil.PATTERN);
ResponseEntity<WVPResult<RecordInfo>> resultResponseEntity = new ResponseEntity<>(wvpResult, HttpStatus.OK); ResponseEntity<WVPResult<RecordInfo>> resultResponseEntity = new ResponseEntity<>(wvpResult, HttpStatus.OK);
result.setResult(resultResponseEntity); result.setResult(resultResponseEntity);
return result; return result;

View File

@ -76,14 +76,7 @@ public class LogController {
logger.warn("自动记录日志功能已关闭,查询结果可能不完整。"); logger.warn("自动记录日志功能已关闭,查询结果可能不完整。");
} }
try { if (!DateUtil.verification(startTime, DateUtil.formatter) || !DateUtil.verification(endTime, DateUtil.formatter)){
if (startTime != null) {
DateUtil.format.parse(startTime);
}
if (endTime != null) {
DateUtil.format.parse(endTime);
}
} catch (ParseException e) {
return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
} }

View File

@ -8,6 +8,10 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.temporal.TemporalAccessor;
import java.util.Date; import java.util.Date;
@ -64,8 +68,8 @@ class DeviceAlarmServiceImplTest {
* * 7;12 - * * 7;12 -
*/ */
deviceAlarm.setAlarmMethod((int)(Math.random()*7 + 1) + ""); deviceAlarm.setAlarmMethod((int)(Math.random()*7 + 1) + "");
Date date = randomDate("2021-01-01 00:00:00", "2021-06-01 00:00:00"); Instant date = randomDate("2021-01-01 00:00:00", "2021-06-01 00:00:00");
deviceAlarm.setAlarmTime(DateUtil.format.format(date)); deviceAlarm.setAlarmTime(DateUtil.formatter.format(date));
/** /**
* , 1, 2, 3, 4 - * , 1, 2, 3, 4 -
*/ */
@ -85,17 +89,20 @@ class DeviceAlarmServiceImplTest {
private Date randomDate(String beginDate, String endDate) { private Instant randomDate(String beginDate, String endDate) {
try { try {
Date start = DateUtil.format.parse(beginDate);//构造开始日期 //构造开始日期
Date end = DateUtil.format.parse(endDate);//构造结束日期 LocalDateTime start = LocalDateTime.parse(beginDate, DateUtil.formatter);
//构造结束日期
LocalDateTime end = LocalDateTime.parse(endDate, DateUtil.formatter);
//getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 //getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
if (start.getTime() >= end.getTime()) { if (start.isAfter(end)) {
return null; return null;
} }
long date = random(start.getTime(), end.getTime()); long date = random(start.toInstant(ZoneOffset.of("+8")).toEpochMilli(), end.toInstant(ZoneOffset.of("+8")).toEpochMilli());
return new Date(date); return Instant.ofEpochMilli(date);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -21,47 +21,47 @@ class DeviceService{
if (typeof (errorCallback) == "function") errorCallback(error) if (typeof (errorCallback) == "function") errorCallback(error)
}); });
} }
getAllDeviceList(callback, errorCallback) { getAllDeviceList(callback,endCallback, errorCallback) {
let currentPage = 1; let currentPage = 1;
let count = 100; let count = 100;
let deviceList = [] let deviceList = []
this.getAllDeviceListIteration(deviceList, currentPage, count, (data) => { this.getAllDeviceListIteration(deviceList, currentPage, count, callback, endCallback, errorCallback)
if (typeof (callback) == "function") callback(data)
}, errorCallback)
} }
getAllDeviceListIteration(deviceList, currentPage, count, callback, errorCallback) { getAllDeviceListIteration(deviceList, currentPage, count, callback, endCallback, errorCallback) {
this.getDeviceList(currentPage, count, (data) => { this.getDeviceList(currentPage, count, (data) => {
if (data.list) { if (data.list) {
if (typeof (callback) == "function") callback(data.list)
deviceList = deviceList.concat(data.list); deviceList = deviceList.concat(data.list);
if (deviceList.length < data.total) { if (deviceList.length < data.total) {
currentPage ++ currentPage ++
this.getAllDeviceListIteration(deviceList, currentPage, count, callback, errorCallback) this.getAllDeviceListIteration(deviceList, currentPage, count, callback, endCallback, errorCallback)
}else { }else {
if (typeof (callback) == "function") callback(deviceList) if (typeof (endCallback) == "function") endCallback(deviceList)
} }
} }
}, errorCallback) }, errorCallback)
} }
getAllChannel(isCatalog, catalogUnderDevice, deviceId, callback, errorCallback) { getAllChannel(isCatalog, catalogUnderDevice, deviceId, callback, endCallback, errorCallback) {
let currentPage = 1; let currentPage = 1;
let count = 100; let count = 100;
let catalogList = [] let catalogList = []
this.getAllChannelIteration(isCatalog, catalogUnderDevice, deviceId, catalogList, currentPage, count, callback, errorCallback) this.getAllChannelIteration(isCatalog, catalogUnderDevice, deviceId, catalogList, currentPage, count, callback, endCallback, errorCallback)
} }
getAllChannelIteration(isCatalog, catalogUnderDevice, deviceId, catalogList, currentPage, count, callback, errorCallback) { getAllChannelIteration(isCatalog, catalogUnderDevice, deviceId, catalogList, currentPage, count, callback, endCallback, errorCallback) {
this.getChanel(isCatalog, catalogUnderDevice, deviceId, currentPage, count, (data) => { this.getChanel(isCatalog, catalogUnderDevice, deviceId, currentPage, count, (data) => {
if (data.list) { if (data.list) {
if (typeof (callback) == "function") callback(data.list)
catalogList = catalogList.concat(data.list); catalogList = catalogList.concat(data.list);
if (catalogList.length < data.total) { if (catalogList.length < data.total) {
currentPage ++ currentPage ++
this.getAllChannelIteration(isCatalog,catalogUnderDevice, deviceId, catalogList, currentPage, count, callback, errorCallback) this.getAllChannelIteration(isCatalog,catalogUnderDevice, deviceId, catalogList, currentPage, count, callback, errorCallback)
}else { }else {
console.log(1) console.log(1)
if (typeof (callback) == "function") callback(catalogList) if (typeof (endCallback) == "function") endCallback(catalogList)
} }
} }
}, errorCallback) }, errorCallback)
@ -84,22 +84,23 @@ class DeviceService{
} }
getAllSubChannel(isCatalog, deviceId, channelId, callback, errorCallback) { getAllSubChannel(isCatalog, deviceId, channelId, callback, endCallback, errorCallback) {
let currentPage = 1; let currentPage = 1;
let count = 100; let count = 100;
let catalogList = [] let catalogList = []
this.getAllSubChannelIteration(isCatalog, deviceId, channelId, catalogList, currentPage, count, callback, errorCallback) this.getAllSubChannelIteration(isCatalog, deviceId, channelId, catalogList, currentPage, count, callback, endCallback, errorCallback)
} }
getAllSubChannelIteration(isCatalog, deviceId,channelId, catalogList, currentPage, count, callback, errorCallback) { getAllSubChannelIteration(isCatalog, deviceId,channelId, catalogList, currentPage, count, callback, endCallback, errorCallback) {
this.getSubChannel(isCatalog, deviceId, channelId, currentPage, count, (data) => { this.getSubChannel(isCatalog, deviceId, channelId, currentPage, count, (data) => {
if (data.list) { if (data.list) {
if (typeof (callback) == "function") callback(data.list)
catalogList = catalogList.concat(data.list); catalogList = catalogList.concat(data.list);
if (catalogList.length < data.total) { if (catalogList.length < data.total) {
currentPage ++ currentPage ++
this.getAllSubChannelIteration(isCatalog, deviceId, channelId, catalogList, currentPage, count, callback, errorCallback) this.getAllSubChannelIteration(isCatalog, deviceId, channelId, catalogList, currentPage, count, callback, endCallback, errorCallback)
}else { }else {
if (typeof (callback) == "function") callback(catalogList) if (typeof (endCallback) == "function") endCallback(catalogList)
} }
} }
}, errorCallback) }, errorCallback)