From 9b2eedb85d53ca32610c32c6e50b5230ab3b16cf Mon Sep 17 00:00:00 2001
From: sean.zhou <sean.zhou@dji.com>
Date: Fri, 22 Jul 2022 20:16:03 +0800
Subject: [PATCH] V1.1.0 for dock

---
 src/main/java/com/dji/sample/manage/service/impl/DevicePayloadServiceImpl.java |   53 ++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 46 insertions(+), 7 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 a88504f..7f05b54 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
@@ -1,12 +1,16 @@
 package com.dji.sample.manage.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.dji.sample.component.redis.RedisConst;
+import com.dji.sample.component.redis.RedisOpsUtils;
 import com.dji.sample.manage.dao.IDevicePayloadMapper;
+import com.dji.sample.manage.model.dto.DeviceDTO;
 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;
@@ -14,6 +18,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
@@ -37,6 +42,9 @@
     @Autowired
     private ICapacityCameraService capacityCameraService;
 
+    @Autowired
+    private RedisOpsUtils redisOps;
+
     @Override
     public Integer checkPayloadExist(String payloadSn) {
         DevicePayloadEntity devicePayload = mapper.selectOne(
@@ -57,12 +65,28 @@
 
     @Override
     public Boolean savePayloadDTOs(List<DevicePayloadReceiver> payloadReceiverList) {
+        if (payloadReceiverList.isEmpty()) {
+            return true;
+        }
+
+        String deviceSn = payloadReceiverList.get(0).getDeviceSn();
+        String key = RedisConst.DEVICE_ONLINE_PREFIX + deviceSn;
+        DeviceDTO device = (DeviceDTO) redisOps.get(key);
+        List<DevicePayloadDTO> payloads = new ArrayList<>();
+
         for (DevicePayloadReceiver payloadReceiver : payloadReceiverList) {
             int payloadId = this.saveOnePayloadDTO(payloadReceiver);
             if (payloadId <= 0) {
                 return false;
             }
+            payloads.add(this.receiver2Dto(payloadReceiver));
         }
+
+        if (payloads.isEmpty()) {
+            payloads = this.getDevicePayloadEntitiesByDeviceSn(deviceSn);
+        }
+        device.setPayloadsList(payloads);
+        redisOps.setWithExpire(RedisConst.DEVICE_ONLINE_PREFIX + device.getDeviceSn(), device, RedisConst.DEVICE_ALIVE_SECOND);
         return true;
     }
 
@@ -89,6 +113,15 @@
                             .eq(DevicePayloadEntity::getDeviceSn, deviceSn));
             capacityCameraService.deleteCapacityCameraByDeviceSn(deviceSn);
         });
+    }
+
+    @Override
+    public void updateFirmwareVersion(FirmwareVersionReceiver receiver) {
+        mapper.update(DevicePayloadEntity.builder()
+                        .firmwareVersion(receiver.getFirmwareVersion())
+                        .build()
+                , new LambdaUpdateWrapper<DevicePayloadEntity>()
+                        .eq(DevicePayloadEntity::getDeviceSn, receiver.getSn()));
     }
 
     /**
@@ -129,8 +162,7 @@
 
             if (arr.length == 3) {
                 Optional<DeviceDictionaryDTO> dictionaryOpt = dictionaryService
-                        .getOneDictionaryInfoByDomainTypeSubType(DeviceDomainEnum.PAYLOAD.getVal(),
-                                arr[0], arr[1]);
+                        .getOneDictionaryInfoByTypeSubType(arr[0], arr[1]);
                 dictionaryOpt.ifPresent(dictionary ->
                         builder.payloadName(dictionary.getDeviceName())
                                 .payloadDesc(dictionary.getDeviceDesc()));
@@ -147,10 +179,17 @@
 
         return builder
                 .payloadSn(dto.getSn())
-                .version(dto.getVersion())
-                .deviceSn(dto.getSn()
-                        .substring(0,
-                                dto.getSn().indexOf("-")))
+                .deviceSn(dto.getDeviceSn())
+                .build();
+    }
+
+    private DevicePayloadDTO receiver2Dto(DevicePayloadReceiver receiver) {
+        DevicePayloadDTO.DevicePayloadDTOBuilder builder = DevicePayloadDTO.builder();
+        if (receiver == null) {
+            return builder.build();
+        }
+        return builder.payloadSn(receiver.getSn())
+                .payloadName(receiver.getPayloadIndex())
                 .build();
     }
 

--
Gitblit v1.9.3