mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 15:55:18 +08:00
添加查询历史数据接口
This commit is contained in:
@@ -6,6 +6,7 @@ import cn.lihongjie.coal.base.dto.CommonQuery;
|
||||
import cn.lihongjie.coal.base.dto.IdRequest;
|
||||
import cn.lihongjie.coal.emDevice.dto.CreateEmDeviceDto;
|
||||
import cn.lihongjie.coal.emDevice.dto.EmDeviceDto;
|
||||
import cn.lihongjie.coal.emDevice.dto.FetchHisDataRequest;
|
||||
import cn.lihongjie.coal.emDevice.dto.UpdateEmDeviceDto;
|
||||
import cn.lihongjie.coal.emDevice.service.EmDeviceService;
|
||||
|
||||
@@ -52,6 +53,12 @@ public class EmDeviceController {
|
||||
return this.service.list(request);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/fetchHisData")
|
||||
public Object fetchHisData(@RequestBody FetchHisDataRequest request) {
|
||||
this.service.fetchHisData(request);
|
||||
return true;
|
||||
}
|
||||
@PostMapping("/archive")
|
||||
public Object archive(@RequestBody IdRequest request) {
|
||||
this.service.archive(request);
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package cn.lihongjie.coal.emDevice.dto;
|
||||
|
||||
import cn.lihongjie.coal.base.dto.OrgCommonDto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
|
||||
@Data
|
||||
public class FetchHisDataRequest extends OrgCommonDto {
|
||||
|
||||
private List<String> ids;
|
||||
private LocalDateTime startTime;
|
||||
private LocalDateTime endTime;
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import cn.lihongjie.coal.dbFunctions.DbFunctionService;
|
||||
import cn.lihongjie.coal.emDevice.client.DustApi;
|
||||
import cn.lihongjie.coal.emDevice.dto.CreateEmDeviceDto;
|
||||
import cn.lihongjie.coal.emDevice.dto.EmDeviceDto;
|
||||
import cn.lihongjie.coal.emDevice.dto.FetchHisDataRequest;
|
||||
import cn.lihongjie.coal.emDevice.dto.UpdateEmDeviceDto;
|
||||
import cn.lihongjie.coal.emDevice.entity.EmDeviceEntity;
|
||||
import cn.lihongjie.coal.emDevice.mapper.EmDeviceMapper;
|
||||
@@ -32,6 +33,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -137,6 +139,89 @@ public class EmDeviceService extends BaseService<EmDeviceEntity, EmDeviceReposit
|
||||
|
||||
@Autowired
|
||||
EmDeviceDataMapper emDeviceDataMapper;
|
||||
|
||||
|
||||
|
||||
public void fetchHisData(FetchHisDataRequest request) {
|
||||
|
||||
if (CollectionUtils.isEmpty(request.getIds())){
|
||||
return;
|
||||
}
|
||||
|
||||
List<EmDeviceEntity> all = this.repository.findAllById(request.getIds());
|
||||
|
||||
Map<String, List<EmDeviceEntity>> groupByAccount =
|
||||
all.stream()
|
||||
.filter(x -> x.getThirdAccount() != null)
|
||||
.filter(x -> StringUtils.isNotEmpty(x.getCode()))
|
||||
.collect(Collectors.groupingBy(d -> d.getThirdAccount().getId()));
|
||||
|
||||
Map<String, EmDeviceEntity> codeMap = all.stream().collect(Collectors.toMap(e -> e.getCode(), e -> e));
|
||||
|
||||
for (List<EmDeviceEntity> devices : groupByAccount.values()) {
|
||||
|
||||
DustApi.GetRealtimeDataResponse hisData;
|
||||
String deviceIds = devices.stream().map(CommonEntity::getCode).collect(Collectors.joining(","));
|
||||
|
||||
try {
|
||||
|
||||
hisData = dustApi.getHistoryData(devices.get(0).getThirdAccount().getToken(), deviceIds, request.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), request.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("get his data error {} ", deviceIds, e);
|
||||
continue;
|
||||
}
|
||||
|
||||
String code = hisData.code();
|
||||
if (ObjectUtils.notEqual(code, "1000")) {
|
||||
log.error(
|
||||
"get his data error {} {} {}",
|
||||
hisData.code(),
|
||||
hisData.message(),
|
||||
hisData.data());
|
||||
continue;
|
||||
}
|
||||
|
||||
List<DustApi.DeviceData> data = hisData.data();
|
||||
|
||||
if (CollectionUtils.isEmpty(data)) {
|
||||
log.error(
|
||||
"get his data empty {} {} {}",
|
||||
hisData.code(),
|
||||
hisData.message(),
|
||||
hisData.data());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (data.size() != devices.size()) {
|
||||
|
||||
List<String> realTimeCode = data.stream().map(DustApi.DeviceData::deviceId).collect(Collectors.toList());
|
||||
List<String> deviceCode = devices.stream().map(CommonEntity::getCode).collect(Collectors.toList());
|
||||
|
||||
log.info("device code not match {} - {} = {}", deviceCode, realTimeCode, CollectionUtils.removeAll(deviceCode, realTimeCode));
|
||||
}
|
||||
|
||||
List<EmDeviceDataEntity> collect = data.stream().map(x -> {
|
||||
|
||||
|
||||
EmDeviceDataEntity emDeviceData = new EmDeviceDataEntity();
|
||||
emDeviceData.setDeviceId(codeMap.get(x.deviceId()).getId());
|
||||
emDeviceData.setOrganizationId(codeMap.get(x.deviceId()).getOrganizationId());
|
||||
emDeviceData.setTime(LocalDateTime.now());
|
||||
emDeviceDataMapper.updateEntity(emDeviceData, x);
|
||||
|
||||
|
||||
return emDeviceData;
|
||||
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
emDeviceDataService.saveAll(collect);
|
||||
|
||||
log.info("get his data success {} ", deviceIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void queryRealtimeData() {
|
||||
|
||||
List<EmDeviceEntity> all = this.repository.findAll();
|
||||
|
||||
Reference in New Issue
Block a user