# SmartCityServer
**Repository Path**: wulixuezhe0317/SmartCityServer
## Basic Information
- **Project Name**: SmartCityServer
- **Description**: 完成基本架构的创建
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: develop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-12-19
- **Last Updated**: 2022-06-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# SmartCityServer
## 介绍
SmartCityServer项目是由青岛港湾职业技术学院学生刘俊沣、左爽负责开发,
以便用于山东省“移动应用开发大赛”的后端服务器,
主要目的为了方便在模拟赛过程中调用连接内部局域网接口,
便于进行数据的传输,方便比赛的模拟进行。
### 作者
架构设计:刘俊沣
功能编写:刘俊沣,左爽
创建时间:2021年12月
#### 软件架构
在SmartCityServer第一阶段的开发过程中,架构采用最基础的MVC架构进行设计。
内部采用AOP结构进行批量处理设计,对于JSON对象,JSON数组分别进行处理,
采用SpringBoot+MyBatis-Plus框架进行设计数据库的访问,在数据读取过程中
采用Redis+RabbitMQ缓存机制进行数据缓冲,优化数据的读取效率,降低服务器的响应时间。
对于Web页面的data传递,采用XML/HTML配置,使用MongoDB数据库保存,
该功能在开发的第二阶段预计进行使用,在第一阶段采用内置URL文件存储的方式保存XML/HTML文件,
并将文件的本地存储链接作为URI地址直接存储在MySQL数据库中。
#### 安装教程
1. 本项目运行在
2. 安装JDK8并配置环境
3. 安装MySQL5.5 x64,设置账号密码
4. 安装并配置Maven环境3.8.1
5. 安装配置RabbitMQ3.9.12,并配置非guest账户和管理员权限
6. 安装MongoDB5.0,并配置账号密码
7. 安装Redis2.8.2并配置服务器跨域使用
#### 模块设计SmartCityServer-XXX...
1. SmartCityServer-bean:通用开放接口的bean子包,存放所有开放API接口的实体信息,对应数据表创建,包括bean类和DTO类(Mybatis-plus的 QueryWapper调用类)。
2. SmartCityServer-common: 通用工具子包,存放所有的通用工具,可以统一返回状态JSON数据,对信息进行格式化设置等。
3. SmartCityServer-mapper: 映射类,用于保存映射接口与xml映射文件,可以实现实体类与DTO类的数据格式转换。
4. SmartCityServer-service: 用于实现业务功能,包括基本的增删改查功能以及上传下载等基本业务功能。
5. SmartCityServer-open-api: 对外开放的API接口,同时配置了全局的Configuration类,对组件进行注册,开放Swagger2工具,便于阅读接口。
6. SmartCityServer-socket: 用于存放网络通信工具,后期可用于实现实时在线聊天等流媒体功能。
7. SmartCityServer-manage: 用于设计后端的管理功能,接口统一保存在open-api模块中,用于内部调用。
8. SmartCityServer-student: 实现在线训练的任务分配与学习功能,用于项目的训练与线上视频教学。
9. SmartCityServer-teacher: 用于教师管理工作,主要对课程体系、训练内容进行设计,上传或安排课程,可实现录播、直播、线上教学互动、课程任务安排与学习进度监测工作。
后续将会进行持续更新开发...
#### 使用说明
1. Maven开发环境:v3.8.1
2. JSE开发环境:v1.8
3. MySQL开发环境:MySQL5.5
4. Redis开发环境:Redis2.8.2
5. MongoDB开发环境:MongoDB 5.0
6. RabbitMQ开发环境:Erlang 24.2,RabbitMQ 3.9.12
7. idea开发环境:IntelliJ IDEA Community Edition 2021.1 x64
8. 数据库统一开发环境:Navicat Premium10.1.8
9. 系统开发环境:Windows10 x64 家庭版/专业版
10. 调试环境:postman,swagger2
11. 压测环境:JMeter
#### 参与贡献
1. 架构设计:刘俊沣
2. 用户登录:刘俊沣
3. 开发环境配置:刘俊沣
4. [DEADME.md](https://gitee.com/wulixuezhe0317/SmartCityServer/blob/develop/README.md) 文档编辑:刘俊沣
#### 特技
1. 在单机环境下不需要配置任何端口号,可以实现单机的大量并发使用
2. Redis+RabbitMQ实现多级缓存和消息的序列化服务,保证运行过程中的原子性
3. 启动速度快,打包成jar后可以不依赖tomcat直接启用
4. 设置了一系列格式化输入输出环境,对接口进行二次封装保证数据的安全性
5. 使用MyBatis-Plus保证SQL的安全性
6. JVM底层进行优化,保证数据安全和必要的线程安全处理
7. 使用Swegger2线上API开放接口,实现在线调试、查看API接口信息内容
8. redis缓存用于存储一些常用临时数据,例如:用户登录时的token凭证,数据字典,通用服务信息,广告信息,新闻等。
9. mongodb数据库:用于保存html文档,log日志文件统一管理。
#### maven子项目结构
表格所示:
| 子包名 | 描述与要求 |
| --------- | ------------------------------------------------------------------------- |
| bean | 用于存放开放接口的实体类信息,
包括bean类,DTO类,BO类,VO类等模型 |
| common | 用于存放各种工具,包括格式化工具,字符串判断工具,数据效验工具等 |
| socket | 用于存放长连接公共工具,实现实时信息传输,拆分后作为网络通信中间件 |
| mapper | 用于存放开放数据的ORM映射层,实现不同数据的传输功能 |
| openAPI | 用于展示对外开放的接口,android开发可以直接通过swagger2查找接口测试 |
| teacher | 项目拆分后作为教学专用独立服务,上传、安排教学计划与相关资料、在线视频 |
| student | 项目拆分后用于提供训练、学习的独立服务 |
| manager | 用于对开放接口的公共资源进行管理,包括密码重置,公共数据操作 |
目前项目处于单体架构设计阶段,在设计完成之后进行微服务拆分。