## 平台简介

开物供应链服务平台。

* 采用前后端分离的模式，微服务版本。
* 后端采用Spring Boot、Spring Cloud & Alibaba。
* 注册中心、配置中心选型Nacos，权限认证使用Redis。
* 流量控制框架选型Sentinel，分布式事务选型Seata。
* 服务之间调用支持openfeign和dubbo。
* 服务调用链路使用ZipKin，分布式任务调度quartz。
* 多语言微服务异构使用sidecar，消息驱动服务使用stream。
*

## 架构图

![framework.png](framework.png)

## 技术栈

| 功能          | 本框架                                                                                                     |
|-------------|---------------------------------------------------------------------------------------------------------|
| 前端项目        | 基于vue3 + Element UI                                                                                     
| *后端项目结构     | 采用插件化 + 扩展包形式 结构解耦 易于扩展                                                                                 |
| *后端代码风格     | 严格遵守Alibaba规范与项目统一配置的代码格式化                                                                              |
| *分布式注册/配置中心 | 采用 Alibaba Nacos 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                           |
| *服务网关       | 采用 SpringCloud Gateway 框架扩展了多种功能例如:内网鉴权、请求体缓存、跨域配置、请求响应日志等                                              |
| *负载均衡       | 采用 SpringCloud Loadbalancer 扩展支持了开发团队路由 便于多团队开发调试                                                       |
| *RPC远程调用    | 采用 全新 Apache Dubbo 3.X + OpenFeign                                                                      |
| *分布式限流熔断    | 采用 Alibaba Sentinel 源码集成便于调试扩展与二次开发 框架还为其增加了各种监控                                                        |
| *分布式事务      | 采用 Alibaba Seata 源码集成对接了Nacos与各种监控 简化了搭建部署流程                                                            |                                                                        |
| 权限认证        | 采用 Sa-Token、Jwt 静态使用功能齐全 低耦合 高扩展                                                                        |
| 权限注解        | 采用 Sa-Token 支持注解 登录校验、角色校验、权限校验、二级认证校验、HttpBasic校验、忽略校验角色与权限校验支持多种条件 如 `AND` `OR` 或 `权限 OR 角色` 等复杂表达式   |
| *关系数据库      | 使用 MySQL                                                                                                |                                    
| *缓存数据库      | 支持 Redis 5-7 支持大部分新功能特性 如 分布式限流、分布式队列                                                                   |                                      
| *Redis客户端   | 采用 Redisson Redis官方推荐 基于Netty的客户端工具支持Redis 90%以上的命令 底层优化规避很多不正确的用法 例如: keys被转换为scan支持单机、哨兵、单主集群、多主集群等模式 |                       |
| *ORM框架      | 采用 Mybatis-Plus 基于对象几乎不用写SQL全java操作 功能强大插件众多例如多租户插件 分页插件 乐观锁插件等等                                        |
| *数据分页       | 采用 Mybatis-Plus 分页插件框架对其进行了扩展 对象化分页对象 支持多种方式传参 支持前端多排序 复杂排序                                             |
| 数据权限        | 采用 Mybatis-Plus 插件 自行分析拼接SQL 无感式过滤只需为Mapper设置好注解条件 支持多种自定义 不限于部门角色                                      |
| *数据脱敏       | 采用 注解 + jackson 序列化期间脱敏 支持不同模块不同的脱敏条件支持多种策略 如身份证、手机号、地址、邮箱、银行卡等 可自行扩展                                   |
| 数据加解密       | 采用 注解 + mybatis 拦截器 对存取数据期间自动加解密支持多种策略 如BASE64、AES、RSA、SM2、SM4等                                         |         |
| *多数据源框架     | 采用 dynamic-datasource 支持世面大部分数据库通过yml配置即可动态管理异构不同种类的数据库 也可通过前端页面添加数据源支持spel表达式从请求头参数等条件切换数据源            |
| *多数据源事务     | 采用 dynamic-datasource 支持多数据源不同种类的数据库事务回滚                                                                |
| 数据库连接池      | 采用 HikariCP Spring官方内置连接池 配置简单 以性能与稳定性闻名天下/Druid                                                        |
| *数据库主键      | 采用 雪花ID 基于时间戳的 有序增长 唯一ID 再也不用为分库分表 数据合并主键冲突重复而发愁                                                        |
| 服务端与前端消息通信  | 援用现有mqtt                                                                                                |
| *序列化        | 采用 Jackson Spring官方内置序列化 靠谱!!!                                                                          |
| *分布式任务调度    | 采用 Xxl-Job 天生支持分布式 统一的管理中心                                                                              |
| 分布式日志中心     | 采用 ELK 业界成熟解决方案 实时收集所有服务的运行日志 快速发现定位问题                                                                  |
| 分布式搜索引擎     | 采用 ElasticSearch以 Mybatis-Plus 方式操作 ElasticSearch                                                       |
| *分布式消息队列    | 采用 SpringCloud-Stream + RabbitMQ                                                                        |
| *文件存储       | 采用 Minio 分布式文件存储 天生支持多机、多硬盘、多分片、多副本存储支持权限管理 安全可靠 文件可加密存储(采用的aliyun-oss)                                 |
| *短信         | 使用 spring-cloud-alicloud-sms                                                                            |
| 短链接         | 购买现成产品                                                                                                  |
| *接口文档       | 沿用现有接口文档系统                                                                                              |
| 校验框架        | 采用 Validation 支持注解与工具类校验 注解支持国际化                                                                        |
| *Excel框架    | 采用 Alibaba EasyExcel 基于插件化框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等                                          |
| *工具类框架      | 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码                                             |
| 服务监控框架      | 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制实时监控服务状态 框架还为其扩展了在线日志查看监控                               |
| 全方位监控报警     | 采用 Prometheus、Grafana 多样化采集 多模板大屏展示 实时报警监控 提供详细的搭建文档                                                    |
| 链路追踪        | 采用 Apache SkyWalking 还在为请求不知道去哪了 到哪出了问题而烦恼吗用了它即可实时查看请求经过的每一处每一个节点                                       |
| 部署方式        | 支持 Docker 编排 一键搭建所有环境 让开发人员从此不再为搭建环境而烦恼                                                                 |
| 国际化         | 基于请求头动态返回不同语种的文本内容 开发难度低 有对应的工具类 支持大部分注解内容国际化                                                           |

