加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

社交时间管理系统

简介

要说起这个项目,其实已经想了很久了,很早之前就做了第一版的社交管理系统v1.0,也使用了好些年了,但其中一些东西总是让我使用不够满意,然后今年就动手开始了第二版的编写。也就是现在的这个版本。

前端:https://gitee.com/sprouting/personal-system-web

后端:https://gitee.com/sprouting/personal-system-server

由来

为什么写这个系统,做第一版的时候其实就解决2个问题,一是记账,第二是生日提醒。

不知道大家有没这些痛点:

  • 有些亲戚一年到头就见过一次,长啥样估计都不知道,然后过年回家还要称呼他
  • 梳理整个家族的人际关系,只有东西出来后,你才知道,原来你们这个家族是这么庞大,一些亲戚原来是这个关系
  • 待办事件提醒,比如身份证快到期了,某个人要生日了,还有按照周期性的提醒
  • 家庭成员的账单,到底支出都到哪去了,哪一块的支出最大,各项资金的占比,收入比,累计支出,年度预算是否超标,当月账单,每个月用的最多的钱用在哪里
  • 孩子的作业,周期性的作业,每隔几天要做一次的作业
  • 家族的墓地,因为我们是南方农村地区,墓地零零散散的,每年清明扫墓要走好些个地方,估计小年轻都不知道要去哪些地方扫墓了,这也算是家族管理中的数据吧
  • 卡证管理,哪些卡要过期了,密码是多少,要提前进行换卡提醒等等
  • 年度目标、月度目标管理
  • 自己看的一些书籍、游戏、影视作品等,我到底看了多少,然后看完之后的观感,这也算是自己的小需求,我喜欢将看过的书和电影等记录一下,并记录下当时的评价,现在回头看的时候,没想到看了这么多的东西
  • 记录打卡,一直坚持某件事进行的打卡记录
  • 密码管理、复杂密码生成,特别是对于程序员来说,密码真的太多了,我自己算了下,密码差不多100来个各种密码,然后还要设置不同的密码,没这东西真记不住,而且一般的密码软件真不够用,密码可能有多个,还有注册的手机、邮箱等等都要记录下来
  • 生日提醒,以前老是忘记,但有了这个东西后基本不会忘记了,还可以设置多久提醒,另外,中国的生日很多都是阴历来计算的,市面上的生日软件很多考虑不足
  • 孩子成长记录、照片。
  • 月经记录器
  • 一些小工具,比如有时候想用手机看下电脑上的小电影,主流的做法都是开启共享,或者要安装2个软件,而我的电脑开启共享也有问题,安装软件也不想安装,最麻烦的是,我开启了共享,如果忘记关闭了,在公司被人远程查看了,就非常社死了。所以也集成了这类小工具

后面可能会实现的

还有一些比较有意思的想法,想在后面加入进来,现阶段可能不会去做

  • 声音保存,将一些人的声音保存下来,比如我过世的外婆,还想再听下她的声音。(暂时不会集成进来,个人拥有的照片里面有很多的视频,暂时可以满足需要)
  • 导入指定文件下的书籍和音乐、视频,视频和音乐有一点问题,无法获取到太多有效数据,做出来的意义不大,书籍的获取同样,没有点评的书籍录入是没有任何价值的
  • 家庭教育(现阶段都可以实现,暂时没有动力进行)
    • 孩子的课程表
    • 每天要做的作业提醒
      • 音标
      • 百词斩单词
      • 字帖
    • 下发作业给孩子
    • 要解决的坏毛病,制定计划,怎么改,解决的步骤,解决的进度,解决的方案
    • 建立奖惩激励记录,加减分
    • 本学期的目标和月度目标、年度目标
    • 加分减分表,这个还没想好,初步设想,洗碗加1分,搞卫生加1分,丢东西根据价值减分,达到多少分可以进行兑换
    • 时间表
    • 每天要做的作业,周期性作业
    • 同学,朋友,
    • 计划的任务
  • 充值管理和提醒
  • 投资持仓,持仓时间,买入时间,初始资金和收益等
  • 借贷提醒
  • 标记废弃密码,增加密码重要性

