From 36035d820b2a630544120ab57f04f93802e26687 Mon Sep 17 00:00:00 2001 From: ZLI263 Date: Sat, 22 Nov 2025 11:22:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=B6=E5=B1=85=E5=A4=A7=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E8=81=94=E8=B0=83=EF=BC=8C=E4=BC=98=E5=8C=96=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=20=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=AF=B9=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E5=AE=A2=E6=88=B7=E7=9A=84=E9=9C=80=E6=B1=82=EF=BC=8C?= =?UTF-8?q?10=E7=BB=B4=E5=BA=A6=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AudioTextAnalysisFurnitureController.java | 251 +++++++++++++++--- .../sql/audio_text_analysis_furniture.sql | 32 +-- 2 files changed, 236 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/rj/controller/AudioTextAnalysisFurnitureController.java b/src/main/java/com/rj/controller/AudioTextAnalysisFurnitureController.java index 9c2c2d0..999f132 100644 --- a/src/main/java/com/rj/controller/AudioTextAnalysisFurnitureController.java +++ b/src/main/java/com/rj/controller/AudioTextAnalysisFurnitureController.java @@ -306,48 +306,211 @@ public class AudioTextAnalysisFurnitureController { } private String buildPrompt(String recordingText) { - return "请阅读以下录音文本,从中提取客户信息并生成 JSON。必须覆盖所有字段,缺失信息请基于语境合理推断或标注\"暂无信息\"。字段要求:\n" - + "1. customer_type:仅可填「新房装修」「二次翻修」「补充家居」。\n" - + "2. family_structure:描述家庭成员数量、孩子、老人情况。\n" - + "3. intention_products:仅列家居类产品(床、柜子、沙发等),用顿号或逗号分隔。\n" - + "4. summary:一句话概括客户需求,务必提到预算(若未提及则写“预算约3万元”),并涵盖客户类型、偏好风格、关键产品。\n" - + "5. decoration_style:概括偏好的装修/家居风格,并推测主人特征。\n" - + "6. sofa:沙发需求/配置,含大小、风格、数量等。\n" - + "7. tea_table:茶几/茶桌的需求、材质、风格。\n" - + "8. dining_table:餐桌椅需求或配置。\n" - + "9. study_desk:学习桌/书桌需求。\n" - + "10. tv_cabinet:电视柜需求。\n" - + "11. cabinet:橱柜或厨房柜体说明。\n" - + "12. wine_cabinet:酒柜需求说明。\n" - + "13. master_bedroom_cabinet:主卧衣柜/储物柜配置。\n" - + "14. secondary_bedroom_cabinet:次卧衣柜/储物柜配置。\n" - + "15. shoe_cabinet:鞋柜需求或配置。\n" - + "16. bed_and_mattress:床及床垫配置。\n" - + "严格输出 JSON,如:" - + "{\"customer_type\":\"二次翻修\",\"family_structure\":\"三口之家,1个小男孩\",\"intention_products\":\"床、沙发、酒柜、厨房柜子\",\"summary\":\"客户为二次翻修,预算约3万元,偏好原木风,重点关注沙发与酒柜\",\"decoration_style\":\"原木+现代混搭,女主人喜欢收纳\",\"sofa\":\"需要L型布艺沙发,要求可拆洗\",\"tea_table\":\"原木茶几,低矮\",\"dining_table\":\"六人餐桌配软包椅\",\"study_desk\":\"需要儿童学习桌\",\"tv_cabinet\":\"整体墙面收纳\",\"cabinet\":\"定制U型橱柜\",\"wine_cabinet\":\"嵌入式酒柜\",\"master_bedroom_cabinet\":\"到顶推拉门衣柜\",\"secondary_bedroom_cabinet\":\"次卧需要开放格\",\"shoe_cabinet\":\"玄关到顶鞋柜含换鞋凳\",\"bed_and_mattress\":\"1.8米大床+护脊床垫\"}\n" - + "不要添加任何额外文字。\n\n录音文本:\n" + recordingText; + StringBuilder prompt = new StringBuilder(); + prompt.append("请阅读以下录音文本,从中提取客户信息并生成 JSON。必须覆盖所有字段,缺失信息请基于语境合理推断或标注\"暂无信息\"。\n\n"); + prompt.append("字段要求:\n"); + prompt.append("1. customer_type:客户类型,仅可填「新房装修」「二次翻修」「补充家居」。\n"); + prompt.append("2. family_structure:家庭结构,描述家庭几口人、几个孩子、几个老人,重点反应家庭成员。\n"); + prompt.append("3. intention_products:意向产品清单,比如:床、柜子、沙发等,仅限家居,不能扩展到其它产品,用顿号或逗号分隔。\n"); + prompt.append("4. summary:一句话总结,应该简洁明了地概括客户的需求和关键信息,重点关注客户预算(如果未提及,默认预算3万),关注的还有产品信息等关键信息。\n"); + prompt.append("5. decoration_style:装修风格,总结偏好的装修/家居风格,风格类型,并推测主人相关信息。\n"); + prompt.append("6. sofa:沙发需求或配置说明,大小、风格、数量、种类等相关信息。\n"); + prompt.append("7. tea_table:茶几/茶桌需求或配置,材质、风格。\n"); + prompt.append("8. dining_table:餐桌椅需求或配置。\n"); + prompt.append("9. study_desk:学习桌/书桌需求。\n"); + prompt.append("10. tv_cabinet:电视柜需求说明。\n"); + prompt.append("11. cabinet:橱柜或厨房柜体说明。\n"); + prompt.append("12. wine_cabinet:酒柜需求说明。\n"); + prompt.append("13. master_bedroom_cabinet:主卧衣柜/储物柜配置。\n"); + prompt.append("14. secondary_bedroom_cabinet:次卧衣柜/储物柜配置。\n"); + prompt.append("15. shoe_cabinet:鞋柜需求或配置。\n"); + prompt.append("16. bed_and_mattress:床及床垫配置。\n\n"); + + prompt.append("重要:每个产品维度(sofa、tea_table、dining_table、study_desk、tv_cabinet、cabinet、wine_cabinet、master_bedroom_cabinet、secondary_bedroom_cabinet、shoe_cabinet、bed_and_mattress)必须是一个JSON对象,包含以下10个维度:\n"); + prompt.append("1. preferenceStyleAndColor:偏好风格与颜色\n"); + prompt.append("2. materialPreference:材质偏好\n"); + prompt.append("3. customerFocusAreas:客户重点关注\n"); + prompt.append("4. priceSensitivity:价格敏感度\n"); + prompt.append("5. activityParticipation:活动参与度\n"); + prompt.append("6. customerConcerns:客户疑虑点\n"); + prompt.append("7. deliveryService:交付服务\n"); + prompt.append("8. competitorFeedback:竞品反馈\n"); + prompt.append("9. deliveryCycle:交付周期\n"); + prompt.append("10. productAppearance:产品颜值\n\n"); + + prompt.append("严格输出 JSON 格式,示例:\n"); + prompt.append("{\n"); + prompt.append(" \"customer_type\": \"二次翻修\",\n"); + prompt.append(" \"family_structure\": \"三口之家,一个小男孩\",\n"); + prompt.append(" \"intention_products\": \"床、沙发、酒柜、厨房柜子\",\n"); + prompt.append(" \"summary\": \"客户是二次翻修,对价格比较敏感,预算在10万以内\",\n"); + prompt.append(" \"decoration_style\": \"总结偏好的装修/家居风格,风格类型,并推测主人相关信息\",\n"); + prompt.append(" \"sofa\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"tea_table\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"dining_table\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"study_desk\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"tv_cabinet\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"cabinet\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"wine_cabinet\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"master_bedroom_cabinet\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"secondary_bedroom_cabinet\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"shoe_cabinet\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" },\n"); + prompt.append(" \"bed_and_mattress\": {\n"); + prompt.append(" \"preferenceStyleAndColor\": \"偏好风格与颜色\",\n"); + prompt.append(" \"materialPreference\": \"材质偏好\",\n"); + prompt.append(" \"customerFocusAreas\": \"客户重点关注\",\n"); + prompt.append(" \"priceSensitivity\": \"价格敏感度\",\n"); + prompt.append(" \"activityParticipation\": \"活动参与度\",\n"); + prompt.append(" \"customerConcerns\": \"客户疑虑点\",\n"); + prompt.append(" \"deliveryService\": \"交付服务\",\n"); + prompt.append(" \"competitorFeedback\": \"竞品反馈\",\n"); + prompt.append(" \"deliveryCycle\": \"交付周期\",\n"); + prompt.append(" \"productAppearance\": \"产品颜值\"\n"); + prompt.append(" }\n"); + prompt.append("}\n\n"); + prompt.append("注意:\n"); + prompt.append("1. 必须严格按照JSON格式输出,不要添加任何额外文字或markdown代码块标记。\n"); + prompt.append("2. 每个产品维度必须是一个完整的JSON对象,包含上述10个维度。\n"); + prompt.append("3. 如果录音文本中未提及某个产品,该产品的JSON对象中所有维度应填写\"暂无信息\"或基于语境合理推断。\n"); + prompt.append("4. 所有字段值必须基于录音文本内容,合理推断,不能随意编造。\n\n"); + prompt.append("录音文本:\n").append(recordingText); + + return prompt.toString(); } private void applyStructuredResult(AudioTextAnalysisFurniture furniture, String rawContent) { String normalized = normalizeJson(rawContent); try { JsonNode root = objectMapper.readTree(normalized); + // 基础字段 furniture.setCustomerType(textValue(root, "customer_type")); furniture.setFamilyStructure(textValue(root, "family_structure")); furniture.setIntentionProducts(textValue(root, "intention_products")); furniture.setSummarySentence(textValue(root, "summary")); furniture.setDecorationStyle(textValue(root, "decoration_style")); - furniture.setSofa(textValue(root, "sofa")); - furniture.setTeaTable(textValue(root, "tea_table")); - furniture.setDiningTable(textValue(root, "dining_table")); - furniture.setStudyDesk(textValue(root, "study_desk")); - furniture.setTvCabinet(textValue(root, "tv_cabinet")); - furniture.setCabinet(textValue(root, "cabinet")); - furniture.setWineCabinet(textValue(root, "wine_cabinet")); - furniture.setMasterBedroomCabinet(textValue(root, "master_bedroom_cabinet")); - furniture.setSecondaryBedroomCabinet(textValue(root, "secondary_bedroom_cabinet")); - furniture.setShoeCabinet(textValue(root, "shoe_cabinet")); - furniture.setBedAndMattress(textValue(root, "bed_and_mattress")); + + // 产品维度字段,每个都是JSON对象,需要转换为JSON字符串 + furniture.setSofa(jsonObjectToString(root, "sofa")); + furniture.setTeaTable(jsonObjectToString(root, "tea_table")); + furniture.setDiningTable(jsonObjectToString(root, "dining_table")); + furniture.setStudyDesk(jsonObjectToString(root, "study_desk")); + furniture.setTvCabinet(jsonObjectToString(root, "tv_cabinet")); + furniture.setCabinet(jsonObjectToString(root, "cabinet")); + furniture.setWineCabinet(jsonObjectToString(root, "wine_cabinet")); + furniture.setMasterBedroomCabinet(jsonObjectToString(root, "master_bedroom_cabinet")); + furniture.setSecondaryBedroomCabinet(jsonObjectToString(root, "secondary_bedroom_cabinet")); + furniture.setShoeCabinet(jsonObjectToString(root, "shoe_cabinet")); + furniture.setBedAndMattress(jsonObjectToString(root, "bed_and_mattress")); } catch (JsonProcessingException e) { log.warn("解析大模型返回JSON失败,使用原始内容作为总结: {}", e.getMessage()); furniture.setSummarySentence(rawContent); @@ -370,5 +533,31 @@ public class AudioTextAnalysisFurnitureController { JsonNode node = root.get(field); return node == null || node.isNull() ? null : node.asText(); } + + /** + * 将JSON对象节点转换为JSON字符串 + * 如果节点是对象,则转换为格式化的JSON字符串;如果是文本,直接返回;如果不存在或为null,返回null + */ + private String jsonObjectToString(JsonNode root, String field) { + JsonNode node = root.get(field); + if (node == null || node.isNull()) { + return null; + } + try { + if (node.isObject()) { + // 如果是JSON对象,转换为紧凑的JSON字符串 + return objectMapper.writeValueAsString(node); + } else if (node.isTextual()) { + // 如果是文本,直接返回 + return node.asText(); + } else { + // 其他类型也转换为字符串 + return objectMapper.writeValueAsString(node); + } + } catch (JsonProcessingException e) { + log.warn("转换JSON对象失败,字段: {}, 错误: {}", field, e.getMessage()); + return node.isTextual() ? node.asText() : node.toString(); + } + } } diff --git a/src/main/sql/audio_text_analysis_furniture.sql b/src/main/sql/audio_text_analysis_furniture.sql index 3a382f4..9aeacdb 100644 --- a/src/main/sql/audio_text_analysis_furniture.sql +++ b/src/main/sql/audio_text_analysis_furniture.sql @@ -1,22 +1,22 @@ CREATE TABLE audio_text_analysis_furniture ( id CHAR(36) NOT NULL COMMENT '记录唯一标识,存放UUID字符', parent_id CHAR(36) NULL COMMENT '对应的音频管理或父级记录ID,便于树状关联', - customer_type VARCHAR(50) NULL COMMENT '客户类型(如个人、企业、设计师等)', - family_structure VARCHAR(100) NULL COMMENT '家庭结构描述(如二人家庭、四口之家)', - intention_products TEXT NULL COMMENT '意向产品清单,可存放多件物品的信息', - decoration_style VARCHAR(100) NULL COMMENT '偏好的装修/家居风格', - summary_sentence VARCHAR(255) NULL COMMENT '一句话总结客户需求或关键信息', - sofa VARCHAR(255) NULL COMMENT '沙发需求或配置说明', - tea_table VARCHAR(255) NULL COMMENT '茶几/茶桌需求或配置', - dining_table VARCHAR(255) NULL COMMENT '餐桌椅需求或配置', - study_desk VARCHAR(255) NULL COMMENT '学习桌/书桌需求', - tv_cabinet VARCHAR(255) NULL COMMENT '电视柜需求说明', - cabinet VARCHAR(255) NULL COMMENT '橱柜或厨房柜体说明', - wine_cabinet VARCHAR(255) NULL COMMENT '酒柜需求说明', - master_bedroom_cabinet VARCHAR(255) NULL COMMENT '主卧衣柜/储物柜配置', - secondary_bedroom_cabinet VARCHAR(255) NULL COMMENT '次卧衣柜/储物柜配置', - shoe_cabinet VARCHAR(255) NULL COMMENT '鞋柜需求或配置', - bed_and_mattress VARCHAR(255) NULL COMMENT '床及床垫配置', + customer_type VARCHAR(50) NULL COMMENT '客户类型:新房装修、二次翻修、补充家居', + family_structure VARCHAR(200) NULL COMMENT '家庭结构描述,家庭几口人、几个孩子、几个老人,重点反应家庭成员', + intention_products TEXT NULL COMMENT '意向产品清单,仅限家居产品(床、柜子、沙发等),用顿号或逗号分隔', + decoration_style VARCHAR(200) NULL COMMENT '偏好的装修/家居风格,风格类型,并推测主人相关信息', + summary_sentence VARCHAR(500) NULL COMMENT '一句话总结客户需求或关键信息,重点关注预算和产品信息', + sofa TEXT NULL COMMENT '沙发需求或配置说明,JSON格式,包含10个维度分析', + tea_table TEXT NULL COMMENT '茶几/茶桌需求或配置,JSON格式,包含10个维度分析', + dining_table TEXT NULL COMMENT '餐桌椅需求或配置,JSON格式,包含10个维度分析', + study_desk TEXT NULL COMMENT '学习桌/书桌需求,JSON格式,包含10个维度分析', + tv_cabinet TEXT NULL COMMENT '电视柜需求说明,JSON格式,包含10个维度分析', + cabinet TEXT NULL COMMENT '橱柜或厨房柜体说明,JSON格式,包含10个维度分析', + wine_cabinet TEXT NULL COMMENT '酒柜需求说明,JSON格式,包含10个维度分析', + master_bedroom_cabinet TEXT NULL COMMENT '主卧衣柜/储物柜配置,JSON格式,包含10个维度分析', + secondary_bedroom_cabinet TEXT NULL COMMENT '次卧衣柜/储物柜配置,JSON格式,包含10个维度分析', + shoe_cabinet TEXT NULL COMMENT '鞋柜需求或配置,JSON格式,包含10个维度分析', + bed_and_mattress TEXT NULL COMMENT '床及床垫配置,JSON格式,包含10个维度分析', owner_phone VARCHAR(30) NULL COMMENT '所属人或负责人的联系方式', owner_id CHAR(36) NULL COMMENT '所属人或负责人的唯一标识', customer_phone VARCHAR(30) NULL COMMENT '客户的联系方式',