## 系统模块

~~~
sckw-service-platform     
├── sckw-gateway         				// 网关服务 [10010]
├── sckw-auth            				// 登录认证中心 [10160]
├── sckw-modules                                // 业务模块
│       └── sckw-system                         // 系统基础服务模块 [10030]
│       └── sckw-message                        // 消息服务 [10040]
│       └── sckw-file                           // 文件服务 [10050]
│       └── sckw-manage                         // 企业管理服务 [10060]
│       └── sckw-product                        // 产品服务 [10070]
│       └── sckw-fleet                          // 车队服务 [10080]
│       └── sckw-order                          // 订单服务 [10090]
│       └── sckw-transport                      // 运输服务 [10100]
│       └── sckw-contract                       // 合同服务 [10110]
│       └── sckw-payment                        // 支付服务 [10120]
│       └── sckw-operation                      // 运营服务 [10130]
│       └── sckw-report                         // 报表服务 [10140]
│       └── sckw-task                           // 定时任务服务 [10150]
│       └── sckw-xxx                            // xxxx服务 [10040]
├── sckw-modules-api                    // 接口模块
│       └── sckw-modules-bom                    // modules依赖项
│       └── sckw-message-api                    // 消息服务接口
│       └── sckw-system-api                     // 系统基础服务接口
│       └── sckw-file-api                       // 系统文件服务接口
├── sckw-common          				// 通用模块
│       └── sckw-common-bom                     // common依赖项
│       └── sckw-common-core                    // 核心模块
│       └── sckw-common-datasource              // 多数据源
│       └── sckw-common-log                     // 日志记录
│       └── sckw-common-redis                   // 缓存服务
│       └── sckw-common-remote                  // 资源包
│       └── sckw-common-sidecar                 // 多语言微服务异构
│       └── sckw-common-stream                  // 消息驱动
│       └── sckw-common-mongo                   // mongodb
│       └── sckw-common-xxljob                  // 任务调度
│       └── sckw-common-excel                   // excel导入导出
│       └── sckw-common-sentinel                // 分布式限流熔断
│       └── sckw-common-seata                   // 分布式事务
~~~

## 运行配置

Run/Debug Configurations->Modify options->Add VM options->--add-opens java.base/java.lang=ALL-UNNAMED --add-opens
java.base/java.lang.reflect=ALL-UNNAMED

## 数据库说明

| 字段名             | 说明       | 表                        | 说明                   |
|-----------------|----------|--------------------------|----------------------|
| l_order_id      | 物流订单id   | kwt_logistics_order.id   ||
| l_order_no      | 物流订单编号   | kwt_logistics_order      ||
| t_order_id      | 交易订单id   | kwo_trade_order.id       ||
| t_order_no      | 交易订单编号   | kwo_trade_order          ||
| w_order_id      | 车辆运单id   | kwt_waybill_order.id     ||
| w_order_no      | 车辆运单编号   | kwt_waybill_order        ||
| l_ledger_id     | 物流订单对账id | kwp_ledger_logistics     | 字段名首字母l为logistics的缩写 |
| t_ledger_id     | 交易订单对账id | kwp_ledger_trade         | 字段名首字母t为trade的缩写     |
| l_settlement_id | 物流结算单id  | kwp_settlement_logistics ||
| sl_order_no     | 物流结算单编号  | kwp_settlement_logistics ||
| t_settlement_id | 交易结算单id  | kwp_settlement_trade     ||
| st_order_no     | 交易结算单编号  | kwp_settlement_trade     ||
| w_order_no      | 车辆运单编号   | kwt_waybill_order        ||
| user_id         | 用户id     | kws_user.id              ||
| ent_id          | 企业客户id   | kws_enterprise.id        ||
| goods_id        | 商品id     | kwp_goods.id             ||
| sku_id          | 商品skuId  | kwp_goods_sku.id         ||
| driver_id       | 司机id     | kwf_driver.id            ||
| driver_no       | 司机驾驶证号   | kwf_driver_license       ||
| fleet_id        | 车队id     | kwf_fleet.id             ||
| msg_id          | 消息id     | kwm_message.id           ||
| project_id      | 项目id     | kwo_project.id           ||

## 数据库常用字段

| 字段名        | 字段说明             |
|------------|------------------|
| phone      | 手机号              |
| name       | 名称               |
| type       | 类型               |
| code       | 代码               |
| category   | 分类               |
| title      | 标题               |
| content    | 内容               |
| address    | 地址               |
| contacts   | 联系人姓名            |
| path       | 路径               |
| url        | 地址               |
| image      | 图片地址             |
| images     | 多张图片地址,使用英文逗号做分隔 |
| remark     | 备注               |
| start_time | 开始时间             |
| end_time   | 结束时间             |
| idcard     | 身份证号码            |
| price      | 价格               |
| unit       | 单位               |
| price      | 价格               |
| lat        | 维度               |
| lng        | 经度               |
| status     | 状态               |