未解决的问题

前端过期的时候,一个页面多个请求,会导致大量重复的提示,暂无解决方案。

技术栈

技术或工具 版本 备注
jdk 1.8 +
springBoot 2.3.7.RELEASE
sa-token 1.28.0 发展期,还在快速迭代,可以酌情使用最新版本以及最新特性 http://sa-token.dev33.cn/
日志 logback springboot内置版本,使用 sfl4j做日志记录
连接池 durid 1.2.6
json处理 hutool自带,hutool版本 5.6.5,如无法满足,则使用springboot官方默认 jackson
hutool 工具库 5.7.16 https://www.hutool.cn/
对象克隆 springBoot内置,与springboot版本相同 或 使用 hutool BeanUtils.copyProperties
mybatis-plus 3.4.2 https://mp.baomidou.com/
分页 mybatis-plus内置
mybatis mybatis-plus内置版本
JSR-303数据校验 springboot内置版本
liquibase 4.5.0 数据库版本、构建工具
翻译 有使用到百度翻译、有道、彩云小译,但最终考虑到翻译的效果,使用了百度的API
vue-pdf pdf预览

界面

image-20230209232640219

1

image-20230210014508442

image-20230210014528865

image-20230210014555620

image-20230210014613265

image-20230210014641986

image-20230210014721385

image-20230210014742810

image-20230210014811619

image-20230210015011081

2

image-20230210015159313

image-20230210015215707

image-20230210015235078

image-20230210015252813

image-20230210015308528

image-20230210015334033

image-20230210015430416

支持局域网手机看电影

image-20230212020707785

update 2023年9月24日16:07:01 新升级

支持作业

image-20230212020707785

支持更高自由度的组合查询

image-20230924160856933

自定义签到任务

image-20230924160932183

统计分析

image-20230924160952741

快速开始

配置文件

开发

开发的话直接查看 application.properties 配置文件即可,基本所有的配置都在这里了。

需要额外注意的几个类,AuthenticationInterceptor 这里面配置了权限拦截器和资源映射拦截,如无必要,不建议去修改这里的配置,会导致访问异常。

生产

生产环境只需要关注配置文件即可。 application.properties 中建议只处理修改区。

image-20230211200710957

而且项目启动的时候也必须进行这一块的数据修改。注意,前端的地址不要带中文。

需要注意,前端的地址路径,上面的路径哪些带 / 哪些不带。前端最终的地址是这样的。

image-20230211200738491

image-20230211011918085

访问地址:http://127.0.0.1:8084/index.html

打包的时候注意,我使用的是jdk1.8,建议直接使用发行版,会将配置文件放在外面,另外加启动脚本。需要做的是直接打开配置文件,编辑修改数据库位置以及指定前端位置。

打包(重要)

项目下载运行后,直接使用idea 的打包按钮操作

image-20230212002112051

打包成功后,如下路径找到jar

image-20230212002230635

然后将项目合并到一起,如下:

image-20230212192321141

dist中就是前端打包后的包,jre保证在没有安装jdk的环境也可以运行, application.properties 就是配置文件,jar包就不用说了,我们的应用主体,启动的话要使用这个 startup.bat 文件启动,否则不一定会使用外部的配置文件。外部的配置文件是直接从项目拷贝过来的,没有在maven配置了,感觉也没必要

接着修改配置文件

image-20230212011505740

注意,上面使用的是 / 而不是win直接复制过来的\,否则会有问题,还有没有必要的 / 不要在目录后面乱加。另外,建议使用绝对路径,相对路径很可能引发bug。

运行 startup.bat 后 过一会在浏览器打开 http://127.0.0.1:8084/index.html

配置文件需要说明一点,默认是在当前目录下创建资源文件和数据库

image-20230212192958829

还需要注意一点,日志文件。如果不进行设置的话,那么系统会在项目的磁盘根节点增加一个日志文件,不想放在这里则要进行修改,同样也建议使用绝对路径

image-20230212020707785

