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
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.flightfeather.uav.lightshare.web
 
import com.flightfeather.uav.domain.entity.GridData
import com.flightfeather.uav.domain.entity.GridDataDetail
import com.flightfeather.uav.lightshare.bean.AreaVo
import com.flightfeather.uav.lightshare.service.SatelliteDataCalculateService
import com.flightfeather.uav.lightshare.service.SatelliteTelemetryService
import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import io.swagger.annotations.ApiParam
import org.springframework.format.annotation.DateTimeFormat
import org.springframework.web.bind.annotation.*
import org.springframework.web.multipart.MultipartFile
import springfox.documentation.annotations.ApiIgnore
import java.time.LocalDateTime
import javax.servlet.http.HttpServletResponse
 
/**
 * 卫星遥测
 * @date 2024/12/5
 * @author feiyu02
 */
@Api(tags = ["卫星遥测API接口"])
@RestController
@RequestMapping("air/satellite")
class SatelliteTelemetryController(
    private val satelliteTelemetryService: SatelliteTelemetryService,
    private val satelliteDataCalculateService: SatelliteDataCalculateService,
) {
 
    @ApiOperation(value = "获取网格组信息")
    @PostMapping("/grid/group")
    fun fetchGridGroup(
        @RequestBody areaVo: AreaVo,
        @RequestParam(required = false) type: String?,
        @RequestParam("page", required = false) page: Int?,
        @RequestParam("per_page", required = false) perPage: Int?,
    ) = resPack { satelliteTelemetryService.fetchGridGroup(areaVo, type, page, perPage) }
 
    @ApiOperation(value = "获取网格组内具体网格信息")
    @GetMapping("/grid/cell")
    fun fetchGridCell(
        @ApiParam("网格组id") @RequestParam groupId: Int,
    ) = resPack { satelliteTelemetryService.fetchGridCell(groupId) }
 
    @ApiOperation(value = "获取网格组下的卫星遥测数据")
    @GetMapping("/grid/data")
    fun fetchGridData(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dataTime: LocalDateTime?,
        @ApiParam("遥测数据类型", allowableValues = "0:原始卫星遥测数据;1:融合数据")
        @RequestParam(required = false) type: Int?,
    ) = resPack { satelliteTelemetryService.fetchGridData(groupId, dataTime, type) }
 
    @ApiOperation(value = "获取网格组下的卫星遥测数据")
    @PostMapping("/grid/data2")
    fun fetchGridData2(
        @ApiParam("网格数据") @RequestBody gridData: GridData,
    ) = resPack { satelliteTelemetryService.fetchGridData(gridData) }
 
    @ApiOperation(value = "删除网格数据")
    @DeleteMapping("/grid/data/delete")
    fun deleteGridData(
        @ApiParam("数据id") @RequestParam dataId: Int,
    ) = resPack { satelliteTelemetryService.deleteGridData(dataId) }
 
    @ApiOperation(value = "获取网格组下的卫星遥测具体数据")
    @GetMapping("/grid/data/detail")
    fun fetchGridDataDetail(
        @ApiParam("遥测数据id") @RequestParam dataId: Int,
        @ApiParam("网格组id") @RequestParam(required = false) groupId: Int?,
        @ApiParam("网格单元格id") @RequestParam(required = false) cellId: Int?,
    ) = resPack { satelliteTelemetryService.fetchGridDataDetail(dataId, groupId, cellId) }
 
    @ApiOperation(value = "保存拟合生成的卫星遥测PM2.5结果数据")
    @PostMapping("/grid/data/create")
    fun createGridDataAndDataDetail(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dateTime: LocalDateTime,
        @RequestBody gridDataDetail: List<GridDataDetail>,
    ) = resPack {
        satelliteTelemetryService.createGridDataAndDataDetail(groupId, dateTime, gridDataDetail)
    }
 
 
    @ApiOperation(value = "多次走航数据进行融合计算")
    @PostMapping("/grid/data/mix")
    fun mixGridData(
        @ApiParam("原始数据id数组") @RequestBody dataIdList: List<Int>,
    ) = resPack { satelliteTelemetryService.mixGridData(dataIdList) }
 
 
    @ApiOperation(value = "导入卫星遥测PM2.5结果数据")
    @PostMapping("/import/grid/data")
    fun importGridData(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dateTime: LocalDateTime,
        @ApiParam("覆盖旧数据 0: 不覆盖 1: 覆盖") @RequestParam update: Boolean,
        @RequestParam("excel") file: MultipartFile,
    ) = resPack {
        satelliteTelemetryService.importGridData(groupId, dateTime, update, file)
    }
 
    @ApiOperation(value = "下载卫星遥测PM2.5结果数据导入模板")
    @GetMapping("/import/grid/data/download/template")
    fun downloadTemplate(@ApiIgnore response: HttpServletResponse) =
        satelliteTelemetryService.downloadTemplate(response)
 
    @ApiOperation(value = "导入卫星遥测Aod结果数据")
    @PostMapping("/import/grid/aod")
    fun importGridAOD(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dateTime: LocalDateTime,
        @ApiParam("覆盖旧数据 0: 不覆盖 1: 覆盖") @RequestParam update: Boolean,
        @RequestParam("excel") file: MultipartFile,
    ) = resPack {
        satelliteTelemetryService.importGridAOD(groupId, dateTime, update, file)
    }
 
    @ApiOperation(value = "下载卫星遥测Aod结果数据导入模板")
    @GetMapping("/import/grid/aod/download/template")
    fun downloadAODTemplate(@ApiIgnore response: HttpServletResponse) =
        satelliteTelemetryService.downloadAODTemplate(response)
 
 
    /**AOD数据相关**************************************************************/
    @ApiOperation(value = "获取网格组下的卫星遥测aod数据")
    @GetMapping("/grid/aod")
    fun fetchGridAod(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("遥测数据时间")
        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dataTime: LocalDateTime?,
    ) = resPack { satelliteTelemetryService.fetchGridAod(groupId, dataTime) }
 
//    @ApiOperation(value = "获取网格组下的卫星遥测AOD数据")
//    @GetMapping("/aod/data")
//    fun fetchGridAOD(
//        @ApiParam("网格组id") @RequestParam groupId: Int,
//        @ApiParam("AOD数据时间")
//        @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") dataTime: LocalDateTime?,
//    ) = resPack { satelliteTelemetryService.fetchGridAOD(groupId, dataTime) }
 
    @ApiOperation(value = "获取网格组下的卫星遥测AOD具体数据")
    @GetMapping("/aod/data/detail")
    fun fetchGridAODDetail(
        @ApiParam("AOD数据id") @RequestParam aodId: Int,
        @ApiParam("网格组id") @RequestParam(required = false) groupId: Int?,
        @ApiParam("网格单元格id") @RequestParam(required = false) cellId: Int?,
    ) = resPack { satelliteTelemetryService.fetchGridAODDetail(aodId, groupId, cellId) }
 
 
    /**遥测产品制作相关**************************************************************/
    @ApiOperation(value = "生成走航融合产品")
    @PostMapping("/product/underway/build")
    fun buildUnderwayProduct(
//        @ApiParam("走航任务编号") @RequestParam missionCode: String,
//        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("网格数据") @RequestBody gridData: GridData,
    ) = resPack { satelliteDataCalculateService.dataFusion(gridData) }
 
    @ApiOperation(value = "进行走航融合产品的融合分析")
    @PostMapping("/product/underway/mix")
    fun mixGridData(
        @ApiParam("网格组id") @RequestParam groupId: Int,
        @ApiParam("需要融合的数据id") @RequestBody dataIdList: List<Int>,
    ) = resPack { satelliteDataCalculateService.mixUnderwayGridData(groupId, dataIdList) }
 
    @ApiOperation(value = "生成走航热力图")
    @PostMapping("/product/underway/heatmap/build")
    fun buildUnderwayHeatmap(
        @ApiParam("使用的网格组id") @RequestParam groupId: Int,
        @ApiParam("搜索网格距离") @RequestParam searchLength: Int,
        @ApiParam("使用的走航网格数据") @RequestBody gridDataDetailList: List<GridDataDetail>,
    ) = resPack { satelliteDataCalculateService.buildHeatmap(groupId, gridDataDetailList, searchLength) }
}