文章目录
项目结构介绍
后端项目
├─file
│ └─data
│ ├─客流量数据
│ └─随机选择员工
├─shift-scheduling-calculate //算法模块
│ ├─src
│ └─main
│ └─java
│ └─com
│ └─wskh
│ ├─algo
│ │ ├─personnel_scheduling
│ │ │ └─others
│ │ └─shift_generation
│ │ └─heu
│ ├─enums
│ ├─output
│ └─utils
├─shift-scheduling-calculate-service //算法服务模块
│ ├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─dam
│ │ │ ├─aop
│ │ │ ├─component
│ │ │ ├─config
│ │ │ │ ├─cache
│ │ │ │ ├─feign
│ │ │ │ ├─sentinel
│ │ │ │ ├─thread
│ │ │ │ └─webSocket
│ │ │ ├─constant
│ │ │ ├─controller
│ │ │ ├─dao
│ │ │ ├─dto
│ │ │ ├─enums
│ │ │ ├─feign
│ │ │ ├─service
│ │ │ │ └─impl
│ │ │ └─utils
│ │ └─resources
│ │ └─mapper
│ └─test
│ └─java
├─sss-common //存放工具类、注解、常量类、全局异常、各个模块的实体类
│ ├─src
│ └─main
│ └─java
│ └─com
│ └─dam
│ ├─annotation //注解
│ ├─config
│ │ └─Mybatis // mybatis plus注解
│ ├─constant // 常量
│ ├─exception // 异常
│ ├─model
│ │ ├─dto // 服务间传输数据类
│ │ │ ├─scheduling_calculate
│ │ │ ├─scheduling_calculate_service
│ │ │ └─third_party
│ │ ├─entity // 实体类
│ │ │ ├─enterprise
│ │ │ ├─quartz
│ │ │ ├─shiftScheduling
│ │ │ └─system
│ │ │ └─monitor
│ │ ├─enums // 枚举
│ │ │ ├─log
│ │ │ ├─quartz
│ │ │ └─system
│ │ ├─exception // 异常
│ │ ├─result // 结果类封装
│ │ └─vo // 封装返回给前端的数据
│ │ ├─enterprise
│ │ ├─scheduling_calculate_service
│ │ ├─shiftScheduling
│ │ │ └─applet
│ │ ├─statistics
│ │ │ ├─enterpriseManager
│ │ │ ├─storeManager
│ │ │ └─systemManager
│ │ └─system
│ ├─utils // 工具包
│ │ ├─clone
│ │ ├─date
│ │ ├─http
│ │ ├─ip
│ │ ├─mail
│ │ ├─password
│ │ └─username
│ └─xss
├─sss-enterprise // 企业数据管理模块
│ ├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─dam
│ │ │ ├─aop
│ │ │ ├─config
│ │ │ │ ├─druid
│ │ │ │ ├─feign
│ │ │ │ ├─quartz
│ │ │ │ ├─rabbitMq
│ │ │ │ ├─redisson
│ │ │ │ └─thread
│ │ │ ├─controller
│ │ │ ├─custom
│ │ │ │ └─quartz // 定义定时任务要做什么
│ │ │ ├─dao
│ │ │ ├─dto
│ │ │ ├─feign
│ │ │ ├─service
│ │ │ │ └─impl
│ │ │ │ └─security
│ │ │ └─utils
│ │ │ └─spring
│ │ └─resources
│ │ ├─mapper
│ │ └─src
│ │ └─views
│ │ └─modules
│ │ └─dam
│ └─test
│ └─java
├─sss-gateway // 网关模块
│ ├─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─dam
│ │ └─config
│ └─resources
├─sss-security // spring security
│ ├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─dam
│ │ │ ├─config
│ │ │ ├─constant
│ │ │ ├─custom
│ │ │ ├─filter
│ │ │ ├─service
│ │ │ │ └─impl
│ │ │ └─utils
│ │ └─resources
│ └─test
│ └─java
├─sss-system // 系统模块(用户、菜单、角色管理,登录日志、操作日志)
│ ├─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─dam
│ │ ├─config
│ │ │ ├─feign
│ │ │ ├─mybatis
│ │ │ ├─register
│ │ │ └─thread
│ │ ├─dao
│ │ ├─exception
│ │ ├─feign
│ │ ├─service
│ │ │ └─impl
│ │ │ └─security
│ │ └─utils
│ │ ├─user_data_gererate
│ │ │ └─name
│ │ └─vo
│ └─resources
│ └─mapper
├─sss-system-server // 系统服务模块
│ ├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─dam
│ │ │ ├─aop
│ │ │ ├─config
│ │ │ │ ├─feign
│ │ │ │ └─rabbitMq
│ │ │ └─controller
│ │ │ └─monitor
│ │ └─resources
│ └─test
│ └─java
├─sss-third-party // 第三方服务(oss、微信登录、邮件发送)
│ ├─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─dam
│ │ ├─aop
│ │ ├─config
│ │ │ ├─feign
│ │ │ ├─mail
│ │ │ ├─rabbitMq
│ │ │ ├─swagger
│ │ │ └─wechatLogin
│ │ ├─controller
│ │ ├─feign
│ │ ├─listener
│ │ └─service
│ │ └─impl
│ └─resources
会不会有小伙伴好奇上面的文件结构是怎么整理出来的?其实非常简单,直接进入cmd使用tree命令就行
开发环境介绍
开发环境 | 版本 | 作用 |
---|---|---|
jdk | 1.8.0_361 | |
maven | 3.6.1 | |
mysql | 8.0.27 | |
nacos | 2.1.1 | |
redis | 7.0.5 | |
rabbitMq | 3.9.11 | |
docker | 23.0.4 | 我用来运行rabbitMq容器,同样也可以运行nacos、redis容器,怎么方便怎么来就行,有的软件用宝塔面板直接安装也非常方便了 |
项目启动
环境准备
准备好上面提到的所有环境,启动Nacos、Redis、RabbitMQ
数据库准备
创建数据库
创建数据库的时候,字符集选择 utf8mb4,排序规则留空即可,如下图
执行sql
如果没有安装数据库可视化软件,可以使用命令行的方式来执行sql,操作可以参考博客命令行导入sql
准备工作
install部分包到本地maven仓库
刷新依赖
项目启动
项目一开始只能以微服务方式启动,后面有读者反馈说服务器部署成本太高,因此我开发了一个聚合服务,将其他服务的功能聚合到一个模块中。下面两种方式只需要选择一种方式进行启动即可:
- 微服务方式启动
- 聚合方式启动
微服务方式启动
注意
开发的时候需要设置相应的环境,为了隔离我的环境和你们的环境,我在配置环境后面加上了-dam的后缀,active:dam表示启动项目的时候所激活的环境,但是为了保护我的服务器,我没有将带dam后缀的配置文件上传,所以需要麻烦你们在启动项目的时候激活dev环境。
后面项目上线的时候,需要将项目打包部署到服务器中,这时候使用的就是生产环境prod了,打包的时候不用修改active,因为运行Jar包的时候可以指定运行环境,如
java -jar sss-third-party-0.0.1-SNAPSHOT.jar --server.port=8160 --spring.profiles.active=prod
第三方服务
第三方服务模块主要用来集成第三方提供的服务,如阿里云的OSS对象存储服务、邮件发送服务、微信登录服务,后面如果需要引入其他的第三方服务,如短信服务、人脸识别服务。
-
有的朋友没有开通阿里云OSS,没有相关秘钥,可以不启动该服务,不启动该服务,网站只是无法修改头像和上传logo,不会影响其他操作(其实开通一下也不难,随便找个教程看看就行,不过注意,自己的OSS桶名不要泄露出去,不然可能被不法分子刷流量,钱包就空了)
-
使用邮箱服务需要开头邮件发送功能,如果是使用QQ邮箱,可以参考SpringBoot整合邮件发送服务进行开通
网关模块
网关模块主要用来做请求转发、负载均衡,后面还可以新增其他功能,如何统一接口限流、ip禁用功能、灰色发布、统一业务处理等功能。
以微服务方式启动的话,需要修改配置文件,来使用微服务的相关配置
系统模块
该模块主要用来做系统的登录验证、权限控制,通过为角色分配操作菜单、操作功能,给用户分配角色,实现对账号的权限控制。
企业数据管理模块
企业数据模块主要用来管理企业信息、门店信息、门店的规则管理……
还有这个
算法模块
算法模块主要提供排班计算、排班结果存储、排班月视图、周视图查看等服务。
聚合方式启动
聚合方式启动只需要启动两个服务
注意,以聚合方式启动的话,需要修改网关服务的配置文件,来使用聚合服务的相关配置
在启动聚合服务之前,请确保如下配置文件的Mysql、Redis等相关账号密码都修改成你的。很多朋友没有开启自己的阿里云OSS,启动聚合服务要求必须配置OSS、Mail相关信息。
聚合服务的开发可以参考 智能排班系统 【聚合服务开发】
系统账号
导入项目提供的sql之后,数据库里面内置了一些账号密码
- 系统管理员:admin 123456
- 企业管理员:one 123456
- 门店管理员:two 123456(three、four、five往上都是门店管理员的用户名,密码都是123456)