# UToDo **Repository Path**: SPGLP/WZUONLINE ## Basic Information - **Project Name**: UToDo - **Description**: UToDo 是一款跨平台校园应用,专为高等院校私有化部署、全校域使用而设计。 它将日程规划、社交互动、日常任务、激励机制等整合为统一体验。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-07 - **Last Updated**: 2026-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: dotNET, MAUI, Aspnet, OpenSilver, Visual-basic ## README > The English version is available at [README.en.md](README.en.md). # UToDo > 跨平台校园日程规划与社交融合平台。 UToDo 是一款跨平台校园应用,专为高等院校私有化部署、全校域使用而设计。 它将日程规划、社交互动、日常任务、激励机制等整合为统一体验。 ## 📗目录 - [概述](#概述) - [功能特性](#功能特性) - [截图](#截图) - [架构](#架构) - [技术栈](#技术栈) - [支持平台](#支持平台) - [部署运行](#部署运行) - [项目结构](#项目结构) - [贡献指南](#贡献指南) - [许可证](#许可证) - [关于本项目以及作者的一些额外说明](#关于本项目以及作者的一些额外说明) ## 📝概述 随着互联网和智慧校园的快速发展,大学生对智能化校园服务的需求也逐渐增加,如何利用现代技术构建高效而多功能的校园服务系统已经成为研究的重点方向。 而针对现有系统中存在的功能割裂、用户体验不足和激励机制贫弱等问题,UToDo 提出构建一套跨平台校园日程与社交融合系统。 UToDo 独创地提出了 **“日程表即社交协议”** ,试将日程规划与社交功能融合,通过比对好友间的日程信息,给出社交选项。 UToDO 还用了积分任务和积分商城来激励用户积极使用以达粘性的保持。 UTODO 围绕一条核心产品理念构建: > **课表即社交协议。** UTODO 不将日程安排与社交互动视为彼此割裂的独立功能体验,而是将它们进行有机整合,帮助学生与教职工规划日常生活、并通过日程比对发现意义的社交机会,并通过任务、成就与奖励系统保持持续参与。 ## ✨功能特性 - **日程规划** - 基于时间的每日日程管理 - 与好友的日程联动以及社交选项(共同空闲约同行、发现偶遇打招呼) - 课程表设置 - 基于 ML.NET 自训练模型的日程建议 - 时空地图功能一览自己与好友目前动向 - **社交管理** - 基于班级、宿舍的社交群组 - 基于标签的好友推荐 - 好友管理 - 通过好友日程显示好友位置与状态 - 实时聊天 - **每日任务、积分与成就** - 日常任务系统,完成任务赚取积分 - 积分商城提供通过积分兑换奖励 - 完成成就解锁成就徽章 ## 👤角色说明 - **学生** - 操作平台为学生客户端(StudentApp) - 可使用日程规划、社交管理、每日任务、积分与成就 - 每位学生最多只能对应一个班级和一个宿舍 - “宿舍长”身份的学生能够修改宿舍公告信息 - **教师** - 操作平台为教师客户端(TeacherApp) - 可使用日程规划、社交管理、每日任务、积分与成就 - 可以加入多个班级,并且编辑所入班级的公告信息 - 不能加入宿舍 - **系统管理员** - 操作平台为系统后台控制面板(AdminControl) - 可以设置业务中的所有支持修改的参数与数据,如:用户批量管理、用户日程设置、用户班级/宿舍设置、积分商城物品管理、每日任务设置等 - 清理系统过期数据,如:已经过期的日程、邀请等 ## 📌截图 - 日程规划页面 ![日程-PC](./docs/F1-1.png "日程规划电脑端") ![日程-AD-Light](./docs/F1-2.png "日程规划安卓明亮") ![日程-AD-Dark](./docs/F1-3.png "日程规划安卓黑暗") - 空闲约同行与相遇打招呼 ![约同行-PC](./docs/F2-1.png "约同行页面电脑端") ![打招呼-PC](./docs/F2-1.png "打招呼页面电脑端") - 社交页面(实时聊天) ![聊天-PC](./docs/F3-1.png "实时聊天电脑端") ![聊天-AD-Light](./docs/F3-2.png "实时聊天安卓明亮") ![聊天-AD-Dark](./docs/F3-3.png "实时聊天安卓黑暗") - 每日任务页面 ![任务-PC](./docs/F4-1.png "每日任务电脑端") ![任务-AD-Light](./docs/F4-2.png "每日任务安卓明亮") ![任务-AD-Dark](./docs/F4-3.png "每日任务安卓黑暗") ## 🧩架构 UToDo 由以下主要部分组成: - **StudentApp**:学生客户端应用 - **TeacherApp**:教师客户端应用 - **AdminControl**:基于 Web 的管理控制台 - **WebAPI**:后端服务端 / 命令行服务 系统的总体架构设计示意图: ![架构](./docs/Map-JG.png "总体架构设计示意图") ## 🧰技术栈 - **运行时**:.NET 9+ - **语言**:C#、VB - **前端/客户端框架**:.NET MAUI、OpenSilver - **后端框架**:ASP.NET Core - **机器学习**:ML.NET - **ORM**:SqlSugar - **数据库**:OpenGauss 5.0.4 - **数据库依赖操作系统**:OpenEuler 24.09 - **缓存**:Redis 7.0.15 ## 💻支持平台 UToDo 设计支持以下平台: - Windows 10/11 - Anroid 11 - iOS 15 - macOS 12 ## 🚀部署运行 **环境准备** - 按照技术栈清单,安装运行时和必要依赖、配置操作系统和数据库环境等 - 将 Init.sql 脚本导入到数据库中,初始化数据库 - 使用 git clone 项目仓库到本地 **WebAPI 配置** - 确保生产环境已安装 .NET 9 或更高版本的运行时,并确保其支持 ASP.NET Core - 修改 WebAPI 的配置文件: - 在 Config 目录以及对应类库中,修改 database.json 和 redis.json,将配置信息替换为您的实际环境配置 - (可选)修改 appsettings.json 文件中 JWT 的 Key 配置,为了保障安全,强烈建议您修改为自己的 Key - 运行 dotnet build 命令,编译项目 - 将编译后的可执行文件转移到生产环境 - 在生产环境中启动 WebAPI 服务,您可以通过 dotnet run 命令,或者使用服务器应用,详细请查阅相关文档 **StudentApp 和 TeacherApp 配置** - 确保已经安装 .NET MAUI 工作负载 - 修改 StudentApp 和 TeacherApp 的网络配置: - 在 Common 类库下,修改 GlobalConst 中的 ServerAddress 属性,填入服务器的实际协议(http/https)、公网地址、端口号等完整的URL信息 - 建议在 Visual Studio 中通过“发布”功能生成APP文件。或者也使用命令行工具进行打包,详细请查阅相关文档 - 将编译后的APP文件转移到客户端设备,并在对应操作系统中进行安装 **AdminControl 配置** - 确保已经安装 OpenSilver SDK - 修改 AdminControl 的网络配置: - 在 Common 类库下,修改 ClientCommon.vb 下的 InitializeHttpClient 方法中的 _httpClient.BaseAddress 属性,在其后填入 ``` New Uri({协议+公网地址+端口号}) ``` (此处存在设计缺陷,将在后续更新中通过GlobalConst 中的 ServerAddress 属性进行统一配置) - 建议在 Visual Studio 中通过“发布”功能生成 WebAssembly 文件。或者也使用命令行工具进行打包,详细请查阅相关文档 - 将编译后的文件转移到客户端设备并启动,您可以通过 dotnet run 命令,或者使用服务器应用,详细请查阅相关文档 > 因为从开发状态切换到发布状态进行了少部分不重要的改动,但由于时间问题以及作者手头上的测试环境发生了更改,因此没有能进行完整且系统的发布前测试,如果在部署过程中存在问题,烦请及时将错误信息及时反馈于作者,我将尽快修复这些问题,感谢您的理解和支持! > 部署过程中请重点关注 Init.sql 脚本、静态资源存取以及在 Android 上的运行效果,这些功能都是出现问题高频区域,如果遇到故障,请立即联系作者。 ## 🌲项目结构 - 项目名称为 WZUONLINE ,是一级命名空间。 - 根据角色用户,分别划分并开发学生客户端(StudentApp);教师客户端(TeacherApp);系统后台控制面板(AdminControl);服务器端(WebAPI),四个独立的开发部分为二级命名空间。 - 在客户端(StudentApp、TeacherApp)中,为了保证系统的模块解耦、层次解耦及符合.NET多语言混合开发模式的要求,先根据功能模块划分为客户端的项目结构为三级命名空间,再根据层次结构划分四级命名空间。 - 在系统后台控制面板(AdminControl)中,根据功能模块划分三级命名空间。因为不涉及多语言混合开发,且视图模型和模型层可能需要使用OpenSilver框架的特有功能,故不再进行命名空间和类库拆分,但各层次的类被装入不同的目录下,以便于开发工作。 结构树示意: ``` WZUONLINE ├── WZUONLINE.StudentApp │ ├── AppService // 应用层级的服务 │ ├── Converters // 数据转换器 │ ├── Sources // 类库项目集 │ | ├── WZUONLINE.StudentApp.XXX.View │ | ├── WZUONLINE.StudentApp.XXX.ViewModel │ | ├── WZUONLINE.StudentApp.XXX.Model │ | └── ... │ └── ... ├── WZUONLINE.TeacherApp │ ├── ... // 同 StudentApp ├── WZUONLINE.AdminControl │ ├── WZUONLINE.AdminControl | | ├── Sources // 类库项目集 │ | | ├── WZUONLINE.AdminControl.XXX │ | | └── ... │ | └── ... | ├── WZUONLINE.AdminControl.Simulator // OpenSilver 模拟器项目 │ └── WZUONLINE.AdminControl.Browser // OpenSilver WebAssembly 启动项目 | ├── WZUONLINE.WebAPI │ ├── AI // ML.NET 相关代码 │ ├── Config // 配置文件 │ ├── Controllers // 控制器 │ ├── Models // 模型 │ ├── Services // 服务 | ├── SignalRHubs // SignalR 相关代码 | ├── Utils // 工具类 | └── ... ├── README.md ├── LICENSE.txt ├── Init.sql ├── WZUONLINE.sln └── ... ``` ## 👋🏼贡献指南 我们十分欢迎并且感谢您的贡献!无论是修复 bug、添加新功能、改进文档,还是提供反馈和建议,您的参与都将帮助 UToDo 变得更好。 如果您希望参与贡献: 1. Fork 本仓库 2. 创建功能分支 3. 提交您的更改 4. 发起 Pull Request - 在代码风格上请尽量保持 Visual Studio 默认风格,比如 PascalCase 命名法、使用四个空格缩进等。 - 请尽量保证与现有架构的一致性,保持代码的解耦和层次结构清晰。 - 如果您想添加新功能或者更改现有架构,建议先在 Issues 中提出您的想法,以便我们讨论并达成共识。 ## 🎖️许可证 本项目基于 **Apache License 2.0** 许可证发布。 详见 [LICENSE](LICENSE) 文件。 ## 关于本项目以及作者的一些额外说明 在该项目迎来第一个公开发版,并且从项目代号(WZUONLINE)到正式名称(UToDo)的过程完毕后,本作者的大学时代也至此宣告圆满结束。 是的,该项目是我的软件工程专业本科毕业设计,从立项、分析、设计、实现、撰写论文、完成所有答辩,前后经历了将近一年时间。 我为了完成这个项目,花费了整个暑假,在学校也挑灯夜战。或许当下的你们也会有着和我舍友一样的疑惑,为什么不用AI生成呢?“Cursor无限续杯”或者“Claude Code”充个几十一百块的Token,大概率可以在一两个星期就弄出来,甚至弄得更好…… 是啊,为什么呢?我无言以对,但心中总有一个炙热的感觉,一个我从小开始自学编程以来,坚持到现在的炽热的信念。 最终该项目顺利通过了一辩,之后我收到了学校发来的进入评优答辩的通知,2026年春节过后,我返校参加评优答辩,最终获评“优秀”。 该项目也是我大学以来一直在推进的一个个人计划“.NET 大战 Spring”的收官之作,很感激,没有翻车,在最后一刻该项目从一大片 Spring + Vue 的项目中脱颖而出。 现在,我将该项目正式开源开放,希望我的拙略之作能够为开源世界增添一份我的色彩,也希望能够得到各位的指导与建议,推进该项目的发展,以及提升我个人的软件能力。感谢大家! 另:虽然本项目开源,但并不意味着我支持任何人用我的成果进行作业提交或者抄袭作为毕业设计。抄袭行为损人不利己,如果出了问题对你对我都不好。当然,如果你执意要做,我也没办法顺着网线阻止你,只能特此声明,行为后果自负,建议各位务必遵守学术诚信原则,尊重他人的劳动成果。感谢!