package org.sxkj.odm.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.sxkj.common.model.ResponseResult; import org.sxkj.odm.entity.OdmTaskInfo; import org.sxkj.odm.entity.PointParam; import org.sxkj.odm.service.IOdmTaskInfoService; import org.sxkj.odm.service.WebOdmSendRequest; import org.sxkj.odm.vo.MapLatLng; import org.sxkj.odm.vo.OdmTaskInfoQueryParam; import org.sxkj.odm.vo.OdmTaskInfoVO; import org.sxkj.tools.feign.IObjConvertClient; import org.sxkj.system.vo.TreeVo; import org.sxkj.tools.feign.ITifConvertClient; import org.sxkj.tools.model.TifConvertResult; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j @RestController @RequestMapping("/odmTaskInfo/odmTaskInfo") @Api(value = "odm任务", tags = "odm任务") public class OdmTaskInfoController { @Autowired private WebOdmSendRequest sendRequest; @Autowired private IOdmTaskInfoService odmTaskInfoService; @Autowired private IObjConvertClient objConvertClient; @Autowired private ITifConvertClient tifConvertClient; /** * 自定义分页列表查询 * * @param query * @param odmTaskInfo * @return */ @GetMapping("/page") @ApiOperation(value = "自定义分页列表查询", notes = "传入odmTaskInfo") public R selectDevicePage(Query query, OdmTaskInfoVO odmTaskInfo) { IPage page = odmTaskInfoService.selectOdmTaskInfoPage(Condition.getPage(query), odmTaskInfo); return R.data(page); } /** * odm 任务信息信息新增 * * @param odmTaskInfo * @return */ @ApiLog("odm 任务信息信息新增") @ApiOperation(value = "odm 任务信息信息新增", notes = "传入odmTaskInfo") @PostMapping("/add") public R add(@RequestBody OdmTaskInfo odmTaskInfo) { return R.status(odmTaskInfoService.save(odmTaskInfo)); } /** * 修改 * * @param odmTaskInfo * @return */ @PostMapping("/update") @ApiOperation(value = "odm 任务信息信息修改", notes = "传入odmTaskInfo") @ApiLog("odm 任务信息信息修改") public R update(@RequestBody OdmTaskInfo odmTaskInfo) { return R.status(odmTaskInfoService.updateById(odmTaskInfo)); } /** * 删除 * * @param ids * @return */ @PostMapping("/delete") @ApiLog("odm 任务信息信息删除") @ApiOperation(value = "odm 任务信息信息删除", notes = "传入ids") public R delete(@RequestParam(value = "ids") String ids) { return R.status(odmTaskInfoService.removeByIds(Func.toLongList(ids))); } /** * 自定义删除 * * @param ids * @return */ @PostMapping("/remove") @ApiLog("自定义 odm 任务信息信息删除") @ApiOperation(value = "自定义 odm 任务信息信息删除", notes = "传入ids") public R remove(@RequestParam(value = "ids") String ids) { return R.status(odmTaskInfoService.removeOdmTaskByIds(Func.toLongList(ids))); } /** * odm 任务创建 * * @param jobId 航线任务id * @param ortRes 正射影像的分辨率,单位为 cm/pixel * @return */ @PostMapping("/createOdmTask") @ApiOperation(value = "odm 任务创建", notes = "传入jobId") @ApiLog("odm 任务创建") public R createOdmTask(@ApiParam(value = "航线任务id", required = true) String jobId, @ApiParam(value = "正射影像的分辨率,单位为 cm/pixel") Double ortRes) { return R.status(odmTaskInfoService.createWebOdmTask(jobId, ortRes)); } /** * odm 任务重启 * * @param taskId odm taskId 任务id * @return */ @PostMapping("/restartOdmTask") @ApiOperation(value = "odm 任务重启", notes = "传入taskId") @ApiLog("odm 任务重启") public R restartOdmTask(@RequestParam(value = "taskId") String taskId) { return R.status(odmTaskInfoService.restartOdmTask(taskId)); } /** * 获取正射影像url * * @param jobId 航线任务id * @return */ @GetMapping("/getOrthoimageUrl") @ApiOperation(value = "获取正射影像url", notes = "传入jobId") public R getOrthoimageUrl(String jobId) { return R.data(odmTaskInfoService.getOrthoimageUrl(jobId)); } /** * 获取正射图斑-正射影像服务信息 * * @param dkbh 图斑编号 * @param workspaceId 项目id * @return */ @GetMapping("/getOrthoimageInfo") @ApiOperation(value = "获取正射图斑-正射影像服务信息", notes = "传入dkbh") public R getOrthoimageInfo(String dkbh, String workspaceId, @RequestParam(value = "jobId", required = false) String jobId) { return odmTaskInfoService.getOrthoimageInfo(dkbh, workspaceId, jobId); } /** * 获取正射图斑-正射影像服务信息 * * @param lotInfoId 图斑id * @param workspaceId 项目id * @return */ @GetMapping("/getOrthoimageInfos") @ApiOperation(value = "获取正射图斑-正射影像服务信息", notes = "传入dkbh") public R getOrthoimageInfos(@RequestParam(value = "lotInfoId", required = false) String lotInfoId, @RequestParam(value = "workspaceId", required = false) String workspaceId, @RequestParam(value = "jobId", required = false) String jobId) { return odmTaskInfoService.getOrthoimageInfos(lotInfoId, workspaceId, jobId); } /** * 获取token * * @return */ @RequestMapping("/getOdmToken") public R getOdmToken() { String token = "JWT " + sendRequest.getOdmToken(); return R.data(token); } /** * 更新正射影像tif 信息到 附件表 * * @return */ @GetMapping("/updateOrthoimageToAttach") @ApiOperation(value = "更新正射影像tif信息到附件表", notes = "") public R updateOrthoimageToAttach() { return odmTaskInfoService.updateOrthoimageToAttach(); } /** * 更新三维白膜信息到 附件表 * * @return */ @GetMapping("/updateVoxGridTilesToAttach") @ApiOperation(value = "更新三维白膜信息到附件表", notes = "") public R updateVoxGridTilesToAttach() { return odmTaskInfoService.updateVoxGridTilesToAttach(); } /** * 获取odm 任务下载url * * @param dkbh * @param workspaceId * @return */ @GetMapping("/getOdmTaskDownUrl") @ApiOperation(value = "获取odm 任务下载url", notes = "传入dkbh") public R getOdmTaskDownUrl(String dkbh, String workspaceId, @RequestParam(value = "jobId", required = false) String jobId) { return R.data(odmTaskInfoService.getOdmTaskDownUrl(dkbh, workspaceId, jobId)); } /** * 定时删除odm临时文件任务 * * @return */ @GetMapping("/deletedOdmTempFile") public R deletedOdmTempFile() { return R.data(odmTaskInfoService.deletedOdmTempFile()); } /** * 定时删除odm拼图任务中失效的文件 * * @return */ @GetMapping("/deletedOdmTaskInVFile") public R deletedOdmTaskInVFile() { return R.data(odmTaskInfoService.deletedOdmTaskInVFile()); } /** * 定时删除odm拼图任务中重复的任务(同一个图斑多个任务,保留最新的) * * @return */ @GetMapping("/deletedRepOdmTask") public R deletedRepOdmTask() { return R.data(odmTaskInfoService.deletedRepOdmTask()); } /** * tif 图片解析 * * @param dkbh 地块编号 * @return */ @GetMapping("/tifParse") public R tifParse(String dkbh) { return R.data(odmTaskInfoService.tifParse(dkbh, true, null)); } /** * 历史odm tif 数据处理 * * @return */ @GetMapping("/hisOdmTaskTifDataHandler") public R hisOdmTaskTifDataHandler() { return R.data(odmTaskInfoService.hisOdmTaskTifDataHandler()); } /** * 视频处理成3d 白膜测试 * * @return */ @GetMapping("/videoToOdm") public R videoToOdm(String jobId) { return R.data(odmTaskInfoService.videoToOdm(jobId)); } /** * 查询地图位置上3d-tiles数据 * * @param dto * @return */ @ApiOperation(value = "查询地图位置上3d-tiles数据", notes = "") @PostMapping("/getVoxGridTilesList") public ResponseResult getVoxGridTilesList(@RequestBody OdmTaskInfoQueryParam dto) { return ResponseResult.success(odmTaskInfoService.getVoxGridTilesList(dto)); } /** * 查询地图位置上3d-tiles数据-单机巢 * * @param dto * @return */ @ApiOperation(value = "查询地图位置上3d-tiles数据-单机巢", notes = "") @PostMapping("/getVoxGridTilesListBySinglePlayer") public ResponseResult getVoxGridTilesListBySinglePlayer(@RequestBody OdmTaskInfoQueryParam dto) { return ResponseResult.success(odmTaskInfoService.getVoxGridTilesListBySinglePlayer(dto)); } /** * 历史 odm 新增相关字段数据补充 * * @return */ @ApiOperation(value = "历史 odm 新增相关字段数据补充", notes = "") @GetMapping("/historyOdmTaskDataHandler") public ResponseResult historyOdmTaskDataHandler() { return ResponseResult.success(odmTaskInfoService.historyOdmTaskDataHandler()); } /** * 测试远程调用资源模块 * * @return */ @ApiOperation(value = "测试远程调用资源模块", notes = "") @PostMapping("/testToResource") public ResponseResult testToResource(@RequestParam MultipartFile file) { return ResponseResult.success(odmTaskInfoService.testToResource(file)); } /** * 3d白膜部分生成失败补充 * * @return */ @ApiOperation(value = "3d白膜部分生成失败补充", notes = "") @GetMapping("/3dTilesSup") public void tilesSup(OdmTaskInfoVO odmTaskInfo) { odmTaskInfoService.tilesSupByParam(odmTaskInfo); } /** * 获取历史 obj 网格数据 * * @return */ @ApiOperation(value = "获取历史 obj 网格数据", notes = "") @GetMapping("/getHisObjGridData") public ResponseResult getHisObjGridData() { return ResponseResult.success(odmTaskInfoService.getHisObjGridData()); } /** * 获取历史 点云数据 * * @return */ @ApiOperation(value = "获取历史 点云数据", notes = "") @GetMapping("/getHisPointCloudData") public ResponseResult getHisPointCloudData() { return ResponseResult.success(odmTaskInfoService.getHisPointCloudData()); } /** * 处理历史已飞的点云提取建筑生成白膜 * * @return */ @ApiOperation(value = "处理历史已飞的点云提取建筑生成白膜", notes = "") @GetMapping("/handleHistoryPointCloudTo3dtiles") public ResponseResult handleHistoryPointCloudTo3dtiles() { return ResponseResult.success(odmTaskInfoService.handleHistoryPointCloudTo3dtiles()); } /** * 航线飞行路径规划 * * @return */ @PostMapping("/route-planning") @ApiOperation(value = "航线飞行路径规划", notes = "") public List waylineFlightPathPlanning(@RequestBody List param) { return odmTaskInfoService.waylineFlightPathPlanning(param); } /** * 保存禁飞区面数据 */ @GetMapping("/saveMultipolygonInfo") @ApiOperation(value = "保存禁飞区面数据", notes = "") public Map saveMultipolygonInfo(@RequestParam("height") Double height, @RequestParam("geoData") String geoData) { return odmTaskInfoService.saveMultipolygonInfo(height, geoData); } /** * 删除禁飞区面数据 */ @GetMapping("/deleteMultipolygonInfo") @ApiOperation(value = "删除禁飞区面数据", notes = "") public Boolean deleteMultipolygonInfo(@RequestParam("ids") String ids) { return odmTaskInfoService.deleteGrid(ids); } /** * 初始化机场附近五公里的地形高度 * * @param centerLon 中心经度 * @param centerLat 中心纬度 * @param dockSn dock编号 * @return */ @ApiOperation(value = "初始化机场附近五公里的地形高度", notes = "") @GetMapping("/initAirportTerrainHeight") public R initAirportTerrainHeight(@RequestParam("centerLon") String centerLon, @RequestParam("centerLat") String centerLat, @RequestParam("dockSn") String dockSn) { return R.data(odmTaskInfoService.cacheAirportTerrainHeightParams(centerLon, centerLat, dockSn)); } // 删除机场附近五公里的地形高度 @ApiOperation(value = "删除机场附近五公里的地形高度", notes = "") @GetMapping("/deleteAirportTerrainHeight") public R deleteAirportTerrainHeight(@RequestParam("dockSn") String dockSn) { return R.data(odmTaskInfoService.deleteAirportTerrainHeight(dockSn)); } /** * 传入航线经纬度集合,获取航线生成面的最高地形高度 * * @param mapLatLng * @return */ @PostMapping("/getWaylineMaxTerrainHeight") @ApiOperation(value = "传入航线经纬度List,获取航线生成面的最高地形高度", notes = "") public R getWaylineMaxTerrainHeight(@RequestBody List mapLatLng) { return R.data(odmTaskInfoService.getWaylineMaxTerrainHeight(mapLatLng)); } /** * 初始化机场附近五公里的地形高度 * * @param centerLon 中心经度 * @param centerLat 中心纬度 * @param dockSn dock编号 * @return */ // todo 用了测试的接口,先保留,后面可以删除 @ApiOperation(value = "初始化机场附近五公里的地形高度", notes = "") @GetMapping("/initAirportTerrainHeightTwo") public R initAirportTerrainHeightTwo(@RequestParam("centerLon") String centerLon, @RequestParam("centerLat") String centerLat, @RequestParam("dockSn") String dockSn) { return R.data(odmTaskInfoService.initAirportTerrainHeight(centerLon, centerLat, dockSn)); } /** * 实景三维生成失败补充 * * @return */ @ApiOperation(value = "实景三维生成失败补充", notes = "") @GetMapping("/liveTilesSup") public void liveTilesSup() { odmTaskInfoService.liveTilesSup(); } /** * 测试实景三维生成失败补充 * * @return */ @ApiOperation(value = "测试实景三维生成失败补充", notes = "") @GetMapping("/testLiveTilesSup") public String testLiveTilesSup() { Map tifMap = new HashMap<>(1); String ortPath = "E:\\shp\\222\\orthophoto.tif"; tifMap.put("ort_path", ortPath); TifConvertResult tifConvertResult = tifConvertClient.tifConvJpeg(tifMap); log.info("转换结果信息:{}", tifConvertResult); log.info(tifConvertResult.getBasePath()); log.info(tifConvertResult.getShowPath()); log.info(tifConvertResult.getSmallPath()); String objPath = "E:\\temp\\webodm\\textured_model\\odm_textured_model_geo.obj"; String positionTxtPath = "E:\\temp\\webodm\\textured_model\\odm_georeferencing_model_geo.txt"; Map map = new HashMap<>(2); map.put("obj_path", objPath); map.put("pos_file_path", positionTxtPath); // 远程调用接口获取结果 String result = objConvertClient.obj2TilesModel(map); log.info(result); return result; } }