package com.dji.sample.wayline.controller;
|
|
import com.dji.sample.common.model.CustomClaim;
|
import com.dji.sample.common.model.PaginationData;
|
import com.dji.sample.common.model.ResponseResult;
|
import com.dji.sample.common.util.MinioUrlUtils;
|
import com.dji.sample.log.aspect.SysLogAnnotation;
|
import com.dji.sample.wayline.model.dto.WaylineFileDTO;
|
import com.dji.sample.wayline.model.dto.WaylineFileUploadDTO;
|
import com.dji.sample.wayline.model.dto.WaylineListDTO;
|
import com.dji.sample.wayline.model.entity.WaylineFileEntity;
|
import com.dji.sample.wayline.model.param.WaylineQueryParam;
|
import com.dji.sample.wayline.service.IWaylineFileService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.net.URL;
|
import java.sql.SQLException;
|
import java.util.List;
|
import java.util.Objects;
|
|
import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM;
|
|
/**
|
* @author sean
|
* @version 0.3
|
* @date 2021/12/22
|
*/
|
@RestController
|
@RequestMapping("${url.wayline.prefix}${url.wayline.version}/workspaces")
|
public class WaylineFileController {
|
|
@Autowired
|
private IWaylineFileService waylineFileService;
|
|
/**
|
* 根据查询条件查询航路线文件的基本数据。
|
* pilot中的查询条件字段是固定的。
|
* @param orderBy 排序的字段。在sql语句的末尾拼接。
|
* @param favorited 路径线文件是否为收藏夹。
|
* @param page
|
* @param pageSize
|
* @param templateType
|
* @param workspaceId
|
* @return
|
*/
|
@GetMapping("/{workspace_id}/waylines")
|
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据查询条件查询航路线文件的基本数据")
|
public ResponseResult<PaginationData<WaylineFileDTO>> getWaylinesPagination(@RequestParam(name = "order_by") String orderBy,
|
@RequestParam(required = false) boolean favorited, @RequestParam Integer page,
|
@RequestParam(name = "page_size", defaultValue = "10") Integer pageSize,
|
@RequestParam(name = "template_type", required = false) Integer[] templateType,
|
@PathVariable(name = "workspace_id") String workspaceId) {
|
WaylineQueryParam param = WaylineQueryParam.builder()
|
.favorited(favorited)
|
.page(page)
|
.pageSize(pageSize)
|
.orderBy(orderBy)
|
.templateType(templateType)
|
.build();
|
PaginationData<WaylineFileDTO> data = waylineFileService.getWaylinesByParam(workspaceId, param);
|
return ResponseResult.success(data);
|
}
|
|
/**
|
* 根据wayline文件id查询文件的下载地址;
|
* 和重定向到此地址直接下载。
|
* @param workspaceId
|
* @param waylineId
|
* @param response
|
*/
|
@GetMapping("/{workspace_id}/waylines/{wayline_id}/url")
|
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据wayline文件id查询文件的下载地址1")
|
public void getFileUrl(@PathVariable(name = "workspace_id") String workspaceId,
|
@PathVariable(name = "wayline_id") String waylineId, HttpServletResponse response) {
|
|
try {
|
URL url = waylineFileService.getObjectUrl(workspaceId, waylineId);
|
response.sendRedirect(MinioUrlUtils.getUrl(url));
|
|
} catch (IOException | SQLException e) {
|
e.printStackTrace();
|
}
|
}
|
|
@GetMapping("/{workspace_id}/waylines/{wayline_id}/urlData")
|
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据wayline文件id查询文件的下载地址2")
|
public ResponseResult getFileUrlData(@PathVariable(name = "workspace_id") String workspaceId,
|
@PathVariable(name = "wayline_id") String waylineId, HttpServletResponse response) {
|
|
URL url = null;
|
try {
|
url = waylineFileService.getObjectUrl(workspaceId, waylineId);
|
} catch (SQLException e) {
|
throw new RuntimeException(e);
|
}
|
return ResponseResult.success(MinioUrlUtils.getUrl(url));
|
}
|
|
/**
|
* 当航路线文件被飞行员上传到存储服务器时,
|
* 通过该接口报告文件的基本信息。
|
* @param request
|
* @param workspaceId
|
* @param uploadFile
|
* @return
|
*/
|
@PostMapping("/{workspace_id}/upload-callback")
|
@SysLogAnnotation(operModul = "航线库", operType = "新增", operDesc = "当航路线文件被飞行员上传到存储服务器时,通过该接口报告文件的基本信息")
|
public ResponseResult uploadCallBack(HttpServletRequest request,
|
@PathVariable(name = "workspace_id") String workspaceId,
|
@RequestBody WaylineFileUploadDTO uploadFile) {
|
|
CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM);
|
|
WaylineFileDTO metadata = uploadFile.getMetadata();
|
metadata.setUsername(customClaim.getUsername());
|
metadata.setObjectKey(uploadFile.getObjectKey());
|
metadata.setName(uploadFile.getName());
|
|
int id = waylineFileService.saveWaylineFile(workspaceId, metadata);
|
|
return id <= 0 ? ResponseResult.error() : ResponseResult.success();
|
}
|
|
/**
|
* 根据路径线文件id收藏路径线文件。
|
* @param workspaceId
|
* @param ids wayline file id
|
* @return
|
*/
|
@PostMapping("/{workspace_id}/favorites")
|
@SysLogAnnotation(operModul = "航线库", operType = "修改", operDesc = "根据路径线文件id收藏路径线文件")
|
public ResponseResult markFavorite(@PathVariable(name = "workspace_id") String workspaceId,
|
@RequestParam(name = "id") List<String> ids) {
|
boolean isMark = waylineFileService.markFavorite(workspaceId, ids, true);
|
|
return isMark ? ResponseResult.success() : ResponseResult.error();
|
}
|
|
/**
|
* 根据航路线文件id删除此航路线文件的收藏夹。
|
* @param workspaceId
|
* @param ids wayline file id
|
* @return
|
*/
|
@DeleteMapping("/{workspace_id}/favorites")
|
@SysLogAnnotation(operModul = "航线库", operType = "删除", operDesc = "根据航路线文件id删除此航路线文件的收藏夹")
|
public ResponseResult unmarkFavorite(@PathVariable(name = "workspace_id") String workspaceId,
|
@RequestParam(name = "id") List<String> ids) {
|
boolean isMark = waylineFileService.markFavorite(workspaceId, ids, false);
|
|
return isMark ? ResponseResult.success() : ResponseResult.error();
|
}
|
|
/**
|
* 根据航路线名称检查名称是否已经存在,必须保证航路线名称的唯一性。
|
* 此接口将在上传航路线时被调用,并且必须可用。
|
* @param workspaceId
|
* @param names
|
* @return
|
*/
|
@GetMapping("/{workspace_id}/waylines/duplicate-names")
|
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "根据航路线名称检查名称是否已经存在")
|
public ResponseResult checkDuplicateNames(@PathVariable(name = "workspace_id") String workspaceId,
|
@RequestParam(name = "name") List<String> names) {
|
List<String> existNamesList = waylineFileService.getDuplicateNames(workspaceId, names);
|
|
return ResponseResult.success(existNamesList);
|
}
|
|
/**
|
* 根据航路线id删除工作区中的航路线文件。
|
* @param workspaceId
|
* @param waylineId
|
* @return
|
*/
|
@DeleteMapping("/{workspace_id}/waylines/{wayline_id}")
|
@SysLogAnnotation(operModul = "航线库", operType = "删除", operDesc = "根据航路线id删除工作区中的航路线文件")
|
public ResponseResult deleteWayline(@PathVariable(name = "workspace_id") String workspaceId,
|
@PathVariable(name = "wayline_id") String waylineId) {
|
boolean isDel = waylineFileService.deleteByWaylineId(workspaceId, waylineId);
|
return isDel ? ResponseResult.success() : ResponseResult.error("航线删除失败");
|
}
|
|
/**
|
* 上传kmz航线文件
|
* @param file
|
* @return
|
*/
|
@PostMapping("/{workspace_id}/waylines/file/upload")
|
@SysLogAnnotation(operModul = "航线库", operType = "上传", operDesc = "上传kmz航线文件")
|
public ResponseResult importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,
|
HttpServletRequest request, MultipartFile file,
|
@RequestParam String patchesId) {
|
if (Objects.isNull(file)) {
|
return ResponseResult.error("未上传文件");
|
}
|
CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM);
|
String creator = customClaim.getUsername();
|
waylineFileService.importKmzFile(file, workspaceId, creator,patchesId);
|
return ResponseResult.success();
|
}
|
|
@GetMapping("/{workspace_id}/waylines_list")
|
@SysLogAnnotation(operModul = "航线库", operType = "查询", operDesc = "查询当前工作区航线库列表")
|
public ResponseResult<List<WaylineListDTO>> waylineList(@PathVariable(name = "workspace_id") String workspaceId,String droneName) {
|
return ResponseResult.success(waylineFileService.waylineList(workspaceId,droneName)) ;
|
}
|
|
@PutMapping("/{workspace_id}/wayline_update")
|
public ResponseResult upWayline(@RequestParam String waylineId,@RequestParam String name){
|
WaylineFileEntity entity=WaylineFileEntity
|
.builder()
|
.waylineId(waylineId)
|
.name(name)
|
.build();
|
if(waylineFileService.updateWayline(entity)==0){
|
return ResponseResult.error("更新失败");
|
}else return ResponseResult.success();
|
}
|
}
|