diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml
index 1c3c271..b1409d0 100644
--- a/docker/dev/docker-compose.yml
+++ b/docker/dev/docker-compose.yml
@@ -18,12 +18,14 @@ services:
ports:
- "3306:3306"
volumes:
+ - "./forest.sql:/forest.sql"
- "mysql8-volume:/etc/mysql/conf.d"
- "mysql8-volume:/var/lib/mysql"
- "mysql8-volume:/logs"
environment:
- MYSQL_ROOT_PASSWORD=XzHvhX4CDaN696oQAXdmlcsrqgWbkxRl
- TZ=Asia/Shanghai
+ command: ["--default-authentication-plugin=mysql_native_password", "--init-file=/forest.sql"]
volumes:
mysql8-volume:
redis-volume:
diff --git a/docker/dev/forest.sql b/docker/dev/forest.sql
new file mode 100644
index 0000000..59ac599
--- /dev/null
+++ b/docker/dev/forest.sql
@@ -0,0 +1,837 @@
+create database forest default character set utf8mb4 collate utf8mb4_unicode_ci;
+
+use forest;
+
+create table forest_article
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ article_title varchar(128) null comment '文章标题',
+ article_thumbnail_url varchar(128) null comment '文章缩略图',
+ article_author_id bigint null comment '文章作者id',
+ article_type char default '0' null comment '文章类型',
+ article_tags varchar(128) null comment '文章标签',
+ article_view_count int default 1 null comment '浏览总数',
+ article_preview_content varchar(256) null comment '预览内容',
+ article_comment_count int default 0 null comment '评论总数',
+ article_permalink varchar(128) null comment '文章永久链接',
+ article_link varchar(32) null comment '站内链接',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ article_perfect char default '0' null comment '0:非优选1:优选',
+ article_status char default '0' null comment '文章状态',
+ article_thumbs_up_count int default 0 null comment '点赞总数',
+ article_sponsor_count int default 0 null comment '赞赏总数'
+) comment '文章表 ' collate = utf8mb4_unicode_ci;
+
+INSERT INTO forest.forest_article (id, article_title, article_thumbnail_url, article_author_id, article_type,
+ article_tags, article_view_count, article_preview_content, article_comment_count,
+ article_permalink, article_link, created_time, updated_time, article_perfect,
+ article_status, article_thumbs_up_count, article_sponsor_count)
+VALUES (1, '给新人的一封信', null, 1, '0', '公告,新手信', 3275,
+ '您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。新手的疑问初学者都有很多疑问,在这里对这些疑问进行一一解答。我英语不好,可以学习编程吗?对于初学者来说,英语不是主要的障碍,国内有着充足的中文教程。但在接下来的学习过程中,需要阅读大量的英文文档,所以还是需要有一些英语基础和理解学习能力,配合翻译工具(如百度',
+ 0, 'http://localhost:3000/article/1', '/article/1', '2020-01-03 01:27:25', '2022-09-26 15:33:03', '0', '0', 7,
+ 3);
+
+create table forest_article_content
+(
+ id_article bigint not null comment '主键',
+ article_content text null comment '文章内容原文',
+ article_content_html text null comment '文章内容Html',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间'
+) comment ' ' collate = utf8mb4_unicode_ci;
+
+create index forest_article_content_id_article_index
+ on forest_article_content (id_article);
+
+INSERT INTO forest.forest_article_content (id_article, article_content, article_content_html, created_time,
+ updated_time)
+VALUES (1, '您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。
+
+## 新手的疑问
+
+初学者都有很多疑问,在这里对这些疑问进行一一解答。
+
+- 我英语不好,可以学习编程吗?
+ 对于初学者来说,英语不是主要的障碍,国内有着充足的中文教程。但在接下来的学习过程中,需要阅读大量的英文文档,所以还是需要有一些英语基础和理解学习能力,配合翻译工具(如百度翻译)进行理解。
+- 我数学不好,可以学习编程吗?
+ 对于初学者来说,有必要掌握数学逻辑思维和解决问题的思路,这些能力都在数学学习中得到锻炼,想必学习编程的人数学成绩肯定不错。初学者不需要多高的数学知识水平,但在未来的学习过程中需要更高级的数学知识,应随时做好接受学习新知识的准备。
+- 我想学习编程,大佬可以教教我吗?
+ 一般我是拒绝的,我认为学习是互相促进的过程,而不是单方面的输出,并且我也有很多事情要做。不仅是我,绝大多数人都会拒绝。
+- 学习编程是使用 IDE 好还是 Notepad 好?
+ 最近看到有人在争论这个问题,使用 IDE 是新手的不二选择。
+- 好吧,我自学编程,有问题可以问大佬吗?
+ 可以,但是我拒绝回答书中的基础问题和可以通过搜索引擎解决的问题。
+- 学习编程是看书好还是看视频好?
+ 萝卜青菜,各有所爱,关键是看哪种方式能让你更好理解和学习。我个人是喜爱书本,可以随时查阅资料,非常方便。
+- 我学习了很久,但没有成效,我是不是没有天赋?
+ 我个人觉得对于入门的学习来说,天赋对于学习的影响微乎其微,如果你的学习效率低下,考虑是不是以下原因:
+
+ - 单纯的努力不足,三天打鱼两天晒网。如果不能改正,不如考虑干点别的。
+ - 数学逻辑思维和解决问题的能力不足。这个可以学习一些简单易懂的教程,看看视频等,慢慢锻炼,没有任何捷径。
+ - 学习方法不对,主要是练得少。只翻书和看视频是没有用的,必须配合大量的练习。个人推荐的方法是:
+ - 看完书以后把书上给出的例题再敲一遍,不是照着书上写。
+ - 把课后习题都给做了。
+ - 做几个自己感兴趣的项目。
+ - 对于自己不懂的问题,先看看书,再百度谷歌,最后才询问他人。
+
+## 提问的方法
+
+当你遇到**使用搜索引擎、查阅相关文档、进行 Debug**(如果没有做过上述操作的话,请立刻去做)也无法解决的问题的时候,你可能会向别人求助。现在就来讲讲如何正确提问。
+
+当你进行提问时,请保证你准确提供了以下信息:
+
+- 准确的描述你的需求和实际问题情况。
+- 准确的描述你所在的平台的信息。例如:
+ - 开发板型号
+ - 运行程序( IDE 等)名称及其版本
+ - Windows/Linux/MacOS 任一平台及其版本
+ - 依赖的类库及其版本
+- 提供你的源代码,将源代码包括开发环境完整上传至源码托管平台(如 Github)。
+- 提供你的完整日志、异常输出。
+
+如果你在社区提问,请在你的标题也简略的包含问题描述和平台信息。例如 `stm32f103x 开发板` `win10` 运行串口通信程序时,中文显示乱码
+
+如果你想学习更多关于提问的方法、技巧、礼仪,看看[提问的智慧](https://rymcu.com/article/80)会给予你许多帮助。
+
+## 自学的方法
+
+- 每当学习到新知识的时候应该及时的练习和实践
+- 多看看开发文档,每次你都能获得新的收获
+- 多看看别人的源代码,很多问题都能得到解决
+- 搜索引擎是一个好东西
+- 写学习笔记和博客是记录知识的好方式,但不是死记知识点
+- 好的提问方式才能获得正确答案
+- 合理的规划学习时间,而不是三天打鱼两天晒网
+
+## C 语言基础教程
+
+- [C 语言中文教程](https://doc.yonyoucloud.com/doc/wiki/project/c/c-intro.html)
+- [C语言小白变怪兽](http://c.biancheng.net/c/)
+
+## 单片机基础教程
+
+- [51 单片机入门教程(Keil4 版)](https://rymcu.com/portfolio/42)
+- [STM32 独家入门秘籍](https://rymcu.com/portfolio/11)
+- [51 单片机入门教程(VS Code 版)](https://rymcu.com/portfolio/41)
+
+## 其他教程
+
+- [markdown 教程](https://rymcu.com/guides/markdown)
+- [社区编辑器使用教程](https://rymcu.com/guides/vditor)
+
+## 推荐书籍
+
+- 《C 程序设计语言( 第 2 版 ) 》 —— [美] 布莱恩·W.克尼汉(Brian W.Kernighan),[美] 丹尼斯·M.里奇(Dennis M.Ritchie) 著
+- 《软技能: 代码之外的生存指南》—— [美] 约翰 Z.森梅兹(John Z.Sonmez) 著
+- 《大教堂与集市》—— [美] Eric S Raymond 著
+- 《黑客与画家》—— [美] Paul Graham 著
+
+## 愿景
+
+> 关于更多的信息请阅读 [《RYMCU 白皮书》](https://rymcu.com/article/115)
+
+我们致力于构建一个即严谨又活泼、专业又不失有趣的开源嵌入式知识平台。在这里我们可以畅所欲言、以平等、自由的身份获取和分享知识。在这里共同学习、交流、进步、成长。
+
+## 行为准则
+
+> 详细行为准则请参考 [参与者公约](https://rymcu.com/article/20)
+
+无论问题简单与否,欢迎大家积极留言、评论、交流。对他人多一些理解和包容,帮助他人解决问题和自我提升是我们的终极目标。
+欢迎您发表原创文章、分享独到见解、作出有价值的评论。所有原创内容著作权均归作者本人所有。所发表内容不得侵犯企业或个人的合法权益,包括但不限于涉及个人隐私、造谣与诽谤、商业侵权。
+
+## 其他
+
+### 微信公众号
+
+![qrcodeforgh245b3234e782258.jpg](https://static.rymcu.com/article/1642081054095.jpg)
+
+### github
+
+[RYMCU](https://github.com/rymcu)
+
+### gitee
+
+[RYMCU 社区](https://gitee.com/rymcu-community)
+
+', '
您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。
+新手的疑问
+初学者都有很多疑问,在这里对这些疑问进行一一解答。
+
+-
+
我英语不好,可以学习编程吗?
+对于初学者来说,英语不是主要的障碍,国内有着充足的中文教程。但在接下来的学习过程中,需要阅读大量的英文文档,所以还是需要有一些英语基础和理解学习能力,配合翻译工具(如百度翻译)进行理解。
+
+-
+
我数学不好,可以学习编程吗?
+对于初学者来说,有必要掌握数学逻辑思维和解决问题的思路,这些能力都在数学学习中得到锻炼,想必学习编程的人数学成绩肯定不错。初学者不需要多高的数学知识水平,但在未来的学习过程中需要更高级的数学知识,应随时做好接受学习新知识的准备。
+
+-
+
我想学习编程,大佬可以教教我吗?
+一般我是拒绝的,我认为学习是互相促进的过程,而不是单方面的输出,并且我也有很多事情要做。不仅是我,绝大多数人都会拒绝。
+
+-
+
学习编程是使用 IDE 好还是 Notepad 好?
+最近看到有人在争论这个问题,使用 IDE 是新手的不二选择。
+
+-
+
好吧,我自学编程,有问题可以问大佬吗?
+可以,但是我拒绝回答书中的基础问题和可以通过搜索引擎解决的问题。
+
+-
+
学习编程是看书好还是看视频好?
+萝卜青菜,各有所爱,关键是看哪种方式能让你更好理解和学习。我个人是喜爱书本,可以随时查阅资料,非常方便。
+
+-
+
我学习了很久,但没有成效,我是不是没有天赋?
+我个人觉得对于入门的学习来说,天赋对于学习的影响微乎其微,如果你的学习效率低下,考虑是不是以下原因:
+
+- 单纯的努力不足,三天打鱼两天晒网。如果不能改正,不如考虑干点别的。
+- 数学逻辑思维和解决问题的能力不足。这个可以学习一些简单易懂的教程,看看视频等,慢慢锻炼,没有任何捷径。
+- 学习方法不对,主要是练得少。只翻书和看视频是没有用的,必须配合大量的练习。个人推荐的方法是:
+
+- 看完书以后把书上给出的例题再敲一遍,不是照着书上写。
+- 把课后习题都给做了。
+- 做几个自己感兴趣的项目。
+- 对于自己不懂的问题,先看看书,再百度谷歌,最后才询问他人。
+
+
+
+
+
+提问的方法
+当你遇到使用搜索引擎、查阅相关文档、进行 Debug(如果没有做过上述操作的话,请立刻去做)也无法解决的问题的时候,你可能会向别人求助。现在就来讲讲如何正确提问。
+当你进行提问时,请保证你准确提供了以下信息:
+
+- 准确的描述你的需求和实际问题情况。
+- 准确的描述你所在的平台的信息。例如:
+
+- 开发板型号
+- 运行程序( IDE 等)名称及其版本
+- Windows/Linux/MacOS 任一平台及其版本
+- 依赖的类库及其版本
+
+
+- 提供你的源代码,将源代码包括开发环境完整上传至源码托管平台(如 Github)。
+- 提供你的完整日志、异常输出。
+
+如果你在社区提问,请在你的标题也简略的包含问题描述和平台信息。例如 stm32f103x 开发板
win10
运行串口通信程序时,中文显示乱码
+如果你想学习更多关于提问的方法、技巧、礼仪,看看提问的智慧会给予你许多帮助。
+自学的方法
+
+- 每当学习到新知识的时候应该及时的练习和实践
+- 多看看开发文档,每次你都能获得新的收获
+- 多看看别人的源代码,很多问题都能得到解决
+- 搜索引擎是一个好东西
+- 写学习笔记和博客是记录知识的好方式,但不是死记知识点
+- 好的提问方式才能获得正确答案
+- 合理的规划学习时间,而不是三天打鱼两天晒网
+
+C 语言基础教程
+
+单片机基础教程
+
+其他教程
+
+推荐书籍
+
+- 《C 程序设计语言( 第 2 版 ) 》 —— [美] 布莱恩·W.克尼汉(Brian W.Kernighan),[美] 丹尼斯·M.里奇(Dennis M.Ritchie) 著
+- 《软技能: 代码之外的生存指南》—— [美] 约翰 Z.森梅兹(John Z.Sonmez) 著
+- 《大教堂与集市》—— [美] Eric S Raymond 著
+- 《黑客与画家》—— [美] Paul Graham 著
+
+愿景
+
+关于更多的信息请阅读 《RYMCU 白皮书》
+
+我们致力于构建一个即严谨又活泼、专业又不失有趣的开源嵌入式知识平台。在这里我们可以畅所欲言、以平等、自由的身份获取和分享知识。在这里共同学习、交流、进步、成长。
+行为准则
+
+详细行为准则请参考 参与者公约
+
+无论问题简单与否,欢迎大家积极留言、评论、交流。对他人多一些理解和包容,帮助他人解决问题和自我提升是我们的终极目标。
+欢迎您发表原创文章、分享独到见解、作出有价值的评论。所有原创内容著作权均归作者本人所有。所发表内容不得侵犯企业或个人的合法权益,包括但不限于涉及个人隐私、造谣与诽谤、商业侵权。
+其他
+微信公众号
+
+github
+RYMCU
+gitee
+RYMCU 社区
+', '2020-01-03 15:27:25', '2022-09-26 15:33:02');
+
+
+create table forest_article_thumbs_up
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_article bigint null comment '文章表主键',
+ id_user bigint null comment '用户表主键',
+ thumbs_up_time datetime null comment '点赞时间'
+) comment '文章点赞表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_bank
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ bank_name varchar(64) null comment '银行名称',
+ bank_owner bigint null comment '银行负责人',
+ bank_description varchar(512) null comment '银行描述',
+ created_by bigint null comment '创建人',
+ created_time datetime null comment '创建时间'
+) comment '银行表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_bank_account
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_bank bigint null comment '所属银行',
+ bank_account varchar(32) null comment '银行账户',
+ account_balance decimal(32, 8) null comment '账户余额',
+ account_owner bigint null comment '账户所有者',
+ created_time datetime null comment '创建时间',
+ account_type char default '0' null comment '0: 普通账户 1: 银行账户'
+) comment '银行账户表 ' collate = utf8mb4_unicode_ci;
+
+create unique index forest_bank_account_pk
+ on forest_bank_account (account_owner, bank_account);
+
+create table forest_comment
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ comment_content text null comment '评论内容',
+ comment_author_id bigint null comment '作者 id',
+ comment_article_id bigint null comment '文章 id',
+ comment_sharp_url varchar(256) null comment '锚点 url',
+ comment_original_comment_id bigint null comment '父评论 id',
+ comment_status char default '0' null comment '状态',
+ comment_ip varchar(128) null comment '评论 IP',
+ comment_ua varchar(512) null comment 'User-Agent',
+ comment_anonymous char null comment '0:公开回帖,1:匿名回帖',
+ comment_reply_count int null comment '回帖计数',
+ comment_visible char null comment '0:所有人可见,1:仅楼主和自己可见',
+ created_time datetime null comment '创建时间'
+) comment '评论表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_currency_issue
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ issue_value decimal(32, 8) null comment '发行数额',
+ created_by bigint null comment '发行人',
+ created_time datetime null comment '发行时间'
+) comment '货币发行表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_currency_rule
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ rule_name varchar(128) null comment '规则名称',
+ rule_sign varchar(64) null comment '规则标志(与枚举变量对应)',
+ rule_description varchar(1024) null comment '规则描述',
+ money decimal(32, 8) null comment '金额',
+ award_status char default '0' null comment '奖励(0)/消耗(1)状态',
+ maximum_money decimal(32, 8) null comment '上限金额',
+ repeat_days int default 0 null comment '重复(0: 不重复,单位:天)',
+ status char default '0' null comment '状态'
+) comment '货币规则表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_follow
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ follower_id bigint null comment '关注者 id',
+ following_id bigint null comment '关注数据 id',
+ following_type char null comment '0:用户,1:标签,2:帖子收藏,3:帖子关注'
+) comment '关注表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_notification
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_user bigint null comment '用户id',
+ data_type char null comment '数据类型',
+ data_id bigint null comment '数据id',
+ has_read char default '0' null comment '是否已读',
+ data_summary varchar(256) null comment '数据摘要',
+ created_time datetime null comment '创建时间'
+) comment '通知表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_portfolio
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ portfolio_head_img_url varchar(500) null comment '作品集头像',
+ portfolio_title varchar(32) null comment '作品集名称',
+ portfolio_author_id bigint null comment '作品集作者',
+ portfolio_description varchar(1024) null comment '作品集介绍',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ portfolio_description_html varchar(1024) null comment ' 作品集介绍HTML'
+) comment '作品集表' collate = utf8mb4_unicode_ci;
+
+create table forest_portfolio_article
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_portfolio bigint null comment '作品集表主键',
+ id_article bigint null comment '文章表主键',
+ sort_no int null comment '排序号'
+) comment '作品集与文章关系表' collate = utf8mb4_unicode_ci;
+
+create table forest_role
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ name varchar(32) null comment '名称',
+ input_code varchar(32) null comment '拼音码',
+ status char default '0' null comment '状态',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ weights tinyint default 0 null comment '权重,数值越小权限越大;0:无权限'
+) comment ' ' collate = utf8mb4_unicode_ci;
+
+create table forest_sponsor
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ data_type char null comment '数据类型',
+ data_id bigint null comment '数据主键',
+ sponsor bigint null comment '赞赏人',
+ sponsorship_time datetime null comment '赞赏日期',
+ sponsorship_money decimal(32, 8) null comment '赞赏金额'
+) comment '赞赏表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_tag
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ tag_title varchar(32) null comment '标签名',
+ tag_icon_path varchar(512) null comment '标签图标',
+ tag_uri varchar(128) null comment '标签uri',
+ tag_description text null comment '描述',
+ tag_view_count int default 0 null comment '浏览量',
+ tag_article_count int default 0 null comment '关联文章总数',
+ tag_ad char null comment '标签广告',
+ tag_show_side_ad char null comment '是否显示全站侧边栏广告',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ tag_status char default '0' null comment '标签状态',
+ tag_reservation char default '0' null comment '保留标签',
+ tag_description_html text null
+) comment '标签表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_tag_article
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_tag bigint null comment '标签 id',
+ id_article varchar(32) null comment '帖子 id',
+ article_comment_count int default 0 null comment '帖子评论计数 0',
+ article_perfect int default 0 null comment '0:非优选1:优选 0',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间'
+) comment '标签 - 帖子关联表 ' collate = utf8mb4_unicode_ci;
+
+create index forest_tag_article_id_tag_index
+ on forest_tag_article (id_tag);
+
+create table forest_topic
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ topic_title varchar(32) null comment '专题标题',
+ topic_uri varchar(32) null comment '专题路径',
+ topic_description text null comment '专题描述',
+ topic_type varchar(32) null comment '专题类型',
+ topic_sort int default 10 null comment '专题序号 10',
+ topic_icon_path varchar(128) null comment '专题图片路径',
+ topic_nva char default '0' null comment '0:作为导航1:不作为导航 0',
+ topic_tag_count int default 0 null comment '专题下标签总数 0',
+ topic_status char default '0' null comment '0:正常1:禁用 0',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ topic_description_html text null comment '专题描述 Html'
+) comment '主题表' collate = utf8mb4_unicode_ci;
+
+create table forest_topic_tag
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_topic bigint null comment '专题id',
+ id_tag bigint null comment '标签id',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间'
+) comment '专题- 标签关联表 ' collate = utf8mb4_unicode_ci;
+
+create index forest_topic_tag_id_topic_index
+ on forest_topic_tag (id_topic);
+
+create table forest_transaction_record
+(
+ id bigint auto_increment comment '交易主键'
+ primary key,
+ transaction_no varchar(32) null comment '交易流水号',
+ funds varchar(32) null comment '款项',
+ form_bank_account varchar(32) null comment '交易发起方',
+ to_bank_account varchar(32) null comment '交易收款方',
+ money decimal(32, 8) null comment '交易金额',
+ transaction_type char default '0' null comment '交易类型',
+ transaction_time datetime null comment '交易时间'
+) comment '交易记录表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_user
+(
+ id bigint auto_increment comment '用户ID'
+ primary key,
+ account varchar(32) null comment '账号',
+ password varchar(64) not null comment '密码',
+ nickname varchar(128) null comment '昵称',
+ real_name varchar(32) null comment '真实姓名',
+ sex char default '0' null comment '性别',
+ avatar_type char default '0' null comment '头像类型',
+ avatar_url varchar(512) null comment '头像路径',
+ email varchar(64) null comment '邮箱',
+ phone varchar(11) null comment '电话',
+ status char default '0' null comment '状态',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ last_login_time datetime null comment '最后登录时间',
+ signature varchar(128) null comment '签名',
+ last_online_time datetime null comment '最后在线时间',
+ bg_img_url varchar(512) null comment '背景图片'
+) comment '用户表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_user_extend
+(
+ id_user bigint not null comment '用户表主键',
+ github varchar(64) null comment 'github',
+ weibo varchar(32) null comment '微博',
+ weixin varchar(32) null comment '微信',
+ qq varchar(32) null comment 'qq',
+ blog varchar(500) null comment '博客'
+) comment '用户扩展表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_user_role
+(
+ id_user bigint not null comment '用户表主键',
+ id_role bigint not null comment '角色表主键',
+ created_time datetime null comment '创建时间'
+) comment '用户权限表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_user_tag
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_user bigint null comment '用户 id',
+ id_tag varchar(32) null comment '标签 id',
+ type char null comment '0:创建者,1:帖子使用,2:用户自评标签',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间'
+) comment '用户 - 标签关联表 ' collate = utf8mb4_unicode_ci;
+
+create table forest_visit
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ visit_url varchar(256) null comment '浏览链接',
+ visit_ip varchar(128) null comment 'IP',
+ visit_ua varchar(512) null comment 'User-Agent',
+ visit_city varchar(32) null comment '城市',
+ visit_device_id varchar(256) null comment '设备唯一标识',
+ visit_user_id bigint null comment '浏览者 id',
+ visit_referer_url varchar(256) null comment '上游链接',
+ created_time datetime null comment '创建时间',
+ expired_time datetime null comment '过期时间'
+) comment '浏览表' collate = utf8mb4_unicode_ci;
+
+create table forest_lucene_user_dic
+(
+ id int auto_increment comment '字典编号',
+ dic char(32) null comment '字典',
+ constraint forest_lucene_user_dic_id_uindex
+ unique (id)
+) comment '用户扩展字典' collate = utf8mb4_unicode_ci;
+
+alter table forest_lucene_user_dic
+ add primary key (id);
+
+insert into forest.forest_role (id, name, input_code, status, created_time, updated_time, weights)
+values (1, '管理员', 'admin', '0', '2019-11-16 04:22:45', '2019-11-16 04:22:45', 1);
+insert into forest.forest_role (id, name, input_code, status, created_time, updated_time, weights)
+values (2, '社区管理员', 'blog_admin', '0', '2019-12-05 03:10:05', '2019-12-05 17:11:35', 2);
+insert into forest.forest_role (id, name, input_code, status, created_time, updated_time, weights)
+values (3, '作者', 'zz', '0', '2020-03-12 15:07:27', '2020-03-12 15:07:27', 3);
+insert into forest.forest_role (id, name, input_code, status, created_time, updated_time, weights)
+values (4, '普通用户', 'user', '0', '2019-12-05 03:10:59', '2020-03-12 15:13:49', 4);
+
+insert into forest.forest_user (id, account, password, nickname, real_name, sex, avatar_type, avatar_url, email, phone,
+ status, created_time, updated_time, last_login_time, signature)
+values (1, 'admin', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'admin', 'admin', '0', '0', null,
+ 'admin@rymcu.com',
+ null, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', '2021-01-25 18:21:54', null);
+insert into forest.forest_user (id, account, password, nickname, real_name, sex, avatar_type, avatar_url, email, phone,
+ status, created_time, updated_time, last_login_time, signature)
+values (2, 'testUser', '8ce2dd866238958ac4f07870766813cdaa39a9b83a8c75e26aa50f23', 'testUser', 'testUser', '0', '0',
+ null, 'testUser@rymcu.com',
+ null, '0', '2021-01-25 18:21:51', '2021-01-25 18:21:54', '2021-01-25 18:21:54', null);
+
+insert into forest.forest_user_role (id_user, id_role, created_time)
+values (1, 1, '2021-01-25 18:22:12');
+
+create table forest_file
+(
+ id int unsigned auto_increment comment 'id'
+ primary key,
+ md5_value varchar(40) not null comment '文件md5值',
+ file_path varchar(255) not null comment '文件上传路径',
+ file_url varchar(255) not null comment '网络访问路径',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ created_by int null comment '创建人',
+ file_size int null comment '文件大小',
+ file_type varchar(10) null comment '文件类型'
+) comment '文件上传记录表' collate = utf8mb4_unicode_ci;
+
+create index index_md5_value_created_by
+ on forest_file (md5_value, created_by);
+
+create index index_created_by
+ on forest_file (created_by);
+
+create index index_md5_value
+ on forest_file (md5_value);
+
+create table forest_login_record
+(
+ id bigint auto_increment comment '主键'
+ primary key,
+ id_user bigint not null comment '用户表主键',
+ login_ip varchar(128) null comment '登录设备IP',
+ login_ua varchar(512) null comment '登录设备UA',
+ login_city varchar(128) null comment '登录设备所在城市',
+ login_os varchar(64) null comment '登录设备操作系统',
+ login_browser varchar(64) null comment '登录设备浏览器',
+ created_time datetime null comment '登录时间',
+ login_device_id varchar(512) null comment '登录设备/浏览器指纹',
+ constraint forest_login_record_id_uindex
+ unique (id)
+) comment '登录记录表' collate = utf8mb4_unicode_ci;
+
+create table forest_product
+(
+ id int auto_increment comment '主键'
+ primary key,
+ product_title varchar(100) null comment '产品名',
+ product_price int default 0 null comment '单价(单位:分)',
+ product_img_url varchar(100) null comment '产品主图',
+ product_description varchar(200) null comment '产品描述',
+ weights tinyint default 50 null comment '权重,数值越小权限越大;0:无权限',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间',
+ constraint forest_product_id_uindex
+ unique (id)
+)
+ comment '产品表';
+
+create table forest_product_content
+(
+ id_product int null comment '产品表主键',
+ product_content text null comment '产品详情原文',
+ product_content_html text null comment '产品详情 Html',
+ created_time datetime null comment '创建时间',
+ updated_time datetime null comment '更新时间'
+)
+ comment '产品详情表';
+
+INSERT INTO forest.forest_product (id, product_title, product_price, product_img_url, product_description, weights,
+ created_time, updated_time)
+VALUES (1, 'Nebula Pi', 2000000, 'https://static.rymcu.com/article/1648960741563.jpg', '产品描述', 20,
+ '2022-06-13 22:35:33', '2022-06-13 22:35:33');
+
+INSERT INTO forest.forest_product_content (id_product, product_content, product_content_html, created_time,
+ updated_time)
+VALUES (1, '![nebula pi](https://static.rymcu.com/article/1640531590770)
+
+Nebula-Pi 开发板平台
+
+## 1.1主板结构及布局
+
+![](https://static.rymcu.com/article/1640531590844)
+
+图1.1 Nebula-Pi 单片机开发平台
+
+## 1.2主板元件说明
+
+从图1.1可以看出, Nebula-Pi 开发板平台资源丰富,不仅涵盖了 51 单片机所有内部资源,还扩展了大量的外设,单片机的各项功能均可以在平台上得到验证。我们以顺时针的顺序从**①**到**⑳**,分别介绍主要模块的功能。
+
+| 序号 | 元器件 | 功能介绍 |
+| --- | --- | --- |
+| 1 | 迷你 USB 接口 | 给开发板供电,以及计算机与开发板通信 |
+| 2 | 单片机跳线帽 | 开发板上有两块独立的 51 单片机,可以通过这个跳线进行切换,选择你需要使用的单片机。 |
+| 3 | 电源开关 | 开发板电源开关 |
+| 4 | 51 单片机 STC89C52RC | 这套教程的主角, 51 单片机,选用 STC 公司的 STC89C52RC 型号进行讲解 |
+| 5 | 液晶显示器跳线帽 | 液晶显示器的跳线,可以选择 OLED 或者 LCD |
+| 6 | 主板复位按钮 | 复位按钮,相当于电脑的重启按键 |
+| 7 | 数字温度传感器 | 温度传感器,可以测量环境温度 |
+| 8 | 红外接收头 | 接收红外遥控信号专用 |
+| 9 | 液晶显示器接口 | 预留的液晶显示器 1602/12864 等的接口 |
+| 10 | 数码管 | 4 位数码管,可以同时显示 4 个数字等 |
+| 11 | 蜂鸣器 | 相当于开发板的小喇叭,可以发出"滴滴"等声音 |
+| 12 | 光敏&热敏电阻 | 两种类型的电阻,分别可以用来测量光强度和温度 |
+| 13 | 步进电机接口 | 预留给电机的接口 |
+| 14 | 8 个 LED 灯 | 8 个 LED 小灯,可实现指示灯,流水灯等效果 |
+| 15 | 增强型 51 单片机 STC12 | 开发板上的另外一块 51 单片机,比主角功能更强大,第一块用来学习,这一块用来做项目,学习、实践两不误 |
+| 16 | 2.4G 无线模块接口 | 为 2.4G 无线通信模块预留的接口,无线通信距离可以达到 1-2Km,大大扩展了开发板的功能 |
+| 17 | 3 个独立按键 | 3 个按键,可以当做开发板的输入设备,相当于迷你版键盘 |
+| 18 | 继电器接口 | 开发板上集成了继电器,这个接口预留给用户接线用的,可以用来控制 220V 设备的开关。因此,可以通过开发板來控制各种类型的家用电器 |
+| 19 | 电源端子 | 预留了 5V 和 3.3V 的电源端子,可以用来给其他设备供电 |
+| 20 | WiFi 模块接口 | WiFi 模块接口,接上 WiFi 模块,开发板可以轻松上网冲浪 |
+
+表 1-1 主板元器件说明
+
+', '
+Nebula-Pi 开发板平台
+1.1 主板结构及布局
+
+图 1.1 Nebula-Pi 单片机开发平台
+1.2 主板元件说明
+从图 1.1 可以看出, Nebula-Pi 开发板平台资源丰富,不仅涵盖了 51 单片机所有内部资源,还扩展了大量的外设,单片机的各项功能均可以在平台上得到验证。我们以顺时针的顺序从 ① 到 ⑳,分别介绍主要模块的功能。
+
+
+
+序号 |
+元器件 |
+功能介绍 |
+
+
+
+
+1 |
+迷你 USB 接口 |
+给开发板供电,以及计算机与开发板通信 |
+
+
+2 |
+单片机跳线帽 |
+开发板上有两块独立的 51 单片机,可以通过这个跳线进行切换,选择你需要使用的单片机。 |
+
+
+3 |
+电源开关 |
+开发板电源开关 |
+
+
+4 |
+51 单片机 STC89C52RC |
+这套教程的主角, 51 单片机,选用 STC 公司的 STC89C52RC 型号进行讲解 |
+
+
+5 |
+液晶显示器跳线帽 |
+液晶显示器的跳线,可以选择 OLED 或者 LCD |
+
+
+6 |
+主板复位按钮 |
+复位按钮,相当于电脑的重启按键 |
+
+
+7 |
+数字温度传感器 |
+温度传感器,可以测量环境温度 |
+
+
+8 |
+红外接收头 |
+接收红外遥控信号专用 |
+
+
+9 |
+液晶显示器接口 |
+预留的液晶显示器 1602/12864 等的接口 |
+
+
+10 |
+数码管 |
+4 位数码管,可以同时显示 4 个数字等 |
+
+
+11 |
+蜂鸣器 |
+相当于开发板的小喇叭,可以发出"滴滴"等声音 |
+
+
+12 |
+光敏&热敏电阻 |
+两种类型的电阻,分别可以用来测量光强度和温度 |
+
+
+13 |
+步进电机接口 |
+预留给电机的接口 |
+
+
+14 |
+8 个 LED 灯 |
+8 个 LED 小灯,可实现指示灯,流水灯等效果 |
+
+
+15 |
+增强型 51 单片机 STC12 |
+开发板上的另外一块 51 单片机,比主角功能更强大,第一块用来学习,这一块用来做项目,学习、实践两不误 |
+
+
+16 |
+2.4G 无线模块接口 |
+为 2.4G 无线通信模块预留的接口,无线通信距离可以达到 1-2Km,大大扩展了开发板的功能 |
+
+
+17 |
+3 个独立按键 |
+3 个按键,可以当做开发板的输入设备,相当于迷你版键盘 |
+
+
+18 |
+继电器接口 |
+开发板上集成了继电器,这个接口预留给用户接线用的,可以用来控制 220V 设备的开关。因此,可以通过开发板來控制各种类型的家用电器 |
+
+
+19 |
+电源端子 |
+预留了 5V 和 3.3V 的电源端子,可以用来给其他设备供电 |
+
+
+20 |
+WiFi 模块接口 |
+WiFi 模块接口,接上 WiFi 模块,开发板可以轻松上网冲浪 |
+
+
+
+表 1-1 主板元器件说明
+', '2022-06-13 22:35:34', '2022-06-13 22:35:34');
+
+INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time)
+VALUES (1, '社区中央银行', 1, '社区中央银行', 1, '2020-11-26 21:24:19');
+INSERT INTO forest.forest_bank (id, bank_name, bank_owner, bank_description, created_by, created_time)
+VALUES (2, '社区发展与改革银行', 1, '社区发展与改革银行', 1, '2020-11-26 21:31:27');
+
+
+INSERT INTO forest.forest_bank_account (id, id_bank, bank_account, account_balance, account_owner, created_time,
+ account_type)
+VALUES (2, 1, '100000002', 1207980.00000000, 2, '2020-11-26 21:37:18', '1');
+INSERT INTO forest.forest_bank_account (id, id_bank, bank_account, account_balance, account_owner, created_time,
+ account_type)
+VALUES (1, 1, '100000001', 997500000.00000000, 1, '2020-11-26 21:36:21', '1');