package com.fdkankan.fusion.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.ResultData; import com.fdkankan.fusion.common.ai.BBoxHierarchyBuilder; import com.fdkankan.fusion.common.ai.FloorUser; import com.fdkankan.fusion.common.ai.Floors; import com.fdkankan.fusion.common.util.Openai; import com.fdkankan.fusion.common.util.UploadToOssUtil; import com.fdkankan.fusion.config.FusionConfig; import com.fdkankan.fusion.entity.*; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.request.AiParam; import com.fdkankan.fusion.response.FloorPathVo; import com.fdkankan.fusion.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import scala.Int; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** *

* 前端控制器 *

* * @author * @since 2024-12-10 */ @RestController @RequestMapping("/ai") @Slf4j public class AiController { @Autowired FusionConfig fusionConfig; @Autowired AiService aiService; @PostMapping("/test") public ResultData test(@RequestParam(required = false) String path ) throws IOException { FloorUser floorPlanResults = aiService.coverFloorPlanJson(path); // BBoxHierarchy.buildHierarchy(floorPlanResults.getFloors()); JSONArray jsonArray = BBoxHierarchyBuilder.buildHierarchyStart(floorPlanResults.getFloors()); return ResultData.ok(jsonArray); } @PostMapping("/getByImage") public ResultData getByImage(@RequestBody AiParam param){ if(StringUtils.isBlank(param.getImageUrl())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } try { return ResultData.ok(Openai.gptVision(param.getImageUrl(),fusionConfig.getAiUrl(),null)); } catch (Exception e) { log.info("Openai-error:{}",e); throw new BusinessException(ResultCode.AI_ERROR); } } @Autowired ICaseNumService caseNumService; @Autowired IScenePlusService scenePlusService; @Autowired IAiContentService aiContentService; @GetMapping("/getFloor/{caseId}") public ResultData getFloor(@PathVariable Integer caseId){ String foorPath = "/oss/4dkankan/scene_view_data/%s/user"; String fileName = "floorplan-ai"; String extName = "json"; List byCaseId = caseNumService.getByCaseId(caseId); List numList = byCaseId.stream().filter(e -> e.getNumType() != 3 && e.getNumType() != 2 && e.getNumType()!=5).map(CaseNumEntity::getNum).collect(Collectors.toList()); List scenePluses = scenePlusService.getByNumListAndAi(numList); AiContent aiContent = aiContentService.getById(1); List pathVos = new ArrayList<>(); for (ScenePlus caseNumEntity : scenePluses) { String path = String.format(foorPath, caseNumEntity.getNum()); File file = new File(path); File[] files = file.listFiles(); if(files == null || files.length <=0){ continue; } for (File file1 : files) { if(file1.getName().contains(fileName) && file1.getName().contains(extName)){ try { FloorUser floorPlanResults = aiService.coverFloorPlanJson(file1.getPath()); for (Floors floor : floorPlanResults.getFloors()) { if(floor == null ){ continue; } JSONObject jsonObject = BBoxHierarchyBuilder.buildHierarchyStart(floor); if(jsonObject == null ){ continue; } FloorPathVo pathVo = new FloorPathVo(); pathVo.setNum(caseNumEntity.getNum()); pathVo.setTitle(caseNumEntity.getTitle() + floor.getFloorsName()); pathVo.setParams(jsonObject); pathVo.setUrl(path.replace("4dkankan/","")+"/cad-style-3-"+floor.getSubgroup()+".jpg"); if(aiContent!= null && StringUtils.isNotBlank(aiContent.getContent())){ pathVo.setParamContent(aiContent.getContent()); } pathVos.add(pathVo); } }catch (Exception e){ log.info("getFloor-error:{}",e); } } } } return ResultData.ok(pathVos); } }