feiyu02
2024-09-06 d17cc66f3026be4609f91fc726b55660aec36e67
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.flightfeather.uav.domain.repository
 
import com.flightfeather.uav.common.exception.BizException
import com.flightfeather.uav.domain.entity.*
import com.flightfeather.uav.domain.mapper.RealTimeDataGridMapper
import com.flightfeather.uav.domain.mapper.RealTimeDataGridMinMapper
import com.flightfeather.uav.domain.mapper.RealTimeDataUavMapper
import com.flightfeather.uav.domain.mapper.RealTimeDataVehicleMapper
import com.flightfeather.uav.socket.eunm.UWDeviceType
import com.github.pagehelper.PageHelper
import org.springframework.stereotype.Repository
import tk.mybatis.mapper.entity.Example
import java.time.LocalDateTime
import java.time.ZoneId
import java.util.*
 
/**
 * 实时走航数据数据库相关操作
 */
@Repository
class RealTimeDataRep(
    private val realTimeDataVehicleMapper: RealTimeDataVehicleMapper,
    private val realTimeDataUavMapper: RealTimeDataUavMapper,
    private val realTimeDataGridMapper: RealTimeDataGridMapper,
    private val realTimeDataGridMinMapper: RealTimeDataGridMinMapper,
) {
 
    private val delegate = RealTimeDataRepDelegate(realTimeDataVehicleMapper, realTimeDataUavMapper,
        realTimeDataGridMapper, realTimeDataGridMinMapper)
 
    fun fetchData(
        deviceType: UWDeviceType?, deviceCode: String, sTime: Date? = null, eTime: Date? = null, type: Int? = 0,
        page: Int? = null, perPage: Int? = null,
    ): List<BaseRealTimeData> {
        if (page != null && perPage != null) {
            var pageInfo = PageHelper.startPage<BaseRealTimeData>(page, perPage)
        }
        return delegate.selectByDeviceType(deviceType, type) { example ->
            example.createCriteria().apply {
                andEqualTo("deviceCode", deviceCode)
                sTime?.let { andGreaterThanOrEqualTo("dataTime", it) }
                eTime?.let { andLessThanOrEqualTo("dataTime", it) }
            }
            example.orderBy("dataTime").apply {
                // 当请求接口不传递起始时间,默认获取最新的数据
                if (sTime == null && eTime == null) {
                    desc()
                }
            }
        }
 
 
//        var result = listOf<BaseRealTimeData>()
//        when (deviceType) {
//            UWDeviceType.VEHICLE -> {
//                result = realTimeDataVehicleMapper.selectByExample(Example(RealTimeDataVehicle::class.java).apply {
//                    getSecondDataExample(this, deviceCode, sTime, eTime)
//                })
//            }
//            UWDeviceType.UAV -> {
//                result = realTimeDataUavMapper.selectByExample(Example(RealTimeDataUav::class.java).apply {
//                    getSecondDataExample(this, deviceCode, sTime, eTime)
//                })
//            }
//            UWDeviceType.GRID -> {
//                // 网格化监测秒级值
//                result = if (type == null || type == 0) {
//                    realTimeDataGridMapper.selectByExample(Example(RealTimeDataGrid::class.java).apply {
//                        getSecondDataExample(this, deviceCode, sTime, eTime)
//                    })
//                }
//                // 网格化监测分钟值
//                else {
//                    realTimeDataGridMinMapper.selectByExample(Example(RealTimeDataGridMin::class.java).apply {
//                        getSecondDataExample(this, deviceCode, sTime, eTime)
//                    })
//                }
//            }
//            else -> Unit
//        }
//        return result
    }
 
    fun fetchData(mission: Mission) =
        fetchData(UWDeviceType.fromValue(mission.deviceType), mission.deviceCode, mission.startTime, mission.endTime)
 
 
    fun saveData(deviceType: UWDeviceType?, data: List<BaseRealTimeData>, type: Int? = 0): Int {
        return delegate.insertByDeviceType(deviceType, type, data)
//        return when (deviceType) {
//            UWDeviceType.UAV -> realTimeDataUavMapper.insertList(data as List<RealTimeDataUav>)
//            UWDeviceType.VEHICLE -> realTimeDataVehicleMapper.insertList(data as List<RealTimeDataVehicle>)
//            UWDeviceType.GRID -> realTimeDataGridMapper.insertList(data as List<RealTimeDataGrid>)
//            UWDeviceType.BOAT -> 0
//            else -> 0
//        }
    }
 
    fun deleteData(mission: Mission, type: Int? = 0): Int {
        if (mission.deviceCode == null || mission.startTime == null || mission.endTime == null) {
            throw BizException("要删除的走航任务缺失设备编号或采样时间范围,无法删除对应监测数据")
        }
        return deleteData(UWDeviceType.fromValue(mission.deviceType),
            mission.deviceCode,
            mission.startTime,
            mission.endTime, type)
    }
 
    fun deleteData(deviceType: UWDeviceType?, deviceCode: String, sTime: Date?, eTime: Date?, type: Int? = 0): Int {
        return delegate.deleteByDeviceType(deviceType, type) {
            it.createCriteria().apply {
                andEqualTo("deviceCode", deviceCode)
                andGreaterThanOrEqualTo("dataTime", sTime)
                andLessThanOrEqualTo("dataTime", eTime)
            }
        }
    }
 
    fun deleteData(
        deviceType: UWDeviceType?, deviceCode: String, sTime: LocalDateTime?, eTime: LocalDateTime?, type: Int? = 0,
    ): Int = deleteData(deviceType, deviceCode,
        Date.from(sTime?.atZone(ZoneId.systemDefault())?.toInstant()),
        Date.from(eTime?.atZone(ZoneId.systemDefault())?.toInstant()),
        type
    )
 
    fun deleteData(deviceType: UWDeviceType?, data: List<BaseRealTimeData>, type: Int? = 0) {
        delegate.deleteByDeviceType(deviceType, type, data)
    }
}