XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

EARSystem

【ASP】耳间,网页端的情绪智能推荐系统

公开
关注 0 Fork 0 Star 0
UTF-8

EARSystem · 耳间

ASP.NET Core 10 MVC + Razor 实现的情绪记录与附近生活推荐网站。记录心情、精力、压力与想法,系统根据近期状态和六维氛围匹配地点;收藏、到访体验、情绪日历与周报构成完整闭环。

快速运行

需要 Windows、.NET SDK 10.0.401 或同系列兼容 SDK、SQL Server LocalDB。项目自带 Bootstrap 和 Chart.js,无外网时演示功能仍可使用。首次 NuGet 还原需要网络。

在解决方案目录执行:

dotnet restore EARSystem.sln
dotnet tool restore
dotnet run --project src/EARSystem.Web --launch-profile http

打开 http://localhost:5188,进入登录页,点击 体验演示账号。也可以注册自己的账号,体验没有历史记录时的推荐。

Development 环境首次启动自动迁移 LocalDB 数据库,并生成 60 个虚构地点、6 类场景、20 个示例账号和覆盖最近 90 天的合成记录。部分日期刻意留空。系统另有一个演示管理员,不计入 20 个示例用户。

演示账号与地点都有来源标识。初始化完成后不会重复填充,修改或删除示例记录后重启也会保持结果。需要一套全新样本时,请通过配置选择新的开发数据库名称;初始化工具不会清空已有数据库。

$env:ASPNETCORE_ENVIRONMENT = 'Development'
dotnet run --project src/EARSystem.Web --no-launch-profile -- --seed-demo

该命令初始化并退出,重复执行安全;Production 环境拒绝此命令。随机生成的账号密码仅写入本地忽略文件:

src/EARSystem.Web/App_Data/demo-credentials.txt

管理员邮箱为 admin@ear.local,密码从该文件读取;通过普通登录页登录后访问 /Admin。文件不在静态资源目录,不能通过网站下载。

HTTPS 开发配置:

dotnet run --project src/EARSystem.Web --launch-profile https

地址为 https://localhost:7188。开发证书需要在本机受信任;如尚未配置,请自行运行 dotnet dev-certs https --trust。当前本地预览使用 HTTP localhost,跨设备部署使用可信 HTTPS。

功能

入口 已实现
今日 状态摘要、近七天曲线、快速记录、最近片段
情绪日记 一天多次记录、补记、编辑与删除、文字标签确认、并发冲突提示
附近推荐 自动/手动目标、类别/预算/营业/距离筛选、列表与地图、来源与分项解释
地点详情 独立目录详情、六维氛围、收藏、真实地点路线入口
我的体验 满意度、前后心情、六维评价、私密感受、可选匿名评分及同步日记
情绪回顾 7/30 天趋势、最近 30 天日历、按周统计
想去清单 想去/去过筛选与取消收藏
个人设置 喜欢与屏蔽类别、屏蔽地点、默认预算和距离
管理后台 独立样本维护、权重版本与并发校验、数量和运行耗时;不展示日记正文

首页自评保存后重新加载服务端摘要,补记不会错误覆盖当前状态。趋势和日历使用北京时间当天最后一次自评;无记录日期留空。

高德地图配置

未配置密钥时,可直接运行演示模式与本地点分布示意图。真实查询需配置三个独立项:

dotnet user-secrets set 'AMap:WebServiceKey' '<Web 服务 API Key>' --project src/EARSystem.Web
dotnet user-secrets set 'AMap:BrowserKey' '<JS API Key>' --project src/EARSystem.Web
dotnet user-secrets set 'AMap:JsSecurityCode' '<JS API 安全密钥>' --project src/EARSystem.Web

Web 服务密钥和安全密钥只留在服务器;浏览器 Key 用于加载 JS API。安全代理使用官方要求的 /_AMapService 前缀,限定可转发的路径和上游域名。请在高德控制台配置适当的域名与密钥权限。接入依据见 高德安全密钥文档。

保存配置后重启应用,再切换在线模式。

切换“真实附近地点”后请求定位。定位失败可以展开位置面板,搜索地址、输入坐标或点击地图选点。WGS84 转换一次为 GCJ-02;默认 3 公里,可选 1/3/5/10 公里。外部查询共享 8 秒超时,失败时显示明确提示和演示模式入口。

供应商返回的评分、价格和营业信息可能缺失,页面显示“未知”。当前在线营业状态采取保守的未知值,因此“仅营业中”会排除这些实时地点。评分与氛围分开处理;商家评分不会转换为六维氛围。字段依据见 高德地点查询文档。

实时第三方地点支持浏览和路线查询,默认不复制到业务库,也不提供直接持久化收藏。长期收藏、体验与氛围贡献使用管理员维护的独立地点目录。演示数据和独立真实采集数据分开存储。

项目结构

EARSystem.sln
src/
  EARSystem.Web/             MVC、Razor、Identity 登录与同源 JSON API
  EARSystem.Core/            领域实体、时间口径、情绪画像、目标规则与六项评分
  EARSystem.Infrastructure/  EF Core、SQL Server、地图接入、聚合反馈与演示生成
tests/EARSystem.Tests/       xUnit、隔离数据库集成测试、HTTP 模拟与算法评估
tools/benchmark.mjs          20 个示例账号的本地并发基准
docs/                       配置、部署、架构/ER/业务流程、算法与验收材料

关键接口为 IEmotionProfileService、IRecommendationService、IPlaceProvider 与 IExperienceService。主算法位于 src/EARSystem.Core/Recommendation.cs。

验证

dotnet test EARSystem.sln -c Release --logger 'trx;LogFileName=release-tests.trx'
dotnet ef migrations has-pending-model-changes --project src/EARSystem.Infrastructure --startup-project src/EARSystem.Web

集成测试使用内存 SQLite,与开发 LocalDB 隔离。推荐基准使用运行中的开发服务器和合成账号,需要 Node.js 20 或更新版本:

node tools/benchmark.mjs http://localhost:5188

脚本限制目标为 localhost/127.0.0.1,不打印密码;20 人同时请求、预热后测 5 轮共 100 次。结果写入 artifacts/benchmark.json。算法对比测试输出 artifacts/evaluation.json:

dotnet test tests/EARSystem.Tests -c Release --filter 'Category=Evaluation'

合成偏好评估仅用于说明排序行为。真实用户试用的相关性与满意度需要单独采集和报告。

交付资料

天气、呼吸计时、记账、语音日记、大模型摘要、社区、支付和推广保持为后续扩展项。首版没有离线编辑队列;账号跨设备同步通过服务器数据库,重新加载页面即可读取最新内容。