# 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.撰写论文



## 使用技术栈

项目开发环境：Windows 11 / Ubuntu Desktop 22.04 LTS、OpenJDK 11、MySQL 8.0.12、Node 14.18.0、Git（暂定）

项目部署环境：Linux、MySQL 8.0.x、nacos（暂定）

| 板块     | 技术栈                                                       | 开发工具                                                     | 依赖管理    | 备注 |
| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ----------- | ---- |
| 前端     | Vue 3（JavaScript框架）、Element Plus（UI组件库）            | VS Code（代码编辑器）                                        | npm 8.19.2  | 暂定 |
| 后端     | Java 11（开发语言）、SpringCloud（微服务）、nacos-server-2.1.2（服务注册与发现）、Redis（缓存） | Intellij IDEA Ultimate（集成开发环境）、<br />Postman（接口测试） | Maven 3.6.3 |      |
| 小程序端 | Taro 3.x（小程序跨端解决方案）、Vue 3（JavaScript框架）      | VS Code（代码编辑器）、<br />微信开发者工具（微信小程序打包工具）、<br />小程序开发工具（支付宝小程序打包工具） | npm 8.19.2  |      |
| 门禁端   | Electron（跨平台桌面GUI应用开发）、Nodejs（JavaScript 运行时环境） | VS Code（代码编辑器）                                        | npm 8.19.2  |      |
| 数据库   | MySQL 8.0.12（数据存储）                                     | Navicat                                                      | -           |      |



## 数据库设计

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

用户表

人员进出日志表

体温上报表



## 需要注意

### 写在最前

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

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



### 不允许

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

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

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



### 一些说明

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

支付宝小程序在沙箱环境下，可以测试完整的支付流程，所以支付宝小程序的开发全部在沙箱环境下进行（没有在线上支付宝环境测试过）。



## 启动项目

### Step0. 启动前的准备

#### 1.安装运行环境

##### 概览

需要准备如下项目运行环境

