From 56df98ce4952239fbf7d0e99dbeb0e5c71531d6f Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 18 Nov 2022 18:29:06 +0800
Subject: [PATCH] initial v1.3.0
---
src/main/java/com/dji/sample/manage/service/impl/DevicePayloadServiceImpl.java | 53 ++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/dji/sample/manage/service/impl/DevicePayloadServiceImpl.java b/src/main/java/com/dji/sample/manage/service/impl/DevicePayloadServiceImpl.java
index 7f05b54..1e6f52b 100644
--- a/src/main/java/com/dji/sample/manage/service/impl/DevicePayloadServiceImpl.java
+++ b/src/main/java/com/dji/sample/manage/service/impl/DevicePayloadServiceImpl.java
@@ -9,19 +9,19 @@
import com.dji.sample.manage.model.dto.DeviceDictionaryDTO;
import com.dji.sample.manage.model.dto.DevicePayloadDTO;
import com.dji.sample.manage.model.entity.DevicePayloadEntity;
+import com.dji.sample.manage.model.enums.DeviceDomainEnum;
import com.dji.sample.manage.model.receiver.DevicePayloadReceiver;
import com.dji.sample.manage.model.receiver.FirmwareVersionReceiver;
import com.dji.sample.manage.service.ICapacityCameraService;
import com.dji.sample.manage.service.IDeviceDictionaryService;
import com.dji.sample.manage.service.IDevicePayloadService;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -29,6 +29,7 @@
* @version 0.1
* @date 2021/11/19
*/
+@Slf4j
@Service
@Transactional
public class DevicePayloadServiceImpl implements IDevicePayloadService {
@@ -124,6 +125,48 @@
.eq(DevicePayloadEntity::getDeviceSn, receiver.getSn()));
}
+ @Override
+ public void saveDeviceBasicPayload(List<DevicePayloadReceiver> payloadReceiverList, Long timestamp) {
+ if (payloadReceiverList.isEmpty()) {
+ return;
+ }
+ String deviceSn = payloadReceiverList.stream().findAny().get().getDeviceSn();
+ String key = RedisConst.STATE_PAYLOAD_PREFIX + deviceSn;
+ // Solve timing problems
+ long last = (long) Objects.requireNonNullElse(redisOps.get(key), 0L);
+ if (last > timestamp) {
+ return;
+ }
+
+
+ // Filter unsaved payload information.
+ Set<String> payloadSns = this.getDevicePayloadEntitiesByDeviceSn(payloadReceiverList.get(0).getDeviceSn())
+ .stream().map(DevicePayloadDTO::getPayloadSn).collect(Collectors.toSet());
+
+ Set<String> newPayloadSns = payloadReceiverList.stream().map(DevicePayloadReceiver::getSn).collect(Collectors.toSet());
+ Set<String> needToDel = payloadSns.stream().filter(sn -> !newPayloadSns.contains(sn)).collect(Collectors.toSet());
+ this.deletePayloadsByPayloadsSn(needToDel);
+
+ List<DevicePayloadReceiver> needToSave = payloadReceiverList.stream()
+ .filter(payload -> !payloadSns.contains(payload.getSn())).collect(Collectors.toList());
+
+ // Save the new payload information.
+ boolean isSave = this.savePayloadDTOs(needToSave);
+ if (isSave) {
+ redisOps.setWithExpire(key, timestamp, RedisConst.DEVICE_ALIVE_SECOND);
+ }
+ log.debug("The result of saving the payloads is {}.", isSave);
+ }
+
+ @Override
+ public void deletePayloadsByPayloadsSn(Collection<String> payloadSns) {
+ if (CollectionUtils.isEmpty(payloadSns)) {
+ return;
+ }
+ mapper.delete(new LambdaUpdateWrapper<DevicePayloadEntity>()
+ .or(wrapper -> payloadSns.forEach(sn -> wrapper.eq(DevicePayloadEntity::getPayloadSn, sn))));
+ }
+
/**
* Convert database entity objects into payload data transfer object.
* @param entity
@@ -162,7 +205,7 @@
if (arr.length == 3) {
Optional<DeviceDictionaryDTO> dictionaryOpt = dictionaryService
- .getOneDictionaryInfoByTypeSubType(arr[0], arr[1]);
+ .getOneDictionaryInfoByTypeSubType(DeviceDomainEnum.PAYLOAD.getVal(), arr[0], arr[1]);
dictionaryOpt.ifPresent(dictionary ->
builder.payloadName(dictionary.getDeviceName())
.payloadDesc(dictionary.getDeviceDesc()));
--
Gitblit v1.9.3