rain
2024-05-06 cbc15bffc95c486ec8fe67270d8d4e08de7b1407
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.dji.sample.component.mqtt.handler;
 
import com.dji.sample.component.mqtt.model.CommonTopicReceiver;
import com.dji.sample.component.mqtt.model.StateDataEnum;
import com.dji.sample.manage.model.enums.DeviceDomainEnum;
import com.dji.sample.manage.model.enums.PayloadModelEnum;
import com.dji.sample.manage.model.receiver.FirmwareVersionReceiver;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
 
import java.util.List;
import java.util.Map;
 
/**
 * @author sean
 * @version 0.3
 * @date 2022/2/21
 */
@Service
public class StateFirmwareVersionHandler extends AbstractStateTopicHandler {
 
    protected StateFirmwareVersionHandler(@Autowired @Qualifier("stateDefaultHandler") AbstractStateTopicHandler handler) {
        super(handler);
    }
 
    @Override
    public CommonTopicReceiver handleState(Map<String, Object> dataNode, CommonTopicReceiver stateReceiver, String sn) throws JsonProcessingException {
        // Parse the firmware version of the device.
        if (dataNode.containsKey(StateDataEnum.FIRMWARE_VERSION.getDesc())) {
            FirmwareVersionReceiver firmware = mapper.convertValue(dataNode, FirmwareVersionReceiver.class);
            firmware.setSn(sn);
            firmware.setDomain(DeviceDomainEnum.SUB_DEVICE);
            stateReceiver.setData(firmware);
            return stateReceiver;
        }
 
        // Parse the firmware version of the payload.
        List<String> payloads = PayloadModelEnum.getAllModel();
        long count = dataNode.keySet()
                .stream()
                .map(key -> {
                    int end = key.indexOf("-");
                    return end == -1 ? key : key.substring(0, end);
                })
                .filter(payloads::contains)
                .count();
        if (count > 0) {
            FirmwareVersionReceiver firmware = FirmwareVersionReceiver.builder()
                    .firmwareVersion(((Map<String, String>)(dataNode.values().iterator().next()))
                            .get(StateDataEnum.FIRMWARE_VERSION.getDesc()))
                    .sn(sn)
                    .domain(DeviceDomainEnum.PAYLOAD)
                    .build();
            stateReceiver.setData(firmware);
            return stateReceiver;
        }
 
        return handler.handleState(dataNode, stateReceiver, sn);
    }
}