代码管理：[Git](https://git-scm.com/download)

前端：[**Nodejs**](https://nodejs.org/zh-cn/)，**npm**（安装node时会自带npm），[**Taro CLI**](https://taro-docs.jd.com/docs/GETTING-STARTED)，Vue 3[ ](https://cn.vuejs.org/guide/quick-start.html)

后端：[**OpenJDK 11**](https://jdk.java.net/java-se-ri/11)、[**Maven**](https://maven.apache.org/download.cgi)（需要配置JDK、Maven环境变量及Maven国内镜像源），[**nacos**](https://github.com/alibaba/nacos/releases/tag/2.1.2)

数据库：[**MySQL 8.0.x**](https://downloads.mysql.com/archives/community/)、[Navicat](http://www.navicat.com.cn/products/navicat-premium)（需要激活，可使用其他数据库管理工具代替）

小程序端：[**Taro**](https://taro-docs.jd.com/docs/GETTING-STARTED)

门禁端：[**Electron**](https://www.electronjs.org/)，[**cnpm**](https://npmmirror.com/)

开发工具：[VSCode](https://code.visualstudio.com/#alt-downloads)（建议安装扩展：[EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)；[Vue Language Features (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.volar)）、[IDEA Ultimate](https://www.jetbrains.com/zh-cn/idea/download/)（需要激活）、[微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)、[小程序开发工具](https://opendocs.alipay.com/mini/ide/download)（需要安装 `沙箱环境切换插件` 扩展并重启工具）

手机应用：[微信](https://weixin.qq.com/)（用于测试微信小程序）、[支付宝客户端沙箱版](https://open.alipay.com/develop/sandbox/tool/alipayclint)（用于测试支付宝小程序）

接口测试工具：[Postman](https://www.postman.com/downloads/)

> 如果希望查看环境变量是否配置成功，可以使用以下命令：
>
> （下面以 Windows 下命令说明，Linux 系统下 `echo %变量名%` 需要改成 `echo $变量名`）
>
> ```bash
> echo %PATH%
> # 您会看到以;分隔的很多路径，其中应该包括：
> # JDK 所在文件夹下的 bin 目录：...\openjdk-11\bin
> # Maven 所在文件夹下的 bin 目录：...\apache-maven-3.6.3\bin
>
> echo %JAVA_HOME%
> # 您会看到 JDK 所在文件夹
>
> echo %MAVEN_HOME%
> # 您会看到 Maven 所在文件夹
> ```
>
> 如果希望查看环境是否安装成功或安装的环境版本，可以使用以下命令：
>
> ```bash
> # 查看 Git 版本
> git --version
> # 您应该看到类似如下输出👇
> # git version 2.35.1.windows.2
>
> # 查看 MySQL 版本（如果 MySQL 的 bin 目录没有配在环境变量中，则需要先 cd 切换到 bin 目录下）
> mysql --version
> # 您应该看到类似如下输出👇
> # mysql  Ver 8.0.12 for Win64 on x86_64 (MySQL Community Server - GPL)
>
> # 查看 JDK 版本
> java -version
> # 您应该看到类似如下输出👇
> # openjdk version "11" 2018-09-25
> # OpenJDK Runtime Environment 18.9 (build 11+28)
> # OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
>
> # 查看 Maven 版本
> mvn -v
> # 您应该看到类似如下输出👇
> # Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
> # Maven home: xxxxxx\apache-maven-3.6.3\bin\..
> # Java version: 11, vendor: Oracle Corporation, runtime: xxxxxx\openjdk-11
> # Default locale: zh_CN, platform encoding: GBK
> # OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
>
> # 查看 node 版本
> node -v
> # 您应该看到类似如下输出👇
> # v14.18.0
>
> # 查看 npm 版本
> npm -v
> # 您应该看到类似如下输出👇
> # 8.19.2
>
> # 查看 cnpm 版本
> cnpm -v
> # 您应该看到类似如下输出👇
> # cnpm@8.4.0 (C:\Users\Coz\AppData\Roaming\npm\node_modules\cnpm\lib\parse_argv.js)
> # npm@8.19.2 (C:\Users\Coz\AppData\Roaming\npm\node_modules\cnpm\node_modules\npm\index.js)
> # node@14.18.0 (D:\Program\Development\Environment\nodejs\node.exe)
> # npminstall@6.5.2 (C:\Users\Coz\AppData\Roaming\npm\node_modules\cnpm\node_modules\npminstall\lib\index.js)
> # prefix=C:\Users\Coz\AppData\Roaming\npm
> # win32 x64 10.0.22621
> # registry=https://registry.npmmirror.com
> ```
>
> Maven 镜像源配置（下面以阿里云镜像为例，其他镜像可自行替换）：
>
> 用编辑器打开 maven 目录下 conf/settings.xml 文件，找到如下位置，将 `<mirror></mirror>` 部分粘贴进去：
>
> ```xml
>   <!-- mirrors
>    | This is a list of mirrors to be used in downloading artifacts from remote repositories.
>    |
>    | It works like this: a POM may declare a repository to use in resolving certain artifacts.
>    | However, this repository may have problems with heavy traffic at times, so people have mirrored
>    | it to several places.
>    |
>    | That repository definition will have a unique id, so we can create a mirror reference for that
>    | repository, to be used as an alternate download site. The mirror site will be the preferred
>    | server for that repository.
>    |-->
>   <mirrors>
>     <!-- mirror
>      | Specifies a repository mirror site to use instead of a given repository. The repository that
>      | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
>      | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
>      |
>     <mirror>
>       <id>mirrorId</id>
>       <mirrorOf>repositoryId</mirrorOf>
>       <name>Human Readable Name for this Mirror.</name>
>       <url>http://my.repository.com/repo/path</url>
>     </mirror>
>      -->
>     <!-- ######## 👇👇👇将以下部分粘贴进去👇👇👇 ######## -->
>     <mirror>
>       <id>alimaven</id>
>       <name>aliyun maven</name>
>       <url>https://maven.aliyun.com/repository/public</url>
>       <mirrorOf>central</mirrorOf>
>     </mirror>
>     <!-- ######## 👆👆👆将以上部分粘贴进去👆👆👆 ######## -->
>   </mirrors>
> ```
>
> npm 镜像源配置（下面以淘宝镜像为例，其他镜像可自行替换）：
>
> ```bash
> # 配置镜像源
> npm config set registry https://registry.npm.taobao.org/
> # 配置后可通过以下命令查看是否配置成功
> npm config get registry
> ```
>



##### cnpm

```bash
# electron 需要使用 cnpm 安装依赖
npm install -g cnpm --registry=https://registry.npmmirror.com
```



##### Taro

```bash
npm install -g @tarojs/cli
```



##### Electron

```bash
cd client-entrance-guard
cnpm install --save-dev electron
cnpm install --save-dev @electron-forge/cli 
```



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

```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
```



#### 3.数据库

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



#### 4.后端依赖

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



#### 5.前端依赖

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

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



#### 6.小程序依赖

```bash
# 进入 miniprogram 目录
cd miniprogram
npm install
# 回到项目根目录下
cd ../
```



#### 7.小程序配置

##### 配置业务域名

1.修改 `miniprogram/src/app.js` 文件

```javascript
App.use(setGlobalDataPlugin, {
  globalData: {
    baseUrl: "⚠此处修改为你自己的后端地址。注意需要https://开头，最后不带/",
  }
})
```

2.配置服务域名

- 小程序：在[微信小程序后台](https://mp.weixin.qq.com/) - 左侧最下方**开发** - **开发管理** - 右侧上方**开发设置** - **服务器域名** 添加 `https://` 开头的**request合法域名**
- 小程序测试号：在[微信小程序后台](https://mp.weixin.qq.com/) - **服务器域名** 添加 `https://` 开头的**request合法域名**（注意不是业务域名）
- 支付宝沙箱应用：在[支付宝开放平台](https://open.alipay.com/develop/sandbox/app) - 左侧**沙箱应用** - **服务端域名白名单** 添加 `https://` 开头的**httpRequest接口请求域名白名单**



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

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

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

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



#### 8.小程序打包

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

```bash
cd miniprogram
npm run build:weapp
```

打开**微信开发者工具**，小程序目录选择 `miniprogram` 目录

接下来按照正常的小程序发布流程进行发布即可。发布前记得测试小程序各功能是否正常。

##### 打包支付宝小程序

```bash
cd miniprogram
npm run build:alipay
```

打开**小程序开发者工具**，小程序目录选择 `miniprogram/dist` 目录

**重点：点开右上角【详情】，勾选【小程序配置】下的 `启用小程序基础库2.0构建` 和 `编译node_modules模块（ES6转ES5）`。**

需要注意的是，支付宝小程序打包很慢，需要等比较长的时间。

接下来按照正常的小程序发布流程进行发布即可。发布前记得测试小程序各功能是否正常。



#### 9.门禁端依赖

```bash
cd client-entrance-guard
cnpm install
```



#### 10.门禁端打包

> 参考文档：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*



### Step1. 启动项目后端

#### 1.启动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**

#### 2.启动MySQL



#### 3.启动各个微服务

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



### Step2. 启动项目前端

#### 1.启动后台管理员项目

之后在 `frontend` 目录下运行即可

```bash
npm run serve
```

#### 2.小程序打包

待更新



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

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



## 停止项目

### Step1. 停止各个微服务



### Step2. 停止nacos



### Step3. 停止MySQL



## 启动项目开发环境

- 启动开发工具：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

- `miniprogram` 目录下启动命令行：`npm run dev:alipay`(支付宝小程序)、`npm run dev:weapp`(微信小程序)

  > 因为支付宝小程序和微信小程序输出都在dist目录下，所以不可以同时开发调试

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



## 相关链接

### 后端

#### JDK

OpenJDK：https://openjdk.org/

Java SE 11：https://jdk.java.net/java-se-ri/11

#### Spring

Spring Cloud官网：https://spring.io/projects/spring-cloud

Spring Cloud Alibaba GitHub repo：https://github.com/alibaba/spring-cloud-alibaba

Spring initializr：https://start.spring.io/

https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.7.5&packaging=jar&jvmVersion=11&groupId=com.cxyxiaomo&artifactId=entrance&name=Epidemic%20prevention%20platform&description=&packageName=com.cxyxiaomo.entrance&dependencies=lombok,mysql,mybatis

##### Gateway

B站教程：https://www.bilibili.com/video/BV1JB4y1F7aL

#### Maven

MVN REPOSITORY：https://mvnrepository.com/

#### Nacos

Quick Start：https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html



### 前端

#### Element Plus

Element Plus官网：https://element-plus.gitee.io/zh-CN/

安装：https://element-plus.gitee.io/zh-CN/guide/installation.html

#### Ant Design

Ant Design of Vue：https://www.antdv.com/docs/vue/introduce



### 小程序端

#### Taro

Taro：https://docs.taro.zone/docs

#### 微信小程序

开发文档：https://developers.weixin.qq.com/miniprogram/dev/framework/

#### 支付宝小程序

开发文档：https://opendocs.alipay.com/mini/developer/getting-started

支付宝开放平台：https://open.alipay.com/develop/manage

支付宝沙箱应用：https://open.alipay.com/develop/sandbox/app

支付宝沙箱应用 - 文档：https://opendocs.alipay.com/common/02kkv7



### Electron

开发文档：https://www.electronjs.org/docs/latest/tutorial/quick-start

Electron Forge打包时的一些常见问题：https://blog.csdn.net/qq_49700358/article/details/126531158

打包：https://www.electronjs.org/docs/latest/tutorial/tutorial-packaging

#### cnpm

npmmirror 中国镜像站：https://npmmirror.com/
