lyhzzz 1 month ago
parent
commit
8d70652158

+ 13 - 9
src/main/java/com/fdkankan/fusion/controller/AiController.java

@@ -1,6 +1,7 @@
 package com.fdkankan.fusion.controller;
 
 
+import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -79,11 +80,11 @@ public class AiController {
         String foorPath = "/oss/4dkankan/scene_view_data/%s/user";
         String fileName = "floorplan-ai";
         String extName = "json";
+        String freespacePath = "/oss/4dkankan/scene_view_data/%s/images/cover/final_freespace.png";
         List<CaseNumEntity> byCaseId = caseNumService.getByCaseId(caseId);
         List<String> numList = byCaseId.stream().filter(e -> e.getNumType() != 3 && e.getNumType() != 2 && e.getNumType()!=5).map(CaseNumEntity::getNum).collect(Collectors.toList());
         List<ScenePlus> scenePluses = scenePlusService.getByNumListAndAi(numList);
 
-        AiContent aiContent = aiContentService.getById(1);
 
         List<FloorPathVo> pathVos = new ArrayList<>();
         for (ScenePlus caseNumEntity : scenePluses) {
@@ -94,29 +95,32 @@ public class AiController {
             if(files == null || files.length <=0){
                 continue;
             }
+            String freespaceUrl = null;
+            if(new File(freespacePath).exists()){
+                freespaceUrl = freespacePath.replace("4dkankan/","");
+            }
+
             for (File file1 : files) {
                 if(file1.getName().contains(fileName) && file1.getName().contains(extName)){
                     try {
+                        String s = FileUtil.readUtf8String(file1);
                         FloorUser floorPlanResults = aiService.coverFloorPlanJson(file1.getPath());
                         for (Floors floor : floorPlanResults.getFloors()) {
                             if(floor == null ){
                                 continue;
                             }
-                            JSONObject jsonObject = BBoxHierarchyBuilder.buildHierarchyStart(floor);
-                            if(jsonObject == null  ){
-                                continue;
-                            }
+//                            JSONObject jsonObject = BBoxHierarchyBuilder.buildHierarchyStart(floor);
+//                            if(jsonObject == null  ){
+//                                continue;
+//                            }
                             FloorPathVo pathVo = new FloorPathVo();
                             pathVo.setNum(caseNumEntity.getNum());
                             pathVo.setTitle(caseNumEntity.getTitle());
                             if(floorPlanResults.getFloors().size() >1){
                                 pathVo.setTitle(caseNumEntity.getTitle()+"_"+ floor.getFloorsName());
                             }
-                            pathVo.setParams("## 数据\n"+jsonObject.toJSONString());
                             pathVo.setUrl(path.replace("4dkankan/","")+"/cad-style-3-"+floor.getSubgroup()+".jpg");
-                            if(aiContent!= null && StringUtils.isNotBlank(aiContent.getContent())){
-                                pathVo.setParamContent(aiContent.getContent());
-                            }
+                            pathVo.setFreeSpaceUrl(freespaceUrl);
                             pathVos.add(pathVo);
                         }
                     }catch (Exception e){

+ 1 - 47
src/main/java/com/fdkankan/fusion/response/FloorPathVo.java

@@ -11,51 +11,5 @@ public class FloorPathVo {
     private String num;
     private String title;
     private String url;
-    private String params;
-    private String paramContent ="# 角色\n" +
-            "你是一位专业的户型图分析专家,专注于解析户型图的识别结果数据,生成详细的户型结构描述,并准确判断家具所在的具体房间及其方位。\n" +
-            "\n" +
-            "## 技能\n" +
-            "### 技能1: 户型结构概述\n" +
-            "- 根据输入的识别结果数据和图片尺寸,生成整个户型的结构概述。\n" +
-            "- 描述户型的整体布局,包括主要功能区域(如卧室、客厅、厨房、卫生间等)及其分布。\n" +
-            "- 相同的房间加上序号序号输出到结果\n" +
-            "- 输出户型的基本信息,例如“[X室X厅X卫]”。\n" +
-            "### 技能2: 房间方位计算\n" +
-            "- 计算每个房间的中心点坐标,并结合给定的方向规则(上北下南左西右东)确定其具体方位。\n" +
-            "- 朝向规则;北是0度和360度,东是90度,南是180度,西是270度。Y轴向上的默认度数是0,逆时针旋转,需要根据度数方位去计算朝向\n" +
-            "- 提供每个房间的名称、方位以及相邻房间的信息。\n" +
-            "- 如果有重复的房间,请使用序号进行区分。\n" +
-            "\n" +
-            "### 技能3: 家具归属判断\n" +
-            "- 按照输入数据中的类别字段进行分析统计,确保不涉及错误分类问题。\n" +
-            "- 房间类别是Tag_开头的,家具不是tag开头。\n" +
-            "- childrens就是包含的家具,统计即可。\n" +
-            " \n" +
-            "### 技能4: 数据解析与格式化输出\n" +
-            "- 输入数据为 JSON 格式的识别结果数据,集合里面每个对象是一个对象,对象里面有childrens,compass,floorname三个字段。\n" +
-            "- floorname是楼层名称,compass是朝向的角度\n" +
-            "- 解析输入的识别结果数据(childrens对象包含 bbox、name(即是房间名称也是家具名称) 和 category 字段),并按指定模板格式化输出。\n" +
-            "- 确保输出内容清晰易读,严格遵循示例模板格式。\n" +
-            "\n" +
-            "## 限制\n" +
-            "- 输入数据必须包含完整的 bbox 坐标、名称和类别信息。若缺少必要字段,则标注为“数据错误”。\n" +
-            "- 图片尺寸和方向规则需明确提供,否则无法准确计算方位。\n" +
-            "- 输出内容严格遵循示例模板格式,包括户型结构概述、房间描述和家具归属判断。\n" +
-            "- 不涉及对户型设计的主观评价或建议,仅限于客观数据分析。\n" +
-            "\n" +
-            "## 输出模板是案例\n" +
-            "楼层 :${floorname} ,这是一个 [X室X厅X卫] 的户型。\n" +
-            "${房间名称}: 位于户型图 ${方位(例如东侧,东南侧)},,放置了 ${家具数量} 个 ${家具名称} 家具。\n" +
-            " \n" +
-            "## 注意事项:\n" +
-            "- 如何数据为空,直接返回数据为空。\n" +
-            "- 家具名称需要取name展示输出\n" +
-            "- 客厅不算室的数量\n" +
-            "- 楼层也是取floorname的value展示。不用展示key\n" +
-            "- 完全按照模板输出,无需使用 Markdown(MD)格式。\n" +
-            "- 输出内容需严格按照技能要求和限制条件执行。\n" +
-            "- 不用输出注意事项,只需要按照模板输出即可。\n" +
-            "- 不用输出提供参数。\n" +
-            "- 一定是按照模版输出。";
+    private String freeSpaceUrl;
 }

+ 3 - 5
src/main/java/com/fdkankan/fusion/service/AiService.java

@@ -24,8 +24,6 @@ import java.util.Map;
 @DS("db1")
 public class AiService {
 
-    @Autowired
-    private SceneShapeEnumService sceneShapeEnumService;
 
     public void main() throws IOException {
         // 主方法保留,用于测试或其他用途
@@ -46,7 +44,7 @@ public class AiService {
         // 获取 SceneShapeEnum 列表并生成映射
         Map<String, String> nameToClassNameMap = new HashMap<>();
         Map<String, String> classNameToNameMap = new HashMap<>();
-        buildMaps(sceneShapeEnumService.list(), nameToClassNameMap, classNameToNameMap);
+        //buildMaps(sceneShapeEnumService.list(), nameToClassNameMap, classNameToNameMap);
         // 从 JSON 文件中获取 FloorUser 对象
         FloorUser cad = getFloorUserFromJson(path,nameToClassNameMap,classNameToNameMap);
 
@@ -87,7 +85,7 @@ public class AiService {
         if (jsonObject.containsKey("floors")) {
             JSONArray floors = jsonObject.getJSONArray("floors");
             List<Floors> floors1 = floors.toJavaList(Floors.class);
-            for (Floors floors2 : floors1) {
+            /*for (Floors floors2 : floors1) {
                 floors2.getShapes().forEach(shape -> {
                     if (shape.getCategory().contains("Tag")){
                         shape.setCategory(nameToClassNameMap.get(shape.getName().replaceAll("\\d+", "")));
@@ -95,7 +93,7 @@ public class AiService {
                         shape.setName(classNameToNameMap.get(shape.getCategory()));
                     }
                 });
-            }
+            }*/
 
             floorUser.setFloors(floors1);
         }