feiyu02
2025-05-08 9a9a27f185bc0cf9dc0001cfc6839e6d13dbccd9
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
63
64
65
66
67
68
69
70
package com.flightfeather.uav.socket.bean
 
import com.flightfeather.uav.common.utils.DateUtil
import com.flightfeather.uav.lightshare.bean.DataVo
import com.flightfeather.uav.socket.eunm.AirCommandUnit
import com.flightfeather.uav.socket.eunm.FactorType
import java.text.SimpleDateFormat
import java.util.*
 
/**
 * @author riku
 * Date: 2019/9/12
 * 数据包结构
 *
 * 起始字节                     定义                  数据类型                        描述及要求
 *
 */
data class AirDataPackage constructor(
        //起始符
        var head: String? = null,
        //命令单元
        var commandUnit: Int? = null,
        //设备编号
        var deviceCode: String? = null,
        //采样时间
        var dataTime: Date? = null,
        //数据加密方式
//        var encryptionWay: Int? = null,
        //数据单元长度
        var dataLength: Int? = null,
        //数据单元
        var dataUnit: List<DataUnit>,
        //校验码
        var checkCode: Int? = null
){
    companion object {
        //数据中的保留字节数
        const val RESERVED_DATA_COUNT = 12
 
        //动态监测因子所占字节数,不同位数对应不同的组合策略
        const val FACTOR_BIT_LENGTH_1 = 6
        const val FACTOR_BIT_LENGTH_2 = 3
        const val FACTOR_BIT_LENGTH_3 = 2
    }
 
    fun toDataVo()= DataVo().apply {
        this.time = DateUtil.instance.dateToString(dataTime, DateUtil.DateStyle.YYYY_MM_DD_HH_MM_SS)
        this.deviceCode = this@AirDataPackage.deviceCode
        val tempList = mutableListOf<AirData>()
        this@AirDataPackage.dataUnit.forEach {
            if (it is AirData) {
                when (it.factorId?.toInt()) {
                    FactorType.LAT.value -> {
                        this.lat = it.factorData
                    }
                    FactorType.LNG.value -> {
                        this.lng = it.factorData
                    }
                    FactorType.TIME.value -> {
                        it.statusList?.takeIf {l-> l.isNotEmpty() }?.get(0)?.let {d ->
                            this.time = d
                        }
                    }
                }
                tempList.add(it)
            }
        }
        this.values = tempList
    }
}