Spare Parts Management System(SPMS) Backend - Multiple Modules
===============

1.模块介绍
-------------------
- spms 项目父模块
- spms-common 公共子模块：包含统一返回实体类，封装发出消息到队列等功能，是各业务模块的依赖；
- spms-oa OA对接模块：封装和OA webservice对接部分功能；
- spms-order 物料商城订单模块：封装车间请购单、工厂请购单等需求请购相关功能；
- spms-oversea 海外仓管理模块：封装海外仓管理功能；
- spms-wms 自管仓仓库管理模块：管理国内自管仓各功能；
- spms-user 用户角色管理模块：用户角色等管理；
- spms-web 应用控制层：程序入口web控制，main启动入口，swagger、druid等程序配置；

程序依赖关系：基础模块————>各业务处理模块————>控制入口模块
```
             |————> spms-order  |
spms-common  |————> spms-wms    | ————> spms-web 
             |————> ......      |
             
spms-common  |                  | 
             |————> spms-oversea|————> spms-web 
soms-oa      |                  |

```

2.项目介绍
-------------------
- 数据库文件位置：spms-web/src/main/resources/sql/spms.sql
- SPMS 实现功能：目录管理、备件请购、流程追踪、仓库管理......
- 部署接口 Swagger 说明访问IBM网络环境地址：http://localhost:8080/doc.html
- Druid 数据库连接监控地址，默认登录账号：admin/admin；地址：http://localhost:8080/druid/login.html


3.技术架构
-------------------
#### 开发环境
- 语言：Java 8
- IDE(JAVA)：IDEA安装lombok插件
- IDE(前端)：IDEA
- 依赖管理：Maven
- 数据库：MySQL5.7 / IBM Cloud - Compose for MySQL/ Oracle
- 运行环境：Aliyun/ Linux

#### 后端
- 基础框架：Spring Boot 4.0.0
- 持久层框架：Mybatis-plus_3.1.0
- 安全框架：Jwt
- 安全控制：Shiro
- 数据库连接池：Druid 1.1.22
- 缓存框架：redis
- 日志打印：logback
- 其他：fastjson，poi，jco，Swagger-ui，PageHelper，lombok（简化代码）等。

#### 前端
- React
- Ant Design
- TypeScript


4.部署 IBM Cloud 方法
-------------------
- 登录IBM Cloud 授权，直接上传 push
```bash
cf api  https://api.ng.bluemix.net
cf login -u wuminsz@cn.ibm.com -o WayneWu -s prod -sso
cf push spms-dev -f ./manifest.yml   OR   cf push -f ./manifest.yml
```
- manifest.yml文件信息
```bash
applications:
- instances: 1
  timeout: 180
  name: spms-dev
  host: spms-dev
  buildpack: java_buildpack
  path: ./target/demo-0.0.1-SNAPSHOT.jar
  memory: 1G
  random-route: true
```

5.部署 Aliyun 方法
-------------------
可参考博客 [Linux下部署Spring Boot jar](https://mrbird.cc/Linux%20Spring-Boot-jar.html)
- 连接 阿里云:
```
ssh root@47.106.232.121
password: xxxxxx
```
- spms在 Aliyun 目录：/root/myweb，移除原有jar包:
```
rm -rf spms-SNAPSHOT.jar
```
- linux服务器端强制关闭8080端口程序:
```bash
lsof -i :8080|grep -v "PID"|awk '{print "kill -9",$2}'|sh
```
- 在本机spms-web-0.0.1-SNAPSHOT.jar同级目录下执行如下命令，将该文件上传到服务器端的 /root/myweb 目录下：
```bash
scp -r spms-web-0.0.1-SNAPSHOT.jar root@server:/root/myweb
```
- 在Aliyun服务器里，spms-0.0.1-SNAPSHOT.jar同级目录下执行如下命令，即可启动应用程序：
```bash
nohup java -jar spms-web-0.0.1-SNAPSHOT.jar &
或指定启动环境配置
nohup java -jar spms-web-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &
```

6.相关技术参考文档
-------------------

#### 6.1 用户操作日志记录
- [SpringBoot实现用户操作日志记录](https://blog.csdn.net/weixin_40723662/article/details/103420462?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase)
- [Spring Boot AOP记录用户操作日志](https://www.cnblogs.com/crazy-lc/p/12449022.html)

#### 6.2 多数据源配置
- [springboot + mybatis + druid + 多数据源](https://blog.csdn.net/qq_35206261/article/details/81778224?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase)

#### 6.3 IBM MQ 配置(Java Message Service) 
- [IBM MQ + SpringBoot + JMS + 监听收发消息](https://blog.csdn.net/qq_34569497/article/details/81184177)
```
 普通 JMS 包
 project.mq.host=192.168.1.233
 project.mq.port=1415
 project.mq.queue-manager=PIP_IN
 project.mq.channel=SVRCONN_GW_IN
 project.mq.queue=TEST_IN
 project.mq.username=
 project.mq.password=
 project.mq.receive-timeout=60000
 project.mq.out.port=1418
 project.mq.out.channel=SVRCONN_GW_OUT
 project.mq.out.queue-manager=PIP_OUT
 project.mq.out.queue=TEST_OUT
```
- 项目启动，则 com.sunda.spmsweb.ibmmq 下的 ReceiveMessage 即启动监听。

7.Mac 导出 Swagger 为 html 或 PDF 文档
----------------------------------------
可参考博客[swagger-ui Swagger2Markup-cli 转换成文档](https://blog.csdn.net/u013576018/article/details/106320811) 
- Mac 下安装 swagger2markup-cli 命令工具：
```
brew install swagger2markup-cli
```
- 下载Swagger请求路径下的Json文件，存进指定文件：
```
curl -o swagger.json http://localhost:8080/v2/api-docs?group=spms
```
- Mac命令执行通过swagger2markup-cli工具将swagger.json文件进行二进制映射：
```
swagger2markup convert -i swagger.json -d ./markup-out/
```
- 在markup-out/目录下创建文件 index.adoc 内容如下:
```
include::overview.adoc[]
include::paths.adoc[]
include::definitions.adoc[]
```
- 安装 asciidoctor-pdf :
```
gem install asciidoctor-pdf
可能需要执行
brew install asciidoctor
```
- 进入./markup-out/目录下执行命令生成 html 文件：
```
asciidoctor index.adoc
或
asciidoctor -d book -a toc=left -a sectnums index.adoc
```
- 进入./markup-out/目录下执行以下命令生成 PDF 文件：
```
asciidoctor-pdf index.adoc
```


