Browse Source

#告警处理

zhongwei
yang_shj 2 years ago
parent
commit
ab41aa01dd
  1. 4
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/constants/AbnormalAlarmConstant.java
  2. 2
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/entity/AlarmHandleEntity.java
  3. 26
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/vo/AlarmHandleVo.java
  4. 38
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/census/vo/DeviceGroupVo.java
  5. 25
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/census/vo/TicketGroupVo.java
  6. 6
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/mapper/AlarmHandleMapper.xml
  7. 14
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AbnormalAlarmServiceImpl.java
  8. 5
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AlarmHandleServiceImpl.java
  9. 28
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/wrapper/HandleWrapper.java
  10. 14
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/census/controller/TargetController.java
  11. 8
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/census/service/TargetService.java
  12. 92
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/census/service/impl/TargetServiceImpl.java
  13. 7
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/scheduled/StAlamRecordTask.java
  14. 14
      hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/service/impl/StAlamRecordServiceImpl.java

4
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/constants/AbnormalAlarmConstant.java

@ -8,7 +8,7 @@ import java.util.List;
*/
public interface AbnormalAlarmConstant {
List<String> TYPE_LIST = Arrays.asList("13","14");
List<String> TYPE_LIST = Arrays.asList("3","2","5","10","13","14");
/**通讯恢复*/
String ABNORMAL_STATUS = "1";
@ -16,5 +16,5 @@ public interface AbnormalAlarmConstant {
String TYPE_NAMES[] = {"默认", "系统", "告警", "故障", "用户操作", "遥测越限", "遥信变位", "注册信息", "信息提示", "设备巡检", "遥控操作", "遥测越限恢复","未定义","通讯中断","数据异常"};
/**处理、延后、误报*/
List<Long> HANDLE_WAY = Arrays.asList(1L,2L,3L,4l);
List<Long> HANDLE_WAY = Arrays.asList(1L,2L,3L,4L);
}

2
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/entity/AlarmHandleEntity.java

@ -28,7 +28,7 @@ public class AlarmHandleEntity extends BaseEntity {
private String alarmContent;
@ApiModelProperty("处理方式")
private String handleWay;
private Long handleWay;
@ApiModelProperty("处理详情ID")
private Long detailId;

26
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/alert/vo/AlarmHandleVo.java

@ -1,5 +1,8 @@
package com.hnac.hzims.operational.alert.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.NullSerializer;
import com.hnac.hzims.operational.alert.entity.AlarmHandleEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -11,22 +14,10 @@ import java.util.Date;
* @version 4.0.0
*/
@Data
public class AlarmHandleVo{
public class AlarmHandleVo extends AlarmHandleEntity {
@ApiModelProperty("站点编码")
private String stationCode;
@ApiModelProperty("告警类型")
private Long alarmType;
@ApiModelProperty("告警内容")
private String alarmContent;
@ApiModelProperty("告警时间")
private Date alarmTime;
@ApiModelProperty("处理方式:1-延后 2-误报 3-缺陷 4-检修")
private Long handleWay;
@ApiModelProperty("站点名称")
private String stationName;
@ApiModelProperty("延后处理时间")
private Date delayTime;
@ -44,8 +35,13 @@ public class AlarmHandleVo{
private String handleUser;
@ApiModelProperty("现象Id")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long phenomenonId;
@ApiModelProperty("检修ID")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long accessId;
@ApiModelProperty("用户名称")
private String userName;
}

38
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/census/vo/DeviceGroupVo.java

@ -0,0 +1,38 @@
package com.hnac.hzims.operational.census.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.NullSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author ysj
* @date 2023/03/14 15:01:17
* @version 4.0.0
*/
@Data
public class DeviceGroupVo {
@ApiModelProperty("区域Id")
private Long deptId;
@ApiModelProperty("区域名称")
private String areaName;
@ApiModelProperty("故障数量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long faultCount;
@ApiModelProperty("检修数量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long overhaultCount;
@ApiModelProperty("运行数量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long runCount;
@ApiModelProperty("备用数量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Long reserveCount;
}

25
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/census/vo/TicketGroupVo.java

@ -0,0 +1,25 @@
package com.hnac.hzims.operational.census.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.NullSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author ysj
* @date 2023/03/14 15:01:17
* @version 4.0.0
*/
@Data
public class TicketGroupVo {
@ApiModelProperty("区域Id")
private Long deptId;
@ApiModelProperty("区域名称")
private String areaName;
@ApiModelProperty("票据数量")
@JsonSerialize(nullsUsing = NullSerializer.class)
private Integer count;
}

6
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/mapper/AlarmHandleMapper.xml

@ -4,8 +4,12 @@
<select id="selectHandlePage" resultType="com.hnac.hzims.operational.alert.vo.AlarmHandleVo">
select * from hzims_alarm_handle h left join hzims_alarm_handle_detail d
select h.*,handle_user,d.phenomenon_id,d.access_id,d.delay_time,d.delay_cause,
d.false_alarm_desc,d.file_path,s.name as station_name
from hzims_alarm_handle h left join hzims_alarm_handle_detail d
on h.detail_id = d.id
left join hzims_station s
on h.station_code = s.code
<where>
h.is_deleted = 0
<if test="param.handleUser != null">

14
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AbnormalAlarmServiceImpl.java

@ -9,22 +9,20 @@ import com.hnac.hzims.operational.alert.service.HistoryAbnormalAlarmService;
import com.hnac.hzims.operational.maintenance.constants.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.operational.station.service.IStationService;
import com.hnac.hzinfo.datasearch.soe.ISoeClient;
import com.hnac.hzinfo.datasearch.soe.domian.SoeData;
import com.hnac.hzinfo.datasearch.soe.domian.SoeQueryConditionByStation;
import com.hnac.hzinfo.sdk.core.response.HzPage;
import com.hnac.hzinfo.sdk.core.response.Result;
import com.hnac.hzinfo.sdk.soe.ISoeClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.BladePage;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@ -61,12 +59,12 @@ public class AbnormalAlarmServiceImpl extends BaseServiceImpl<AbnormalAlarmMappe
query.setTypes(AbnormalAlarmConstant.TYPE_LIST);
query.setStationIds(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()));
Calendar calendar = Calendar.getInstance();
query.setEndTime(LocalDateTime.parse(/*DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME)*/"2022-12-30 00:00:00", df));
query.setEndTime(LocalDateTime.parse(/*DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME)*/"2023-02-27 00:00:00", df));
calendar.add(Calendar.MINUTE,-2);
query.setBeginTime(LocalDateTime.parse(/*DateUtil.format(calendar.getTime() , DateUtil.PATTERN_DATETIME)*/"2022-12-01 00:00:00", df));
query.setBeginTime(LocalDateTime.parse(/*DateUtil.format(calendar.getTime() , DateUtil.PATTERN_DATETIME)*/"2023-02-01 00:00:00", df));
query.setNeedPage(false);
log.error("alarm_data_handle_param : {}",query);
R<BladePage<SoeData>> result = soeClient.getByStationsAndTime(query);
Result<HzPage<SoeData>> result = soeClient.getByStationsAndTime(query);
// 未查询到告警信息
if(!result.isSuccess() || ObjectUtil.isEmpty(result.getData().getRecords())){
return;

5
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/service/impl/AlarmHandleServiceImpl.java

@ -9,6 +9,8 @@ import com.hnac.hzims.operational.alert.service.AlarmHandleDetailService;
import com.hnac.hzims.operational.alert.service.AlarmHandleService;
import com.hnac.hzims.operational.alert.vo.AlarmHandleVo;
import com.hnac.hzims.operational.alert.vo.HandleQueryVo;
import com.hnac.hzims.operational.alert.wrapper.HandleWrapper;
import com.hnac.hzims.operational.fill.wrapper.StorageWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.log.exception.ServiceException;
@ -74,7 +76,8 @@ public class AlarmHandleServiceImpl extends BaseServiceImpl<AlarmHandleMapper, A
@Override
public IPage<AlarmHandleVo> pageCondition(Query query, HandleQueryVo param) {
IPage<AlarmHandleVo> pages = this.baseMapper.selectHandlePage(Condition.getPage(query), param);
return pages;
List list = HandleWrapper.build().listVO(pages.getRecords());
return pages.setRecords(list);
}
/**

28
hzims-service/operational/src/main/java/com/hnac/hzims/operational/alert/wrapper/HandleWrapper.java

@ -0,0 +1,28 @@
package com.hnac.hzims.operational.alert.wrapper;
import com.hnac.hzims.operational.alert.vo.AlarmHandleVo;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.system.user.cache.UserCache;
import org.springblade.system.user.entity.User;
import java.util.Optional;
public class HandleWrapper extends BaseEntityWrapper<AlarmHandleVo,AlarmHandleVo> {
public static HandleWrapper build() {
return new HandleWrapper();
}
@Override
public AlarmHandleVo entityVO(AlarmHandleVo entity) {
User createUser = UserCache.getUser(entity.getCreateUser());
if(ObjectUtil.isEmpty(createUser)){
return entity;
}
assert entity != null;
entity.setUserName(Optional.ofNullable(createUser.getName()).orElse(null));
return entity;
}
}

14
hzims-service/operational/src/main/java/com/hnac/hzims/operational/census/controller/TargetController.java

@ -114,4 +114,18 @@ public class TargetController {
return R.data(service.waterTarget(stationName,deptId,target));
}
@ApiOperation("集团设备统计")
@GetMapping("/device-group")
@ApiOperationSupport(order = 11)
public R deviceGroup(@RequestParam(value = "areaName",required = false) String areaName) {
return R.data(service.deviceGroup(areaName));
}
@ApiOperation("集团操作票/工作票")
@GetMapping("/ticket-group")
@ApiOperationSupport(order = 12)
public R ticketGroup(@RequestParam(value = "areaName",required = false) String areaName,@RequestParam(value = "type") Long type) {
return R.data(service.ticketGroup(areaName,type));
}
}

8
hzims-service/operational/src/main/java/com/hnac/hzims/operational/census/service/TargetService.java

@ -48,7 +48,15 @@ public interface TargetService {
// 设备分类统计
List<DeviceClassifyVo> deviceClassify(String stationName, Long deptId,Integer status);
// 水电指标关联数据
List<HydropowerTargetVo> hydropowerTarget(String stationName, Long deptId,Integer target);
// 水利指标关联数据
List<WaterTargetVo> waterTarget(String stationName, Long deptId,Integer target);
// 集团设备
List<DeviceGroupVo> deviceGroup(String areaName);
// 集团工作牌/操作票
List<TicketGroupVo> ticketGroup(String areaName,Long type);
}

92
hzims-service/operational/src/main/java/com/hnac/hzims/operational/census/service/impl/TargetServiceImpl.java

@ -41,6 +41,7 @@ import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.CollectionUtil;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.ObjectUtil;
import org.springblade.core.tool.utils.StringUtil;
import org.springblade.system.entity.Dept;
import org.springblade.system.feign.ISysClient;
import org.springframework.beans.factory.annotation.Value;
@ -111,6 +112,9 @@ public class TargetServiceImpl implements TargetService {
@Value("${hzims.operation.homePage.activePowerKey}")
public String activePowerKey;
@Value("${hzims.operation.region.areaDutyInfoKey}")
private String areaDutyInfoKey;
private final static String loadwaterpump_target_key = "hzims:operation:loadwaterpump:target:key";
private final static String loadwaterpump_real_key = "hzims:operation:loadwaterpump:real:key";
@ -816,6 +820,94 @@ public class TargetServiceImpl implements TargetService {
}
/**
* 集团设备统计
* @param areaName
* @return
*/
@Override
public List<DeviceGroupVo> deviceGroup(String areaName) {
// 获取区域机构
Map<Dept, List<StationEntity>> areas = areaService.getAuthArea(null,null,Collections.singletonList(HomePageConstant.HYDROPOWER),HomePageConstant.HYDROPOWER_SERVETYPE);
if(MapUtils.isEmpty(areas)){
return null;
}
// 获取设备
List<EminfoAndEmParamVo> devices = maintenanceService.getEmInfoList();
// 获取设备状态
Map<String, List<String>> deviceClassifyMap = (Map<String, List<String>>) redisTemplate.opsForValue().get(device_classify_key);
List<String> faultList = deviceClassifyMap.get(HomePageConstant.FAULT);
List<String> overhaultList = deviceClassifyMap.get(HomePageConstant.OVERHAUL);
List<String> runtList = deviceClassifyMap.get(HomePageConstant.RUN);
return areas.entrySet().stream().map(entry->{
DeviceGroupVo group = new DeviceGroupVo();
group.setDeptId(entry.getKey().getId());
group.setAreaName(entry.getKey().getDeptName());
if(CollectionUtils.isEmpty(devices)){
group.setFaultCount(0L);
group.setOverhaultCount(0L);
group.setRunCount(0L);
group.setReserveCount(0L);
return group;
}
List<String> numbers = devices.stream().filter(device-> entry.getValue().stream().map(StationEntity::getRefDept).collect(Collectors.toList()).contains(device.getCreateDept())).map(EminfoAndEmParamVo::getEmCode).collect(Collectors.toList());
// 故障
if(CollectionUtils.isEmpty(faultList)){
group.setFaultCount(0L);
}else{
group.setFaultCount(numbers.stream().filter(number -> faultList.contains(number)).count());
}
// 检修
if(CollectionUtils.isEmpty(overhaultList)){
group.setFaultCount(0L);
}else{
group.setFaultCount(numbers.stream().filter(number -> overhaultList.contains(number)).count());
}
// 运行
if(CollectionUtils.isEmpty(runtList)){
group.setFaultCount(0L);
}else{
group.setFaultCount(numbers.stream().filter(number -> runtList.contains(number)).count());
}
// 备用
group.setReserveCount(numbers.size() - group.getFaultCount() - group.getOverhaultCount() - group.getRunCount());
return group;
}).collect(Collectors.toList());
}
/**
* 集团操作票/工作票
* @param areaName
* @param type
* @return
*/
@Override
public List<TicketGroupVo> ticketGroup(String areaName,Long type) {
// 获取区域机构
Map<Dept, List<StationEntity>> areas = areaService.getAuthArea(null,null,Collections.singletonList(HomePageConstant.HYDROPOWER),HomePageConstant.HYDROPOWER_SERVETYPE);
if(MapUtils.isEmpty(areas)){
return null;
}
// redis中取区域数据
List<AreaDutyVo> areaDutyVoList = (List<AreaDutyVo>) redisTemplate.opsForValue().get(areaDutyInfoKey);
return areas.entrySet().stream().filter(o-> StringUtil.isEmpty(areaName) || o.getKey().getDeptName().contains(areaName)).map(area->{
TicketGroupVo ticket = new TicketGroupVo();
ticket.setDeptId(area.getKey().getId());
ticket.setAreaName(area.getKey().getDeptName());
List<AreaDutyVo> dutys = areaDutyVoList.stream().filter(duty-> duty.getDepartId().equals(area.getKey().getId())).collect(Collectors.toList());
if(CollectionUtil.isEmpty(dutys)){
ticket.setCount(0);
return ticket;
}
if(type == 0){
ticket.setCount(dutys.get(0).getOperationTicketCount());
}else{
ticket.setCount(dutys.get(0).getWorkTicketCount());
}
return ticket;
}).collect(Collectors.toList());
}
/**
* 获取当年的第一天
* @return
*/

7
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/scheduled/StAlamRecordTask.java

@ -94,10 +94,9 @@ public class StAlamRecordTask {
* 数据中断告警
* @return ReturnT<String>
*/
//@XxlJob(ALARM_DATA_HANDLE)
@Scheduled(cron = "0/40 * * * * ? ")
public ReturnT<String> alarmDataHandle() throws Exception {
String param = "";
@XxlJob(ALARM_DATA_HANDLE)
//@Scheduled(cron = "0/40 * * * * ? ")
public ReturnT<String> alarmDataHandle(String param) throws Exception {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}

14
hzims-service/operational/src/main/java/com/hnac/hzims/operational/config/service/impl/StAlamRecordServiceImpl.java

@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hnac.hzims.equipment.feign.IEmInfoClient;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
import com.hnac.hzims.fdp.feign.IFdpMonitorClient;
import com.hnac.hzims.fdp.util.HttpRequestUtil;
import com.hnac.hzims.fdp.vo.FdpFaultStatusVo;
import com.hnac.hzims.operational.config.entity.DataSet;
import com.hnac.hzims.operational.config.entity.StAlarmRecordEntity;
@ -23,22 +22,22 @@ import com.hnac.hzims.operational.config.service.StFocusPropertiesService;
import com.hnac.hzims.operational.config.vo.*;
import com.hnac.hzims.operational.main.service.IMainSystemMonitoringService;
import com.hnac.hzims.operational.main.vo.SoeDataVo;
import com.hnac.hzims.operational.maintenance.constants.HomePageConstant;
import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.operational.station.service.IStationService;
import com.hnac.hzims.operational.util.ExcelUtil;
import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient;
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeCodeBySignagesVO;
import com.hnac.hzinfo.datasearch.soe.ISoeClient;
import com.hnac.hzinfo.datasearch.soe.domian.SoeData;
import com.hnac.hzinfo.datasearch.soe.domian.SoeQueryConditionByStation;
import com.hnac.hzinfo.sdk.analyse.po.MultiAnalyzeCodePO;
import com.hnac.hzinfo.sdk.core.response.HzPage;
import com.hnac.hzinfo.sdk.core.response.Result;
import com.hnac.hzinfo.sdk.soe.ISoeClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.MapUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.mp.support.BladePage;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.*;
@ -51,7 +50,6 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@ -459,8 +457,8 @@ public class StAlamRecordServiceImpl extends BaseServiceImpl<StAlarmRecordMapper
soeQueryConditionByStation.setBeginTime(LocalDateTime.parse(DateUtil.format(new Date(), DateUtil.PATTERN_DATE) + " 00:00:00", df));
}
soeQueryConditionByStation.setEndTime(LocalDateTime.now());*/
soeQueryConditionByStation.setBeginTime(LocalDateTime.parse(/*DateUtil.format(new Date(), DateUtil.PATTERN_DATE) +*/ "2022-12-01 00:00:00", df));
soeQueryConditionByStation.setEndTime(LocalDateTime.parse(/*DateUtil.format(new Date(), DateUtil.PATTERN_DATE) +*/ "2022-12-28 00:00:00", df));
soeQueryConditionByStation.setBeginTime(LocalDateTime.parse(/*DateUtil.format(new Date(), DateUtil.PATTERN_DATE) +*/ "2023-02-01 00:00:00", df));
soeQueryConditionByStation.setEndTime(LocalDateTime.parse(/*DateUtil.format(new Date(), DateUtil.PATTERN_DATE) +*/ "2023-02-27 00:00:00", df));
soeQueryConditionByStation.setNeedPage(true);
soeQueryConditionByStation.setPage(current);
soeQueryConditionByStation.setLimit(size);
@ -468,7 +466,7 @@ public class StAlamRecordServiceImpl extends BaseServiceImpl<StAlarmRecordMapper
soeQueryConditionByStation.setTypes(Arrays.asList(type.split(",")));
log.error("stations_and_time : {}", soeQueryConditionByStation );
List<SoeDataVo> collect = new ArrayList<>();
R<BladePage<SoeData>> byStationsAndTime = soeClient.getByStationsAndTime(soeQueryConditionByStation);
Result<HzPage<SoeData>> byStationsAndTime = soeClient.getByStationsAndTime(soeQueryConditionByStation);
if (!byStationsAndTime.isSuccess() || ObjectUtil.isEmpty(byStationsAndTime.getData()) || CollectionUtil.isEmpty(byStationsAndTime.getData().getRecords())) {
return R.data(vo);
}

Loading…
Cancel
Save