package com.fdkankan.scene.controller; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjectUtil; import com.fdkankan.common.constant.CommonOperStatus; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.model.constants.UploadFilePath; import com.fdkankan.rabbitmq.util.RabbitMqProducer; import com.fdkankan.scene.entity.SceneMarkShape; import com.fdkankan.scene.entity.ScenePlus; import com.fdkankan.scene.entity.ScenePlusExt; import com.fdkankan.scene.service.ISceneMarkShapeService; import com.fdkankan.scene.service.IScenePlusExtService; import com.fdkankan.scene.service.IScenePlusService; import com.fdkankan.scene.vo.FileParamVO; import com.fdkankan.scene.vo.SceneMarkShapeDetectParamVO; import com.fdkankan.scene.vo.SceneMarkShapeParamVO; import com.fdkankan.web.controller.BaseController; import com.fdkankan.web.response.Result; import com.fdkankan.web.response.ResultData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** * 初始化接口 * * @author fdkk */ @RestController @RequestMapping("/service/scene/sceneMarkShape") public class SceneMarkShapeController extends BaseController { @Value("${queue.scene.yolov5-detect-queue}") private String yolov5DetectQueue; @Autowired private ISceneMarkShapeService sceneMarkShapeService; @Resource private FYunFileServiceInterface fYunFileService; @Autowired private IScenePlusService scenePlusService; @Autowired private IScenePlusExtService scenePlusExtService; @Value("${fyun.host}") private String ossUrlPrefix; @Autowired private RabbitMqProducer rabbitMqProducer; @Value("${main.url}") private String mainUrl; /** * 获取场景全景图路径连接 */ @PostMapping("/getPanorama") public ResultData getPanorama(@RequestBody @Validated SceneMarkShapeParamVO param) { ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum()); if(ObjectUtil.isNotNull(scenePlus)) { ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); if (ObjectUtil.isNotNull(scenePlus)) { String publicUserPath = String.format(UploadFilePath.scene_result_data_path, param.getNum()); List panoramaList = fYunFileService.listRemoteFiles(scenePlusExt.getYunFileBucket(), publicUserPath + "caches/images/"); List panoramaListUrl = panoramaList.stream().filter(f -> FileUtil.extName(f).equals("jpg")).map(s -> ossUrlPrefix + s).collect(Collectors.toList()); return ResultData.ok(panoramaListUrl); } } return ResultData.ok("场景数据不存在"); } /** * 根据场景码和图片名称获取数据 */ @PostMapping("/getInfo") public ResultData getInfo(@RequestBody @Validated SceneMarkShapeParamVO param) { SceneMarkShape res= sceneMarkShapeService.findByNumAndImagePath(param.getNum(),param.getImagePath()); return ResultData.ok(res); } /** * 将需要推理的场景推入到队列 */ @PostMapping("/detectScene") public ResultData detect(@RequestBody @Validated SceneMarkShapeDetectParamVO param) { param.setWebSite(mainUrl); rabbitMqProducer.sendByWorkQueue(yolov5DetectQueue, param); return ResultData.ok(); } /** * 保存或者修改 */ @PostMapping("/saveOrEdit") public ResultData save(@RequestParam(value = "num") String num,@RequestParam("file") MultipartFile file) throws IOException { sceneMarkShapeService.saveFileToDB(file,num); return ResultData.ok(); } /** * 保存或者修改JSON */ @PostMapping("/saveOrEditJson") public ResultData saveOrEditJson(@RequestBody SceneMarkShape param) { SceneMarkShape shape = sceneMarkShapeService.findByNumAndImagePath(param.getNum(), param.getImagePath()); if (ObjectUtil.isNotNull(shape)){ param.setId(shape.getId()); return ResultData.ok(sceneMarkShapeService.updateById(shape)); }else { return ResultData.ok(sceneMarkShapeService.save(shape)); } } }