feat: 小程序脚本首页重构 + 社交数据导入 + TTS 播放优化

- 后端:新增社交数据导入/审批/洞察生成 API(SocialContent/SocialInsight)
- 后端:优化脚本上下文服务,TTS 服务增强
- 小程序:重构脚本首页布局,新增社交导入页面
- 小程序:新增 useTtsPlayer composable,移除旧 ScriptAudioPlayer 组件
- 小程序:新增社交导入服务,优化请求服务
- SQL:新增社交数据导入建表脚本
- 文档:补充设计文档和实施计划

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-20 07:18:02 +08:00
parent 83cc32999b
commit ee5a6aba5d
50 changed files with 5723 additions and 1246 deletions
@@ -0,0 +1,66 @@
package com.emotion.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.emotion.common.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
* Social content voluntarily imported by a user.
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "t_social_content_item", autoResultMap = true)
public class SocialContentItem extends BaseEntity {
@TableField("user_id")
private String userId;
@TableField("platform")
private String platform;
@TableField("source_type")
private String sourceType;
@TableField("source_url")
private String sourceUrl;
@TableField("title")
private String title;
@TableField("content")
private String content;
@TableField(value = "image_urls", typeHandler = JacksonTypeHandler.class)
private List<String> imageUrls;
@TableField("published_at")
private LocalDateTime publishedAt;
@TableField("import_status")
private String importStatus;
@TableField("approved_for_ai")
private Integer approvedForAi;
@TableField("content_hash")
private String contentHash;
@TableField(value = "raw_metadata", typeHandler = JacksonTypeHandler.class)
private Map<String, Object> rawMetadata;
@TableField("deleted_at")
private LocalDateTime deletedAt;
}
@@ -0,0 +1,58 @@
package com.emotion.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.emotion.common.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* User-reviewable insight extracted from imported social content.
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_social_profile_insight")
public class SocialProfileInsight extends BaseEntity {
@TableField("user_id")
private String userId;
@TableField("source_item_id")
private String sourceItemId;
@TableField("insight_type")
private String insightType;
@TableField("label")
private String label;
@TableField("summary")
private String summary;
@TableField("evidence_excerpt")
private String evidenceExcerpt;
@TableField("confidence")
private BigDecimal confidence;
@TableField("status")
private String status;
@TableField("user_edited")
private Integer userEdited;
@TableField("confirmed_at")
private LocalDateTime confirmedAt;
@TableField("deleted_at")
private LocalDateTime deletedAt;
}
@@ -0,0 +1,59 @@
package com.emotion.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.emotion.common.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.time.LocalDateTime;
import java.util.Map;
/**
* Consent and revocation audit record for user data usage.
*/
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "t_user_consent_log", autoResultMap = true)
public class UserConsentLog extends BaseEntity {
@TableField("user_id")
private String userId;
@TableField("platform")
private String platform;
@TableField("consent_type")
private String consentType;
@TableField("consent_version")
private String consentVersion;
@TableField("scope")
private String scope;
@TableField("purpose")
private String purpose;
@TableField("status")
private String status;
@TableField("granted_at")
private LocalDateTime grantedAt;
@TableField("revoked_at")
private LocalDateTime revokedAt;
@TableField("client_ip")
private String clientIp;
@TableField(value = "device_info", typeHandler = JacksonTypeHandler.class)
private Map<String, Object> deviceInfo;
}