/*
|
* 【机场1】从 dock2 原类 com.ard.web.controller.sample.DeviceFirmwareController 复制/独立适配(DJI Dock 1 / M30)。
|
* 与 dock2 原类同服务共存;本文件内的适配差异以「// 机场1:」内联注释标出。
|
*/
|
package com.ard.web.controller.sample.dock1;
|
|
import com.ard.common.core.domain.model.LoginUser;
|
import com.ard.common.utils.SecurityUtils;
|
import com.ard.sample.common.model.PaginationData;
|
import com.ard.sample.common.model.ResponseResult;
|
import com.ard.sample.manage.model.dto.DeviceFirmwareDTO;
|
import com.ard.sample.manage.model.dto.DeviceFirmwareNoteDTO;
|
import com.ard.sample.manage.model.dto.FirmwareFileProperties;
|
import com.ard.sample.manage.model.param.DeviceFirmwareQueryParam;
|
import com.ard.sample.manage.model.param.DeviceFirmwareUpdateParam;
|
import com.ard.sample.manage.model.param.DeviceFirmwareUploadParam;
|
import com.ard.sample.manage.service.IDeviceFirmwareService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.validation.Valid;
|
import javax.validation.constraints.NotNull;
|
import java.util.List;
|
import java.util.Optional;
|
import java.util.stream.Collectors;
|
import com.ard.web.controller.sample.DeviceFirmwareController;
|
|
/**
|
* @author sean
|
* @version 1.2
|
* @date 2022/8/16
|
*/
|
@RestController
|
@RequestMapping("/dock1/workspaces")
|
@Validated
|
public class Dock1DeviceFirmwareController {
|
|
@Autowired
|
private IDeviceFirmwareService service;
|
|
/**
|
* Get the latest firmware version information for this device model.
|
* @param deviceNames
|
* @return
|
*/
|
@GetMapping("/firmware-release-notes/latest")
|
public ResponseResult<List<DeviceFirmwareNoteDTO>> getLatestFirmwareNote(@RequestParam("device_name") List<String> deviceNames) {
|
|
List<DeviceFirmwareNoteDTO> releaseNotes = deviceNames.stream()
|
.map(deviceName -> service.getLatestFirmwareReleaseNote(deviceName))
|
.filter(Optional::isPresent)
|
.map(Optional::get)
|
.collect(Collectors.toList());
|
|
return ResponseResult.success(releaseNotes);
|
}
|
|
/**
|
* Query firmware information based on parameters.
|
* @param workspaceId
|
* @param param
|
* @return
|
*/
|
@GetMapping("/firmwares")
|
public ResponseResult<PaginationData<DeviceFirmwareDTO>> getAllFirmwarePagination(@Valid DeviceFirmwareQueryParam param) {
|
|
PaginationData<DeviceFirmwareDTO> data = service.getAllFirmwarePagination(param);
|
return ResponseResult.success(data);
|
}
|
|
/**
|
* Import firmware file for device upgrades.
|
* @param file
|
* @param param
|
* @return
|
*/
|
@PostMapping("/firmwares/file/upload")
|
public ResponseResult importFirmwareFile(@NotNull(message = "No file received.") MultipartFile file,
|
@Valid DeviceFirmwareUploadParam param) {
|
|
if (!file.getOriginalFilename().endsWith(FirmwareFileProperties.FIRMWARE_FILE_SUFFIX)) {
|
return ResponseResult.error("The file format is incorrect.");
|
}
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
String creator = loginUser.getUsername();
|
|
service.importFirmwareFile(creator, param, file);
|
return ResponseResult.success();
|
}
|
|
/**
|
* Change the firmware availability status.
|
* @param workspaceId
|
* @param firmwareId
|
* @param param
|
* @return
|
*/
|
@PutMapping("/{workspace_id}/firmwares/{firmware_id}")
|
public ResponseResult changeFirmwareStatus(@PathVariable("workspace_id") String workspaceId,
|
@PathVariable("firmware_id") String firmwareId,
|
@Valid @RequestBody DeviceFirmwareUpdateParam param) {
|
|
service.updateFirmwareInfo(DeviceFirmwareDTO.builder()
|
.firmwareId(firmwareId).firmwareStatus(param.getStatus()).build());
|
return ResponseResult.success();
|
}
|
|
|
}
|