另外脚本命令也可以看下,有隐藏cmd弹框的,解决乱码的,也有运行后打开自动打开网页的,但注意,这些配置有些是有冲突的,具体看脚本。

打包后的目录

image-20230223004904417

开发管理

端口管理

已使用端口:8084

模板管理

任务管理

系统暂时有用2个定时任务,分别是 ClearFileTaskDatabaseBackupTask 这2个类

任务 原理 任务类 备注
定时清理失效文件、脏数据 查询上传文件信息表 ps_upload_file,查询已经过了48小时的临时文件,找到后,根据记录的文件地址信息,删除对应的文件。通常会清理一些上传的图片 ClearFileTask#start() 1小时清理一次
数据库备份 检查是否开启了数据库备份,检查是否sqlite数据库,检查备份记录是否已经备份,从配置文件获取数据库地址进行备份。只保存最新的三条,其他的全部删除。 DatabaseBackupTask#start() 2小时一次

账号管理

测试账号: 下雪 密码:123123

分支管理

master 主分支

tag管理

常用组件

自定义注解

1、@CheckLength

针对注解存在的几个问题,比如长度限制这一块,我们需要限制的是数据存储到数据库时候的长度,@Size@Length 注解都不能满足,这2个注解都是活的 str.length 的长度,并不是字符串字节的长度,故而,长度注解采用 @CheckLength 这个自定义注解。这个会验证字节长度,使用的时候,可以参考 RegisterUserPram 类控制层和实体的写法。==暂时只支持String字符串。==

2、@CheckNotNull

检查验证字段是否为空,用来代替 @NotBlank 注解。==暂时只支持String字符串。==

必须空则使用 @Null 注解

3、ID 的校验逻辑

 /**
     * 如果 @Validated(UpdGroup.class) 修改的时候必须有ID,不能是 undefined 和 null 字符串 等
     * 如果 @Validated({AddGroup.class}) 新增的时候ID不能有值,比如 "" 字符串,只能是 null 对象
     * 验证的时候,@Validated 注解不加任何参数,不会进入下面的校验逻辑
     */
    @CheckNotNull(message = "非法ID", groups = UpdGroup.class)
    @Null(message = "无效ID", groups = AddGroup.class)
    private String id;

4、当存在 @Validated 注解的时候,如果里面有验证注解,就不需要担心对象为null,但注意,这个时候,这个对象里面的参数很可能是null的。

本地缓存使用说明

模拟缓存使用

private static TimedCache<String, String> timedCache = CacheUtil.newTimedCache(30 * 1000);

锁释放则使用如下方式

// 通过再次设置这个值,并将过期时间设置为1毫秒,实现释放锁的功能
timedCache.put(key, "1", 1);

liquibase使用

新建的项目总是需要进行一系列的管理非常麻烦,建表,创建语句等等,liquibase可以帮助我们解决这些问题。

脚本已经指定位置,后续需要替换,直接在这里进行路径替换即可。

image-20230703093803372

image-20230703093823760

翻译API

有道翻译单词发音API

默认的是美音:http://dict.youdao.com/dictvoice?audio=单词,

等号后面接单词,例如:http://dict.youdao.com/dictvoice?audio=the

英音和美音:

英音:http://dict.youdao.com/dictvoice?type=1&audio=

美音:http://dict.youdao.com/dictvoice?type=0&audio=

注意,得到的音频其实就是 mp3格式的,可以修改后缀

单词查询含义

http://dict.youdao.com/suggest?num=1&doctype=json&q=单词

等号后面接单词,例如:http://dict.youdao.com/suggest?num=1&doctype=json&q=the

有道句子翻译

http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=要翻译的名子或短语

等号后面接句子或短语,例如:http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=English-speaking world

如果是链接,将句子的空格替换成%20,例如:http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=English-speaking%20world

MIT License Copyright (c) 2023 sprouting Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

社交、时间管理系统,一个可以帮助你记账、社交管理、计划任务、生日提醒的软件,最符合中国人习惯的社交、计划工具。 展开 收起
Java 等 2 种语言
MIT
取消

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化