# Epidemic prevention platform

> 基于微服务的社区疫情防控系统

代码仓库：[GitHub](https://github.com/coder-xiaomo/epp)  [Gitee](https://gitee.com/coder-xiaomo/epp)  [自建](https://git.only4.work/coder-xiaomo/epp)



## 简介

新冠疫情的出现，给人们的工作和生活带来了较大影响，也对社区疫情防控相关工作做了更高的要求。如何准确、快速、有效的落实疫情防控相关工作是对社区工作能力的一次全方位检验。基于此背景，结合社区疫情防控主要特点及核心要求，在对社区疫情管控模式进行充分分析后，开发了该基于微服务的社区疫情防控系统。

本系统采用微服务架构进行开发，充分发挥架构优势，围绕社区人员进出入、体温上报、买菜团购、药品购置四个社区疫情防控核心需求展开，为社区疫情防控工作保驾护航。



## 功能

对社区疫情管控模式进行分析，针对社区人员进出入、体温上报、买菜团购、药品购置等日常生活物资的调控与管理进行分析。深入了解微服务架构，设计并实现社区疫情防控系统



## 要求

1.分析社区疫情管控模式需求；

2.深入理解微服务架构思想；

3.设计并实现社区疫情防控各模块；

4.撰写论文



## 数据库字典

> 微服务：一个服务对应一个数据库，同一个信息可能存在不同的数据库

TODO



## 需要注意

### 写在最前

这个项目是我的本科毕设项目，所以部分功能做的比较粗糙，并不能保证数据安全及抗住并发，不建议直接部署到真实场景使用。

如果你想要拿我的项目作为毕设，我有义务先让你知晓，我并不保证这个项目在你演示的时候不出任何问题，也没有义务免费帮你答疑、安装环境和调试等。当然，如果我有空，可以付费咨询，我不保证付费就能解决你的问题，但如果没有解决你的问题，我不会收你一分钱。



### 不允许

- ⚠不允许使用这个项目进行广告营销

- ⚠不允许提供本项目第三方下载渠道（例如网盘分享等）

- ⚠不允许以任何形式二次出售卖钱。如果你想拿我的项目进行包装后收费卖给其他人，那么这里不欢迎你
- ⚠不允许拿本项目去申请版权、著作权等相关权属证明



### 一些说明

微信小程序支付功能如果没有微信支付商户号无法开发&测试，我没有商户号，所以微信小程序的支付功能是假的支付。



## 环境配置（使用技术栈）

### 安装运行环境

项目运行需要如下环境。[检查环境是否安装成功及国内镜像源配置](./docs/EnvCheck.md)

| 类型       | 项目        | 名称及版本                                                   | 部署环境  | 说明                                                         |
| ---------- | ----------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------ |
| 系统       |             | Windows 10/11 或<br />Ubuntu Desktop 22.04 LTS               | 开发      |                                                              |
| 系统       |             | Ubuntu Server 22.04 LTS                                      | 生产      |                                                              |
| 环境       | 代码管理    | [Git](https://git-scm.com/download)                          | 开发      | 代码管理                                                     |
| 环境       | 前端 门禁端 | [**Node.js 14.18.0**](https://nodejs.org/zh-cn/)             | 开发 生产 | 一个开源、跨平台的 JavaScript 运行时环境                     |
| 依赖管理   | 前端 门禁端 | **npm 9.5.1**                                                | 开发      | 安装 node 时会自带 npm                                       |
| 环境       | 前端        | [Vue 3](https://cn.vuejs.org/guide/quick-start.html)         | 开发      | 渐进式 JavaScript 框架                                       |
| UI 组件库  | 前端        | [Element Plus](https://element-plus.gitee.io/zh-CN/)         | 开发      | 一个Vue 3 UI 框架                                            |
| 环境       | 门禁端      | [**cnpm**](https://npmmirror.com/)                           | 开发      |                                                              |
| 环境       | 门禁端      | [**Electron**](https://www.electronjs.org/)                  | 开发      | 跨平台桌面 GUI 应用开发                                      |
| 环境       | 后端        | [**OpenJDK 11**](https://jdk.java.net/java-se-ri/11)         | 开发 生产 | **需要配置 JDK 环境变量**；Java 11                           |
| 依赖管理   | 后端        | [**Maven 3.6.3**](https://maven.apache.org/download.cgi)     | 开发 生产 | **需要配置 Maven 环境变量、国内镜像源**                      |
| 微服务框架 | 后端        | SpringCloud                                                  | 开发 生产 | 微服务                                                       |
| 环境       | 后端        | [**nacos server 2.2.0**](https://github.com/alibaba/nacos/releases/tag/2.2.0) | 开发 生产 | 微服务注册中心（服务注册与发现）                             |
| 环境       | 服务端      | Nginx                                                        | 开发 生产 | 可选                                                         |
| 环境       | 数据库      | [**MySQL 8.0.x**](https://downloads.mysql.com/archives/community/) | 开发 生产 | 数据存储                                                     |
| 管理工具   | 数据库      | [Navicat](http://www.navicat.com.cn/products/navicat-premium) | 开发      | 可选；需要激活，可使用其他数据库管理工具代替                 |
| 开发工具   | 小程序端    | [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) | 开发      | 微信小程序打包工具（小程序端为原生开发）                     |
| 开发工具   | 前端 后端   | [VSCode](https://code.visualstudio.com/#alt-downloads)       | 开发      | 代码编辑器。建议安装扩展：<br />[EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)；<br />[Vue Language Features (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) |
| 开发工具   | 后端        | [Intellij IDEA Ultimate](https://www.jetbrains.com/zh-cn/idea/download/) | 开发      | 集成开发环境。需要激活                                       |
| 小程序测试 | 手机应用    | [微信](https://weixin.qq.com/)                               | 开发      | 用于测试微信小程序                                           |
| 接口测试   | 接口测试    | [Postman](https://www.postman.com/downloads/)                | 开发      | 接口测试工具                                                 |
|            | 后端        | Redis                                                        |           | 缓存（待定）                                                 |



### 克隆项目代码到本地

```bash
# 克隆项目代码到本地
git clone https://github.com/coder-xiaomo/epp
# 或者选择以下地址
# git clone https://gitee.com/coder-xiaomo/epp
# git clone https://git.only4.work/coder-xiaomo/epp
# 进入项目根目录
cd epp
```



### 项目配置

#### 导入数据库

导入数据库SQL（SQL文件在 `database` 目录下）



#### 安装依赖

代码克隆下来后，第一次需要安装依赖

```bash
# ############
# 后端依赖
# ############
# 进入 backend 目录
cd backend
mvn clean install
# 回到项目根目录下
cd ../

# ############
# 门禁端依赖
# ############
# Electron
cd client-entrance-guard
cnpm install
# 回到项目根目录下
cd ../

# ############
# 前端依赖
# ############
# 进入 frontend 目录
cd frontend
# 建议使用 cnpm 安装依赖，如果没有安装 cnpm，可以通过 npm i cnpm 进行安装
cnpm install
# npm install --legacy-peer-deps
# 回到项目根目录下
cd ../
```



#### 小程序配置 & 打包

##### 配置业务域名

1.修改 `weixin-miniprogram/app.js` 文件

```javascript
// app.js
App({
  ...
  globalData: {
    ...
    baseUrl: "⚠此处修改为你的 Api 请求域名(不带最后的/)",
    ...
  }
})
```

2.配置服务域名

- 小程序：在[微信小程序后台](https://mp.weixin.qq.com/) - 左侧最下方**开发** - **开发管理** - 右侧上方**开发设置** - **服务器域名** 添加 `https://` 开头的**request合法域名**
- 小程序测试号：在[微信小程序后台](https://mp.weixin.qq.com/) - **服务器域名** 添加 `https://` 开头的**request合法域名**（注意不是业务域名）

##### 配置微信小程序appid

> ❓在哪里找appid？
>
> 如果没有注册小程序，可以申请小程序测试号进行测试，申请地址：https://mp.weixin.qq.com/wxamp/sandbox
>
> 如果已经注册过小程序，可以在此处微信扫码登录：https://mp.weixin.qq.com/ ，然后左侧菜单最后一项【设置】，滑到最下面【帐号信息】，<u>AppID(小程序ID)</u>一栏就是appid

修改 `weixin-miniprogram/project.config.json` 文件

```json
{
    ...
    "appid": "⚠此处修改为你的微信小程序appid",
    ...
}
```

##### 设置小程序最低基础库

> 参考：https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html

设置小程序最低基础库为 2.21.3 或更高

##### 打包微信小程序

打开**微信开发者工具**，小程序目录选择 `weixin-miniprogram` 目录，按照正常的小程序发布流程进行发布即可。发布前记得测试小程序各功能是否正常。



#### 门禁端配置 & 打包

##### 配置业务域名

修改 `client-entrance-guard/html/index.html` 文件

```html
...
<body>
    <iframe src="https://【⚠此处修改为你的 Api 请求域名】/access/index.html?inElectron=true" frameborder="0"></iframe>
    ...
</body>
...
```

##### 打包

> 参考文档：https://www.electronjs.org/docs/latest/tutorial/tutorial-packaging

使用**管理员身份**打开命令行，然后运行以下命令：

```bash
npm run package
# npm run make
```

`npm run make` 等于先执行 `npm run package`（即 *Import project into Forge*），再 *Create distributable*



#### 后端配置

##### 配置业务域名

TODO

修改 `backend\microservice-provider-access-8002\src\main\resources\static\access\assets\js\websocket.js` 文件

```
window.wsUrl = 'ws://127.0.0.1:80/access/websocket/1';
```



#### nginx 代理配置（可选）

根据自己的实际情况来改

```conf
server
{
    server_name epp.only4.work; # ⚠ Api 业务域名
    listen 80;
    listen 443 ssl http2;

    # 核心配置
    location / {
        proxy_pass http://127.0.0.1:5203; # ⚠ Gateway 微服务项目本地运行的端口

        # websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    # ⚠ 日志相关，根据自己实际情况配置
    access_log  /dev/null;
    error_log  /dev/null;
}
```





## 启动项目

### Step0: [开发] 启动项目开发环境

- 启动开发工具：IDEA Ultimate、VSCode、微信开发者工具

- 拉取项目仓库最新代码 & 切换到对应分支

- 启动数据库及可视化工具：MySQL、Navicat

- 启动后端微服务注册中心：nacos

- 在本地启动 Gateway 及各个微服务项目

- 在服务器端启动内网穿透 Server 端，在本地启动内网穿透 Client 端

  ```bash
  cd ./intranet-penetration/bin
  # server
  rathole ../conf/server.toml
  # client
  rathole.exe ../conf/client.toml
  ```

- 启动接口测试工具：Postman

- 本地运行门禁端：`client-entrance-guard` 目录下启动命令行：`npm run start`



### Step1. 启动项目后端

#### [部署&开发] 启动 nacos

> standalone 代表着单机模式运行，非集群模式
>

```bash
cd nacos/bin
# Windows
startup.cmd -m standalone
# Linux/Unix/Mac
# sh startup.sh -m standalone
# bash startup.sh -m standalone
```

Nacos 后台地址为：http://localhost:8848/nacos/index.html，默认用户名密码都是：**nacos**

#### [部署&开发] 启动 MySQL

略

#### [部署&开发] 启动各个微服务

开发：直接在 IDEA 中启动即可

部署：

```
# 启动 UserProvider
# 启动 Gateway
# ......
```

#### [可选] 启动 nginx

略



### Step2. 启动项目前端

#### [开发] 启动后台管理项目

在 `frontend` 目录下运行

```bash
npm run serve
```

> ps: 生产环境直接打包为静态文件部署



### Step3. 启动项目门禁端

编译并运行 `client-entrance-guard` 目录下 `electron` 项目即可



## 停止项目

这个应该不用多说吧



## 相关链接

- [相关文档链接](./docs/RelatedLinks.md)
- [遇到的问题及对应的解决方案](./docs/Solutions.md)
- 【TODO】[参考](./docs/Reference.md)、[开发步骤记录](./docs/开发步骤记录.md)、[功能拆分](./docs/功能拆分.md)
