Compare commits

...

19 Commits

Author SHA1 Message Date
yovinchen d47d5f70c7 修改为服务器部署,添加IDEA配置文件 2024-02-20 17:03:33 +08:00
yovinchen 4e0c367ba5 更新文档 2024-02-20 17:03:33 +08:00
yovinchen 559022f558 完善前端后台部署 2024-02-20 17:03:33 +08:00
yovinchen ae1b46ada0 完善表结构 2024-02-20 17:03:33 +08:00
yovinchen 9da453fa54 开发订单查询 2024-02-20 17:03:33 +08:00
yovinchen 75963c02db 开发订单查询 2024-02-20 17:03:33 +08:00
yovinchen b16157a9f9 编写文档、整理需求 2024-02-20 17:03:33 +08:00
yovinchen f0c9941478 修正提交分支错误 2024-02-20 17:03:33 +08:00
yovinchen 90a4284707 修改细节多余注解 2024-02-20 17:03:32 +08:00
yovinchen 0d2680a3a2 修改角色管理中权限分配 新增登录日志表
修改 @Create 标识为 @since
2024-02-20 17:03:32 +08:00
yovinchen 39d46336f7 修改流水线配置 2024-01-27 23:22:18 +08:00
yovinchen 27445144e4 修正仓库 2024-01-25 14:37:04 +08:00
yovinchen 5b44f607ed 新增 pipeline 流水线文件 K8s集群部署 2024-01-25 14:24:08 +08:00
yovinchen 2638e3b26e 删除 skywalking 换成镜像打包 2024-01-24 21:22:57 +08:00
yovinchen 381b5f6731 测试 2024-01-24 17:04:48 +08:00
yovinchen 71f4be93d5 KubeSphere devops 测试 2024-01-24 15:45:27 +08:00
yovinchen efcc15ce34 KubeSphere devops 测试 2024-01-24 14:56:05 +08:00
yovinchen deadc1b7b0 Revert "阿里云云效平台 DevOps 测试"
This reverts commit 03e717c1cf.
2024-01-24 13:29:51 +08:00
yovinchen 03e717c1cf 阿里云云效平台 DevOps 测试 2024-01-24 13:10:53 +08:00
393 changed files with 1639 additions and 1312 deletions

16
.idea/GrepConsole.xml Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GrepConsole">
<option name="tailHistory">
<TailHistory>
<option name="items">
<set>
<TailItem>
<option name="path" value="$PROJECT_DIR$/README.md" />
</TailItem>
</set>
</option>
</TailHistory>
</option>
</component>
</project>

View File

@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="RemoteRepositoriesConfiguration"> <component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="central" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="central" /> <option name="id" value="central" />
<option name="name" value="Central Repository" /> <option name="name" value="Central Repository" />
@ -21,6 +26,11 @@
<option name="name" value="Nexus aliyun" /> <option name="name" value="Nexus aliyun" />
<option name="url" value="https://maven.aliyun.com/repository/public" /> <option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="alimaven" />
<option name="name" value="aliyun maven" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="spring" /> <option name="id" value="spring" />
<option name="name" value="spring" /> <option name="name" value="spring" />

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-acl" /> <module name="service-acl" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceAclApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceAclApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Acl -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Acl -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-activity" /> <module name="service-activity" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceActivityApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceActivityApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Activity -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Activity -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-cart" /> <module name="service-cart" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceCartApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceCartApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Cart -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Cart -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -2,9 +2,9 @@
<configuration default="false" name="ServiceGatewayApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true"> <configuration default="false" name="ServiceGatewayApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
<module name="service-gateway" /> <module name="service-gateway" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceGatewayApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceGatewayApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Gateway -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Gateway -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-home" /> <module name="service-home" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceHomeApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceHomeApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Home -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Home -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-order" /> <module name="service-order" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceOrderApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceOrderApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Order -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Order -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-payment" /> <module name="service-payment" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServicePaymentApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServicePaymentApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Payment -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Payment -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-product" /> <module name="service-product" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceProductApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceProductApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Product -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Product -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-search" /> <module name="service-search" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceSearchApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceSearchApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Search -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Search -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-sys" /> <module name="service-sys" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceSysApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceSysApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-Sys -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=Sys -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

View File

@ -3,9 +3,9 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-user" /> <module name="service-user" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceUserApplication" /> <option name="SPRING_BOOT_MAIN_CLASS" value="com.yovinchen.xlcs.ServiceUserApplication" />
<option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=ms::xlcs-parent-service-User -Dskywalking.collector.backend_service=10.211.55.50:11800" /> <option name="VM_PARAMETERS" value="-javaagent:$PROJECT_DIR$/../skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=User -Dskywalking.collector.backend_service=10.211.55.50:11800" />
<method v="2"> <method v="2">
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
</component> </component>

143
README.md
View File

@ -1,6 +1,91 @@
# 小鹿超市项目 # 小鹿超市项目
## 后端技术栈 ## 配置信息
### 服务器硬件配置
| 硬件 | 配置 | 数量 | 参考单价 |
|-----|----------------------------|----|------------|
| CPU | E5 2673v3 | 2 | 56 |
| 主板 | 华南金牌 x99-8D3 双路 | 1 | 580 |
| 内存 | 三星 32G DDR3 ECC 4R*4 1866L | 2 | 88 |
| 机箱 | 金河田 凌霜Pro 黑色 | 1 | 148 |
| 电源 | 鑫谷 GN650 650W 金牌 | 1 | 299 |
| 风扇 | A500 风扇 | 2 | 40 |
| 显卡 | 亮机卡 | 1 | 20 |
| 硬盘 | 三星 970EVO 512G | 1 | 600笔记本拆机 |
| 硬盘 | 希捷 紫盘 4T | 1 | 439 |
| | | 总价 | 2454 |
### 内网穿透服务器(测试服务器)
| 厂商 | 配置 | IP | 时间 | 地区 |
|-----|---------|----|---------|------|
| 腾讯云 | 2c2g3m | | 2024-06 | 北京 |
| 腾讯云 | 4c4g8m | | 2024-06 | 北京 |
| 华为云 | 2c4g1m | | 2024-02 | 北京 |
| 阿里云 | 2c2g2m | | 2024-06 | 乌兰察布 |
| 雨云 | 8c8g80m | | 2024-03 | 洛杉矶 |
| | | | | |
### 服务器参数
| 指标 | 参数 |
|-----------|------|
| 核心 | 24 |
| 线程 | 48 |
| 内存 | 64 |
| 固态硬盘 | 512G |
| 机械硬盘(未购买) | |
| | |
### 环境配置需求
| | |
|-------|-----------------|
| 底层虚拟化 | Debian12 PVE |
| 集群系统 | CentOS 8 Stream |
| | |
### 集群分配设置
| 模块 | 简称 | 核心 | 内存 | 硬盘 | 数量 | IP | 端口 |
|-------|----------|----|----|-----|----|----|----|
| 权限模块 | acl | 1 | 1 | 10 | 2 | | |
| 区域模块 | Sys | 1 | 1 | 10 | 2 | | |
| 订单模块 | order | 2 | 2 | 10 | 2 | | |
| 支付模块 | payment | 1 | 2 | 10 | 2 | | |
| 搜索模块 | search | 2 | 2 | 10 | 2 | | |
| 用户模块 | user | 1 | 1 | 10 | 2 | | |
| 商品模块 | product | 1 | 2 | 10 | 2 | | |
| 区域模块 | sys | 1 | 1 | 10 | 2 | | |
| 购物车模块 | cart | 2 | 1 | 10 | 2 | | |
| 优惠券模块 | activity | 1 | 1 | 10 | 2 | | |
| 网关 | gateway | 1 | 2 | 10 | 3 | | |
| 后台 | admin | 1 | 2 | 5 | 2 | | |
| 小程序 | user | | | | | | |
| 总数 | | 25 | 33 | 110 | 23 | | |
### 环境配置
| 模块 | 版本 | 核心 | 内存 | 硬盘 | 数量 | IP | |
|---------------|------------------------------|----|----|----|----|----|------|
| MySQL | 8.0.30 | | | | | | |
| Redis | 7.2.4 | | | | | | |
| Minio | RELEASE.2023-08-16T20-17-30Z | | | | | | |
| RabbitMQ | 3.12.12 | | | | | | |
| Elasticsearch | 7.17.7 | | | | | | |
| Kinbana | 7.17.7 | | | | | | |
| Nacos | 2.2.3 | | | | | | |
| | | | | | | | |
| SkyWalking | 9.7.0 | | | | | | |
| DevOps | | | | | | | |
| Gitea | 1.21.3 | | | | | | |
| Nexus3 | 2023-12-27T07:29 | | | | | | |
## 技术栈
### 后端技术栈
| 核心技术 | | 核心技术 |
| :----------------------------------------------------------- | | :----------------------------------------------------------- |
@ -24,7 +109,7 @@
| | | |
| | | |
## 前端技术栈 ### 前端技术栈
| 核心技术 | | 核心技术 |
| ------------------ | | ------------------ |
@ -38,9 +123,7 @@
| | | |
| | | |
### 开发工具
## 开发工具
| 开发工具 | 版本 | | 开发工具 | 版本 |
| ----------------------------- | -------------- | | ----------------------------- | -------------- |
@ -55,16 +138,22 @@
| Termius | 8.4.0 | | Termius | 8.4.0 |
| 微信开发者工具 | 1.06.2306020 | | 微信开发者工具 | 1.06.2306020 |
## 操作系统 ### 操作系统
| 开发工具 | 版本 | | 开发工具 | 版本 |
| ------------------- | ------ | |---------------------|--------|
| Mac OS Ventura | 13.6.3 | | Mac OS Ventura | 13.6.3 |
| Linux CentOS Stream | 9 |
| Linux CentOS | 7.9 | | Linux CentOS | 7.9 |
| Linux CentOS Stream | 8 |
| Linux CentOS Stream | 9 |
## 项目环境部署 ## 项目环境部署
### portainer docker 可视化
```shell
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
```
### Mysql 数据库 ### Mysql 数据库
```shell ```shell
@ -104,15 +193,33 @@ nacos/nacos-server:v2.2.3
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \ docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \ -e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-d elasticsearch:7.8.0 -d elasticsearch:7.17.7
docker exec -it elasticsearch /bin/bash docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.5/elasticsearch-analysis-ik-7.17.5.zip ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip
docker restart elasticsearch docker restart elasticsearch
docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.8.0 docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.17.7
```
其中服务器可能因为网络原因下载不下来 ik 分词器,我们下载后本地导入安装
```shell
# ik 分词器在服务器中的位置 /root/elasticsearch-analysis-ik-7.17.7.zip
# 导入 docker 中
docker cp /root/elasticsearch-analysis-ik-7.17.7.zip elasticsearch:/tmp/elasticsearch-analysis-ik-7.17.7.zip
# 进入容器
docker exec -it elasticsearch /bin/bash
# 安装
./bin/elasticsearch-plugin install file:///tmp/elasticsearch-analysis-ik-7.17.7.zip
# 退出后继续按照上述内容重启 安装 kibana
exit
``` ```
### GrayLog 日志框架 (已弃用,日志服务整合到 SkyWalking) ### GrayLog 日志框架 (已弃用,日志服务整合到 SkyWalking)
@ -194,7 +301,7 @@ services:
environment: environment:
SW_HEALTH_CHECKER: default SW_HEALTH_CHECKER: default
SW_STORAGE: elasticsearch SW_STORAGE: elasticsearch
SW_STORAGE_ES_CLUSTER_NODES: 124.70.87.134:9200 SW_STORAGE_ES_CLUSTER_NODES: 192.168.31.50:9200
JAVA_OPTS: "-Xms2048m -Xmx2048m" JAVA_OPTS: "-Xms2048m -Xmx2048m"
TZ: Asia/Shanghai TZ: Asia/Shanghai
SW_TELEMETRY: prometheus SW_TELEMETRY: prometheus
@ -219,7 +326,7 @@ services:
ports: ports:
- "8080:8080" - "8080:8080"
environment: environment:
SW_OAP_ADDRESS: http://124.70.87.134:12800 SW_OAP_ADDRESS: http://192.168.31.50:12800
SW_HEALTH_CHECKER: default SW_HEALTH_CHECKER: default
TZ: Asia/Shanghai TZ: Asia/Shanghai
healthcheck: healthcheck:
@ -229,3 +336,11 @@ services:
retries: 3 retries: 3
start_period: 60s #⾸次检测延迟时间 start_period: 60s #⾸次检测延迟时间
``` ```
## 开发需求
| | | |
|------|------|------|
| | | |
| | | |
| | | |

View File

@ -3,4 +3,4 @@ ENV = 'development'
# base api # base api
# VUE_APP_BASE_API = '/dev-api' # VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API = 'http://localhost:8200' VUE_APP_BASE_API = 'http://192.168.31.67:8200'

View File

@ -3,5 +3,5 @@ ENV = 'production'
# base api # base api
#VUE_APP_BASE_API = '/prod-api' #VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = 'http://localhost:8200' VUE_APP_BASE_API = 'http://192.168.31.67:8200'

11
xlcs-admin/Dockerfile Normal file
View File

@ -0,0 +1,11 @@
FROM nginx:latest
EXPOSE 80
WORKDIR /app
# 替换nginx配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 将第一阶段的静态文件复制到nginx中
RUN rm -rf /usr/share/nginx/html
RUN mkdir /usr/share/nginx/html
COPY ./dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]

21
xlcs-admin/nginx.conf Normal file
View File

@ -0,0 +1,21 @@
server {
listen 80;
listen [::]:80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
# 新增下面这句其他是默认nginx配置
# 解决部分前端框架的路由问题在浏览器刷新报错404
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

View File

@ -1,11 +1,10 @@
import Vue from 'vue' import Vue from 'vue'
import Router from 'vue-router' import Router from 'vue-router'
Vue.use(Router)
/* Layout */ /* Layout */
import Layout from '@/layout' import Layout from '@/layout'
Vue.use(Router)
/** /**
* Note: sub-menu only appear when route children.length >= 1 * Note: sub-menu only appear when route children.length >= 1
* Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
@ -315,20 +314,20 @@ export const constantRoutes = [
component: Layout, component: Layout,
redirect: '/user/leader/list', redirect: '/user/leader/list',
name: 'Leader', name: 'Leader',
meta: { title: '团长管理', icon: 'table' }, meta: {title: '配送员管理', icon: 'table'},
alwaysShow: true, alwaysShow: true,
children: [ children: [
{ {
path: 'leader/checkList', path: 'leader/checkList',
name: 'LeaderCheck', name: 'LeaderCheck',
component: () => import('@/views/user/leader/checkList'), component: () => import('@/views/user/leader/checkList'),
meta: { title: '团长待审核' } meta: {title: '配送员待审核'}
}, },
{ {
path: 'leader/list', path: 'leader/list',
name: 'leader', name: 'leader',
component: () => import('@/views/user/leader/list'), component: () => import('@/views/user/leader/list'),
meta: { title: '团长已审核' } meta: {title: '配送员已审核'}
} }
] ]
}, },

View File

@ -3,41 +3,41 @@
<!-- 工具条 --> <!-- 工具条 -->
<div class="tools-div"> <div class="tools-div">
<el-button type="success" icon="el-icon-plus" size="mini" @click="add()"> </el-button> <el-button icon="el-icon-plus" size="mini" type="success" @click="add()"> </el-button>
</div> </div>
<el-table <el-table
:data="sysMenuList" :data="sysMenuList"
style="width: 100%;margin-bottom: 20px;margin-top: 10px;"
row-key="id"
border
:default-expand-all="false" :default-expand-all="false"
:tree-props="{children: 'children'}" :tree-props="{children: 'children'}"
border
row-key="id"
style="width: 100%;margin-bottom: 20px;margin-top: 10px;"
> >
<el-table-column prop="name" label="菜单名称" width="200" /> <el-table-column label="菜单名称" prop="name" width="200"/>
<el-table-column prop="code" label="权限标识" width="180" /> <el-table-column label="权限标识" prop="code" width="180"/>
<el-table-column prop="createTime" label="创建时间" width="200" /> <el-table-column label="创建时间" prop="createTime" width="200"/>
<el-table-column prop="updateTime" label="修改时间" width="200" /> <el-table-column label="修改时间" prop="updateTime" width="200"/>
<el-table-column label="操作" align="center"> <el-table-column align="center" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-if="scope.row.type !== 2" v-if="scope.row.type !== 2"
type="success"
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
title="添加下级节点" title="添加下级节点"
type="success"
@click="add(scope.row)" @click="add(scope.row)"
/> />
<el-button type="primary" icon="el-icon-edit" size="mini" title="修改" @click="edit(scope.row)" /> <el-button icon="el-icon-edit" size="mini" title="修改" type="primary" @click="edit(scope.row)"/>
<el-button <el-button
type="danger" :disabled="scope.row.children.length > 0"
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="mini"
title="删除" title="删除"
:disabled="scope.row.children.length > 0" type="danger"
@click="removeDataById(scope.row.id)" @click="removeDataById(scope.row.id)"
/> />
</template> </template>
@ -47,36 +47,36 @@
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%"> <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%">
<el-form ref="dataForm" :model="sysMenu" label-width="150px" size="small" style="padding-right: 40px;"> <el-form ref="dataForm" :model="sysMenu" label-width="150px" size="small" style="padding-right: 40px;">
<el-form-item v-if="sysMenu.id === ''" label="上级部门"> <el-form-item v-if="sysMenu.id === ''" label="上级部门">
<el-input v-model="sysMenu.parentName" disabled="true" /> <el-input v-model="sysMenu.parentName" disabled="true"/>
</el-form-item> </el-form-item>
<el-form-item label="菜单类型" prop="type"> <el-form-item label="菜单类型" prop="type">
<el-radio-group v-model="sysMenu.type" :disabled="typeDisabled"> <el-radio-group v-model="sysMenu.type" :disabled="typeDisabled">
<el-radio :label="0" :disabled="type0Disabled">目录</el-radio> <el-radio :disabled="type0Disabled" :label="0">目录</el-radio>
<el-radio :label="1" :disabled="type1Disabled">菜单</el-radio> <el-radio :disabled="type1Disabled" :label="1">菜单</el-radio>
<el-radio :label="2" :disabled="type2Disabled">按钮</el-radio> <el-radio :disabled="type2Disabled" :label="2">按钮</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="菜单名称" prop="name"> <el-form-item label="菜单名称" prop="name">
<el-input v-model="sysMenu.name" /> <el-input v-model="sysMenu.name"/>
</el-form-item> </el-form-item>
<el-form-item v-if="sysMenu.type !== 0" prop="to_code"> <el-form-item v-if="sysMenu.type !== 0" prop="to_code">
<span slot="label"> <span slot="label">
<el-tooltip content="访问的组件路径,如:`system/user/index`,默认在`views`目录下" placement="top"> <el-tooltip content="访问的组件路径,如:`system/user/index`,默认在`views`目录下" placement="top">
<i class="el-icon-question" /> <i class="el-icon-question"/>
</el-tooltip> </el-tooltip>
组件路径 组件路径
</span> </span>
<el-input v-model="sysMenu.to_code" placeholder="请输入组件路径" /> <el-input v-model="sysMenu.to_code" placeholder="请输入组件路径"/>
</el-form-item> </el-form-item>
<el-form-item v-if="sysMenu.type === 2"> <el-form-item v-if="sysMenu.type === 2">
<el-input v-model="sysMenu.code" placeholder="请输入权限标识" maxlength="100" /> <el-input v-model="sysMenu.code" maxlength="100" placeholder="请输入权限标识"/>
<span slot="label"> <span slot="label">
<el-tooltip <el-tooltip
content="控制器中定义的权限字符,如:@PreAuthorize(hasAuthority('bnt.sysRole.list'))" content="控制器中定义的权限字符,如:@PreAuthorize(hasAuthority('bnt.sysRole.list'))"
placement="top" placement="top"
> >
<i class="el-icon-question" /> <i class="el-icon-question"/>
</el-tooltip> </el-tooltip>
权限字符 权限字符
</span> </span>
@ -84,8 +84,8 @@
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button size="small" icon="el-icon-refresh-right" @click="dialogVisible = false"> </el-button> <el-button icon="el-icon-refresh-right" size="small" @click="dialogVisible = false"> </el-button>
<el-button type="primary" icon="el-icon-check" size="small" @click="saveOrUpdate()"> </el-button> <el-button icon="el-icon-check" size="small" type="primary" @click="saveOrUpdate()"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>

View File

@ -3,12 +3,12 @@
<el-card class="operate-container" shadow="never"> <el-card class="operate-container" shadow="never">
<div style="margin-top: 15px"> <div style="margin-top: 15px">
<el-form :inline="true" size="small" label-width="140px"> <el-form :inline="true" label-width="140px" size="small">
<el-form-item label="输入搜索:"> <el-form-item label="输入搜索:">
<el-input v-model="tempSearchObj.roleName" style="width: 203px" placeholder="角色名称" /> <el-input v-model="tempSearchObj.roleName" placeholder="角色名称" style="width: 203px"/>
</el-form-item> </el-form-item>
<el-button type="primary" icon="el-icon-search" @click="search()">查询</el-button> <el-button icon="el-icon-search" type="primary" @click="search()">查询</el-button>
<el-button type="default" @click="resetSearch()">清空</el-button> <el-button type="default" @click="resetSearch()">清空</el-button>
</el-form> </el-form>
</div> </div>
@ -16,14 +16,14 @@
<!-- 工具条 --> <!-- 工具条 -->
<el-card class="operate-container" shadow="never"> <el-card class="operate-container" shadow="never">
<i class="el-icon-tickets" style="margin-top: 5px" /> <i class="el-icon-tickets" style="margin-top: 5px"/>
<span style="margin-top: 5px">数据列表</span> <span style="margin-top: 5px">数据列表</span>
<el-button class="btn-add" size="mini" @click="addRole">添加</el-button> <el-button class="btn-add" size="mini" @click="addRole">添加</el-button>
<el-button <el-button
:disabled="selectedRoles.length === 0"
class="btn-add" class="btn-add"
size="mini" size="mini"
:disabled="selectedRoles.length === 0"
style="margin: 0 10px;" style="margin: 0 10px;"
@click="removeRoles()" @click="removeRoles()"
>批量删除 >批量删除
@ -32,9 +32,9 @@
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
:data="roles"
border border
stripe stripe
:data="roles"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
@ -44,20 +44,20 @@
/> />
<el-table-column <el-table-column
type="index"
label="序号"
width="100"
align="center" align="center"
label="序号"
type="index"
width="100"
/> />
<el-table-column label="角色名称" width="500" align="center"> <el-table-column align="center" label="角色名称" width="500">
<template slot-scope="{row}"> <template slot-scope="{row}">
<template v-if="row.edit"> <template v-if="row.edit">
<el-input v-model="row.roleName" class="edit-input" size="small" /> <el-input v-model="row.roleName" class="edit-input" size="small"/>
<el-button <el-button
class="cancel-btn" class="cancel-btn"
size="small"
icon="el-icon-refresh" icon="el-icon-refresh"
size="small"
type="warning" type="warning"
@click="cancelEdit(row)" @click="cancelEdit(row)"
> >
@ -68,37 +68,37 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center"> <el-table-column align="center" label="操作">
<template slot-scope="{row}"> <template slot-scope="{row}">
<HintButton <HintButton
size="mini"
type="info"
icon="el-icon-info" icon="el-icon-info"
size="mini"
title="分配权限" title="分配权限"
type="info"
@click="$router.push(`/acl/role/auth/${row.id}?roleName=${row.roleName}`)" @click="$router.push(`/acl/role/auth/${row.id}?roleName=${row.roleName}`)"
/> />
<HintButton <HintButton
v-if="row.edit" v-if="row.edit"
size="mini"
type="primary"
icon="el-icon-check" icon="el-icon-check"
size="mini"
title="确定" title="确定"
type="primary"
@click="updateRole(row)" @click="updateRole(row)"
/> />
<HintButton <HintButton
v-if="!row.edit" v-if="!row.edit"
size="mini"
type="primary"
icon="el-icon-edit" icon="el-icon-edit"
size="mini"
title="修改角色" title="修改角色"
type="primary"
@click="row.edit= true" @click="row.edit= true"
/> />
<HintButton <HintButton
size="mini"
type="danger"
icon="el-icon-delete" icon="el-icon-delete"
size="mini"
title="删除角色" title="删除角色"
type="danger"
@click="removeRole(row)" @click="removeRole(row)"
/> />
</template> </template>
@ -108,11 +108,11 @@
<!-- 分页组件 --> <!-- 分页组件 -->
<el-pagination <el-pagination
:current-page="page" :current-page="page"
:total="total"
:page-size="limit" :page-size="limit"
:page-sizes="[5, 10, 20]" :page-sizes="[5, 10, 20]"
style="padding: 10px;" :total="total"
layout="prev, pager, next, jumper, ->, sizes, total" layout="prev, pager, next, jumper, ->, sizes, total"
style="padding: 10px;"
@current-change="getRoles" @current-change="getRoles"
@size-change="handleSizeChange" @size-change="handleSizeChange"
/> />
@ -161,7 +161,7 @@ export default {
更新角色 更新角色
*/ */
updateRole(role) { updateRole(role) {
this.$API.role.updateById({ id: role.id, roleName: role.roleName }) this.$API.role.updateById({id: role.id, roleName: role.roleName})
.then(result => { .then(result => {
this.$message.success(result.message || '更新角色成功!') this.$message.success(result.message || '更新角色成功!')
this.getRoles(this.page) this.getRoles(this.page)
@ -184,8 +184,8 @@ export default {
this.$prompt('请输入新名称', '添加角色', { this.$prompt('请输入新名称', '添加角色', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消' cancelButtonText: '取消'
}).then(({ value }) => { }).then(({value}) => {
this.$API.role.save({ roleName: value }).then(result => { this.$API.role.save({roleName: value}).then(result => {
this.$message.success(result.message || '添加角色成功') this.$message.success(result.message || '添加角色成功')
this.getRoles() this.getRoles()
}) })
@ -200,10 +200,10 @@ export default {
getRoles(page = 1) { getRoles(page = 1) {
this.page = page this.page = page
this.listLoading = true this.listLoading = true
const { limit, searchObj } = this const {limit, searchObj} = this
this.$API.role.getPageList(page, limit, searchObj).then( this.$API.role.getPageList(page, limit, searchObj).then(
result => { result => {
const { records, total } = result.data const {records, total} = result.data
this.roles = records.map(item => { this.roles = records.map(item => {
item.edit = false // item.edit = false //
item.originRoleName = item.roleName // , item.originRoleName = item.roleName // ,
@ -220,7 +220,7 @@ export default {
根据搜索条件进行搜索 根据搜索条件进行搜索
*/ */
search() { search() {
this.searchObj = { ...this.tempSearchObj } this.searchObj = {...this.tempSearchObj}
this.getRoles() this.getRoles()
}, },
@ -240,10 +240,10 @@ export default {
/* /*
删除指定的角色 删除指定的角色
*/ */
removeRole({ id, roleName }) { removeRole({id, roleName}) {
this.$confirm(`确定删除 '${roleName}' 吗?`, '提示', { this.$confirm(`确定删除 '${roleName}' 吗?`, '提示', {
type: 'warning' type: 'warning'
}).then(async() => { }).then(async () => {
const result = await this.$API.role.removeById(id) const result = await this.$API.role.removeById(id)
this.getRoles(this.roles.length === 1 ? this.page - 1 : this.page) this.getRoles(this.roles.length === 1 ? this.page - 1 : this.page)
this.$message.success(result.message || '删除成功!') this.$message.success(result.message || '删除成功!')
@ -265,7 +265,7 @@ export default {
removeRoles() { removeRoles() {
this.$confirm('此操作将永久删除该记录, 是否继续?', '提示', { this.$confirm('此操作将永久删除该记录, 是否继续?', '提示', {
type: 'warning' type: 'warning'
}).then(async() => { }).then(async () => {
const ids = this.selectedRoles.map(role => role.id) const ids = this.selectedRoles.map(role => role.id)
const result = await this.$API.role.removeRoles(ids) const result = await this.$API.role.removeRoles(ids)
this.getRoles() this.getRoles()

View File

@ -1,14 +1,15 @@
<template> <template>
<div> <div>
<el-input disabled :value="$route.query.roleName" /> <el-input :value="$route.query.roleName" disabled/>
<el-tree <el-tree
ref="tree" ref="tree"
style="margin: 20px 0"
:data="allPermissions" :data="allPermissions"
:default-checked-keys="assignPermission"
:props="defaultProps"
default-expand-all
node-key="id" node-key="id"
show-checkbox show-checkbox
default-expand-all style="margin: 20px 0"
:props="defaultProps"
/> />
<el-button :loading="loading" type="primary" @click="save">保存</el-button> <el-button :loading="loading" type="primary" @click="save">保存</el-button>
<el-button @click="$router.replace({name: 'Role'})">取消</el-button> <el-button @click="$router.replace({name: 'Role'})">取消</el-button>
@ -48,8 +49,11 @@ export default {
*/ */
getPermissions(roleId) { getPermissions(roleId) {
this.$API.permission.toAssign(roleId).then(result => { this.$API.permission.toAssign(roleId).then(result => {
const allPermissions = result.data const allPermissions = result.data.allPermissionList
this.allPermissions = allPermissions this.allPermissions = allPermissions
const assignPermission = result.data.assignPermission
this.assignPermission = assignPermission
const checkedIds = this.getCheckedIds(allPermissions) const checkedIds = this.getCheckedIds(allPermissions)
// console.log('getPermissions() checkedIds', checkedIds) // console.log('getPermissions() checkedIds', checkedIds)
this.$refs.tree.setCheckedKeys(checkedIds) this.$refs.tree.setCheckedKeys(checkedIds)

View File

@ -10,7 +10,7 @@
> >
<div class="title-container"> <div class="title-container">
<h3 class="title">购物商城管理端</h3> <h3 class="title">小鹿超市管理端</h3>
</div> </div>
<el-form-item prop="username"> <el-form-item prop="username">

View File

@ -52,9 +52,9 @@
align="center" align="center"
/> />
<el-table-column prop="leaderName" label="团长" width="90" /> <el-table-column label="配送员" prop="leaderName" width="90"/>
<el-table-column prop="leaderPhone" label="团长电话" width="100" /> <el-table-column label="配送员电话" prop="leaderPhone" width="100"/>
<el-table-column prop="takeName" label="提货点" width="130" /> <el-table-column label="配送点" prop="takeName" width="130"/>
<el-table-column prop="skuNum" label="商品数量" width="80" /> <el-table-column prop="skuNum" label="商品数量" width="80" />
<el-table-column prop="driverName" label="司机" width="90" /> <el-table-column prop="driverName" label="司机" width="90" />
<el-table-column prop="driverPhone" label="司机电话" width="100" /> <el-table-column prop="driverPhone" label="司机电话" width="100" />

View File

@ -4,7 +4,7 @@
<el-card class="operate-container" shadow="never"> <el-card class="operate-container" shadow="never">
<el-form inline> <el-form inline>
<el-form-item label="订单号"> <el-form-item label="订单号">
<el-input v-model="searchObj.outTradeNo" type="text" width="100" placeholder="订单号" clearable /> <el-input v-model="searchObj.orderNo" clearable placeholder="订单号" type="text" width="100"/>
</el-form-item> </el-form-item>
<el-form-item label="订单状态"> <el-form-item label="订单状态">
@ -89,10 +89,10 @@
<p>电话{{ scope.row.receiverPhone }}</p> <p>电话{{ scope.row.receiverPhone }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="团长信息"> <el-table-column label="配送员信息">
<template slot-scope="scope"> <template slot-scope="scope">
<p>姓名{{ scope.row.leaderName }}</p> <p>姓名{{ scope.row.leaderName }}</p>
<p>提货{{ scope.row.takeName }}</p> <p>配送{{ scope.row.takeName }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作时间" width="200px"> <el-table-column label="操作时间" width="200px">
@ -127,7 +127,6 @@
<script> <script>
import api from '@/api/order/orderInfo' import api from '@/api/order/orderInfo'
import leaderApi from '@/api/user/leader'
import wareApi from '@/api/sys/ware' import wareApi from '@/api/sys/ware'
export default { export default {

View File

@ -34,9 +34,9 @@
<td width="35%">{{ orderInfo.receiverPhone }}</td> <td width="35%">{{ orderInfo.receiverPhone }}</td>
</tr> </tr>
<tr> <tr>
<th>团长名称</th> <th>配送员名称</th>
<td>{{ orderInfo.leaderName }}</td> <td>{{ orderInfo.leaderName }}</td>
<th>提货</th> <th>配送</th>
<td>{{ orderInfo.takeName }}</td> <td>{{ orderInfo.takeName }}</td>
</tr> </tr>
<tr> <tr>

View File

@ -35,7 +35,7 @@
<el-table-column prop="name" label="姓名" width="100px" /> <el-table-column prop="name" label="姓名" width="100px" />
<el-table-column prop="phone" label="手机号码" width="100px" /> <el-table-column prop="phone" label="手机号码" width="100px" />
<el-table-column prop="takeName" label="提货点名称" /> <el-table-column label="配送点名称" prop="takeName"/>
<el-table-column prop="param.provinceName" label="省" width="70px" /> <el-table-column prop="param.provinceName" label="省" width="70px" />
<el-table-column prop="param.cityName" label="城市" width="70px" /> <el-table-column prop="param.cityName" label="城市" width="70px" />
<el-table-column prop="param.districtName" label="区/县" width="70px" /> <el-table-column prop="param.districtName" label="区/县" width="70px" />
@ -68,7 +68,7 @@
<el-dialog title="添加/修改" :visible.sync="dialogVisible" width="60%"> <el-dialog title="添加/修改" :visible.sync="dialogVisible" width="60%">
<el-form ref="flashPromotionForm" label-width="150px" size="small" style="padding-right: 40px;"> <el-form ref="flashPromotionForm" label-width="150px" size="small" style="padding-right: 40px;">
<el-form-item label="团长名称"> <el-form-item label="配送员名称">
<el-input v-model="leader.name" /> <el-input v-model="leader.name" />
</el-form-item> </el-form-item>
<el-form-item label="手机号码"> <el-form-item label="手机号码">
@ -77,7 +77,7 @@
<el-form-item label="身份证"> <el-form-item label="身份证">
<el-input v-model="leader.idNo" /> <el-input v-model="leader.idNo" />
</el-form-item> </el-form-item>
<el-form-item label="提货点名称"> <el-form-item label="配送点名称">
<el-input v-model="leader.takeName" /> <el-input v-model="leader.takeName" />
</el-form-item> </el-form-item>
<el-form-item label="选择地址"> <el-form-item label="选择地址">

View File

@ -5,7 +5,7 @@
<el-card class="operate-container" shadow="never"> <el-card class="operate-container" shadow="never">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="输入搜索:"> <el-form-item label="输入搜索:">
<el-input v-model="searchObj.keyword" style="width: 203px" placeholder="关键字" /> <el-input v-model="searchObj.keyword" placeholder="关键字" style="width: 203px"/>
</el-form-item> </el-form-item>
<el-button type="primary" icon="el-icon-search" @click="fetchData()">查询</el-button> <el-button type="primary" icon="el-icon-search" @click="fetchData()">查询</el-button>
@ -32,17 +32,17 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" label="姓名" width="100px" /> <el-table-column label="姓名" prop="name" width="100px"/>
<el-table-column prop="phone" label="手机号码" width="120px" /> <el-table-column label="手机号码" prop="phone" width="120px"/>
<el-table-column prop="takeName" label="提货点名称" /> <el-table-column label="配送点名称" prop="takeName"/>
<el-table-column prop="param.regionName" label="所属区域" width="80px" /> <el-table-column label="所属区域" prop="param.regionName" width="80px"/>
<el-table-column label="状态" width="100"> <el-table-column label="状态" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<p>{{ scope.row.checkStatus === 0 ? '待审核' : scope.row.checkStatus === 1 ? '通过' : '未通过' }}</p> <p>{{ scope.row.checkStatus === 0 ? '待审核' : scope.row.checkStatus === 1 ? '通过' : '未通过' }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="checkTime" label="审核时间" width="150px" /> <el-table-column label="审核时间" prop="checkTime" width="150px"/>
<el-table-column prop="createTime" label="申请时间" width="150px" /> <el-table-column label="申请时间" prop="createTime" width="150px"/>
<el-table-column label="操作" width="200" align="center"> <el-table-column label="操作" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">

View File

@ -1,38 +0,0 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

View File

@ -13,7 +13,7 @@ import java.util.Date;
* 日期操作工具类 * 日期操作工具类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/10/12 18:04 * @since 2023/10/12 18:04
*/ */
public class DateUtil { public class DateUtil {

View File

@ -10,7 +10,7 @@ import java.util.Date;
* Package: com.yovinchen.xlcs.common.utils * Package: com.yovinchen.xlcs.common.utils
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/22 15:50 * @since 2023/9/22 15:50
*/ */
public class JwtHelper { public class JwtHelper {

View File

@ -10,7 +10,7 @@ import org.springframework.context.annotation.Configuration;
* Package: com.yovinchen.xlcs.mq.config * Package: com.yovinchen.xlcs.mq.config
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/16 23:32 * @since 2023/9/16 23:32
*/ */
@Configuration @Configuration
public class MQConfig { public class MQConfig {

View File

@ -13,7 +13,7 @@ import javax.annotation.PostConstruct;
* Package: com.yovinchen.xlcs.mq.config * Package: com.yovinchen.xlcs.mq.config
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/16 23:33 * @since 2023/9/16 23:33
*/ */
@Component @Component
public class MQProducerAckConfig implements RabbitTemplate.ReturnCallback, RabbitTemplate.ConfirmCallback { public class MQProducerAckConfig implements RabbitTemplate.ReturnCallback, RabbitTemplate.ConfirmCallback {

View File

@ -5,7 +5,7 @@ package com.yovinchen.xlcs.mq.constant;
* Package: com.yovinchen.xlcs.mq.constant * Package: com.yovinchen.xlcs.mq.constant
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/16 23:34 * @since 2023/9/16 23:34
*/ */
public class MqConst { public class MqConst {
/** /**

View File

@ -9,7 +9,7 @@ import org.springframework.stereotype.Service;
* Package: com.yovinchen.xlcs.common.service * Package: com.yovinchen.xlcs.common.service
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/16 18:12 * @since 2023/9/16 18:12
*/ */
@Service @Service
public class RabbitService { public class RabbitService {

View File

@ -27,7 +27,7 @@ import javax.servlet.http.HttpServletRequest;
* Package: com.yovinchen.xlcs.common.aspect * Package: com.yovinchen.xlcs.common.aspect
* *
* @author yovinchen * @author yovinchen
* @Create 2024/1/23 10:43 * @since 2024/1/23 10:43
*/ */
@Aspect @Aspect
@Component @Component

View File

@ -7,7 +7,7 @@ import com.yovinchen.xlcs.vo.user.UserLoginVo;
* Package: com.yovinchen.xlcs.common.auth * Package: com.yovinchen.xlcs.common.auth
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/22 17:40 * @since 2023/9/22 17:40
*/ */
//ThreadLocal工具类 //ThreadLocal工具类
public class AuthContextHolder { public class AuthContextHolder {

View File

@ -12,7 +12,7 @@ import javax.annotation.Resource;
* Package: com.yovinchen.xlcs.common.auth * Package: com.yovinchen.xlcs.common.auth
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/22 23:58 * @since 2023/9/22 23:58
*/ */
@Configuration @Configuration
public class LoginMvcConfigurerAdapter extends WebMvcConfigurationSupport { public class LoginMvcConfigurerAdapter extends WebMvcConfigurationSupport {

View File

@ -15,7 +15,7 @@ import javax.servlet.http.HttpServletResponse;
* Package: com.yovinchen.xlcs.common.auth * Package: com.yovinchen.xlcs.common.auth
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/22 23:47 * @since 2023/9/22 23:47
*/ */
public class UserLoginInterceptor implements HandlerInterceptor { public class UserLoginInterceptor implements HandlerInterceptor {

View File

@ -14,7 +14,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
* MybatisPlus配置类 * MybatisPlus配置类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 12:56 * @since 2023/9/13 12:56
*/ */
@EnableTransactionManagement @EnableTransactionManagement
@Configuration @Configuration

View File

@ -26,7 +26,7 @@ import java.time.Duration;
* Redis配置类 * Redis配置类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/22 15:55 * @since 2023/9/22 15:55
*/ */
@Configuration @Configuration

View File

@ -15,7 +15,7 @@ import org.springframework.util.StringUtils;
* Package: com.yovinchen.xlcs.common.config * Package: com.yovinchen.xlcs.common.config
* *
* @author yovinchen * @author yovinchen
* @Create 2023/10/12 16:48 * @since 2023/10/12 16:48
*/ */
@Data @Data
@Configuration @Configuration

View File

@ -22,7 +22,7 @@ import java.util.List;
* Package: com.yovinchen.xlcs.common.config * Package: com.yovinchen.xlcs.common.config
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 13:18 * @since 2023/9/13 13:18
*/ */
@Configuration @Configuration
@EnableSwagger2WebMvc @EnableSwagger2WebMvc

View File

@ -6,7 +6,7 @@ package com.yovinchen.xlcs.common.constant;
* Redis常量配置类 * Redis常量配置类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/22 15:57 * @since 2023/9/22 15:57
*/ */
public class RedisConst { public class RedisConst {

View File

@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
* 统一异常处理类 * 统一异常处理类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 13:03 * @since 2023/9/13 13:03
*/ */
@ControllerAdvice @ControllerAdvice

View File

@ -9,7 +9,7 @@ import lombok.Data;
* 自定义异常类 * 自定义异常类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 13:05 * @since 2023/9/13 13:05
*/ */
@Data @Data

View File

@ -8,7 +8,7 @@ import lombok.Data;
* 统一返回结果类 * 统一返回结果类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 13:01 * @since 2023/9/13 13:01
*/ */
@Data @Data
public class Result<T> { public class Result<T> {

View File

@ -8,7 +8,7 @@ import lombok.Getter;
* 统一返回结果状态信息类 * 统一返回结果状态信息类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 12:59 * @since 2023/9/13 12:59
*/ */
@Getter @Getter
public enum ResultCodeEnum { public enum ResultCodeEnum {

View File

@ -13,7 +13,7 @@ import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
* Package: com.yovinchen.xlcs * Package: com.yovinchen.xlcs
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 08:49 * @since 2023/9/14 08:49
*/ */
public class CodeGet { public class CodeGet {
@ -25,7 +25,7 @@ public class CodeGet {
// 2全局配置 // 2全局配置
// 全局配置 // 全局配置
GlobalConfig gc = new GlobalConfig(); GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("yovinchen-xlcs-parent/service/service-order" + "/src/main/java"); gc.setOutputDir("xlcs-parent/service/service-user" + "/src/main/java");
gc.setServiceName("%sService"); //去掉Service接口的首字母I gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setAuthor("yovinchen"); gc.setAuthor("yovinchen");
@ -34,17 +34,17 @@ public class CodeGet {
// 3数据源配置 // 3数据源配置
DataSourceConfig dsc = new DataSourceConfig(); DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://82.157.68.223:3306/shequ-order?serverTimezone=GMT%2B8&useSSL=false"); dsc.setUrl("jdbc:mysql://82.157.68.223:3306/shequ-user?serverTimezone=GMT%2B8&useSSL=false");
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("shequ-order"); dsc.setUsername("shequ-user");
dsc.setPassword("shequ-order"); dsc.setPassword("shequ-user");
dsc.setDbType(DbType.MYSQL); dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc); mpg.setDataSource(dsc);
// 4包配置 // 4包配置
PackageConfig pc = new PackageConfig(); PackageConfig pc = new PackageConfig();
pc.setParent("com.yovinchen.xlcs"); pc.setParent("com.yovinchen.xlcs");
pc.setModuleName("order"); //模块名 pc.setModuleName("user"); //模块名
pc.setController("controller"); pc.setController("controller");
pc.setService("service"); pc.setService("service");
pc.setMapper("mapper"); pc.setMapper("mapper");
@ -53,7 +53,7 @@ public class CodeGet {
// 5策略配置 // 5策略配置
StrategyConfig strategy = new StrategyConfig(); StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("cart_info", "order_info", "order_deliver", "order_item", "order_log", "order_return_apply", "order_return_reason", "order_set", "payment_info", "refund_info"); strategy.setInclude("driver", "leader", "leader_account", "leader_bank", "leader_bill", "leader_user", "region", "user_delivery", "user_login_log");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略

View File

@ -1,8 +1,8 @@
package com.yovinchen.xlcs.model.acl; package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -12,8 +12,8 @@ import lombok.Data;
* 用户 * 用户
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "用户") @ApiModel(description = "用户")

View File

@ -0,0 +1,40 @@
package com.yovinchen.xlcs.model.acl;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 后台用户登录日志表
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
@Data
@ApiModel(description = "后台用户登录日志表")
@TableName("admin_login_log")
public class AdminLoginLog extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "用户id")
@TableField("admin_id")
private Long adminId;
@ApiModelProperty(value = "IP地址")
@TableField("ip")
private String ip;
@ApiModelProperty(value = "地址")
@TableField("address")
private String address;
@ApiModelProperty(value = "浏览器登录类型")
@TableField("user_agent")
private String userAgent;
}

View File

@ -1,8 +1,8 @@
package com.yovinchen.xlcs.model.acl; package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -12,8 +12,8 @@ import lombok.Data;
* 用户角色 * 用户角色
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "用户角色") @ApiModel(description = "用户角色")

View File

@ -2,9 +2,9 @@
// //
package com.yovinchen.xlcs.model.acl; package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -16,8 +16,8 @@ import java.util.List;
* 权限 * 权限
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "权限") @ApiModel(description = "权限")

View File

@ -2,9 +2,9 @@
// //
package com.yovinchen.xlcs.model.acl; package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -14,8 +14,8 @@ import lombok.Data;
* 角色 * 角色
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "角色") @ApiModel(description = "角色")

View File

@ -2,9 +2,9 @@
// //
package com.yovinchen.xlcs.model.acl; package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -14,8 +14,8 @@ import lombok.Data;
* 角色权限 * 角色权限
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "角色权限") @ApiModel(description = "角色权限")

View File

@ -1,10 +1,10 @@
package com.yovinchen.xlcs.model.activity; package com.yovinchen.xlcs.model.activity;
import com.yovinchen.xlcs.enums.ActivityType;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.yovinchen.xlcs.enums.ActivityType;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -16,7 +16,7 @@ import java.util.Date;
* ActivityInfo * ActivityInfo
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
@ApiModel(description = "ActivityInfo") @ApiModel(description = "ActivityInfo")

View File

@ -1,9 +1,9 @@
package com.yovinchen.xlcs.model.activity; package com.yovinchen.xlcs.model.activity;
import com.yovinchen.xlcs.enums.ActivityType;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.enums.ActivityType;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -15,7 +15,7 @@ import java.math.BigDecimal;
* ActivityRule * ActivityRule
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
@ApiModel(description = "ActivityRule") @ApiModel(description = "ActivityRule")

View File

@ -1,8 +1,8 @@
package com.yovinchen.xlcs.model.activity; package com.yovinchen.xlcs.model.activity;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -12,7 +12,7 @@ import lombok.Data;
* ActivitySku * ActivitySku
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
@ApiModel(description = "ActivitySku") @ApiModel(description = "ActivitySku")

View File

@ -1,9 +1,9 @@
package com.yovinchen.xlcs.model.activity; package com.yovinchen.xlcs.model.activity;
import com.yovinchen.xlcs.enums.CouponRangeType;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.enums.CouponRangeType;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -13,7 +13,7 @@ import lombok.Data;
* CouponRange * CouponRange
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
@ApiModel(description = "CouponRange") @ApiModel(description = "CouponRange")

View File

@ -1,9 +1,9 @@
package com.yovinchen.xlcs.model.activity; package com.yovinchen.xlcs.model.activity;
import com.yovinchen.xlcs.enums.CouponStatus;
import com.yovinchen.xlcs.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yovinchen.xlcs.enums.CouponStatus;
import com.yovinchen.xlcs.model.base.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -15,7 +15,7 @@ import java.util.Date;
* CouponUse * CouponUse
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
@ApiModel(description = "优惠券领取记录表") @ApiModel(description = "优惠券领取记录表")

View File

@ -13,8 +13,8 @@ import java.io.Serializable;
* 用户查询实体 * 用户查询实体
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "用户查询实体") @ApiModel(description = "用户查询实体")

View File

@ -13,8 +13,8 @@ import java.io.Serializable;
* 角色查询实体 * 角色查询实体
* </p> * </p>
* *
* @author qy * @author yovinchen
* @since 2019-11-08 * @since 2023-09-21
*/ */
@Data @Data
@ApiModel(description = "角色查询实体") @ApiModel(description = "角色查询实体")

View File

@ -13,7 +13,7 @@ import java.util.List;
* OrderDetailActivity * OrderDetailActivity
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
public class CartInfoVo implements Serializable { public class CartInfoVo implements Serializable {

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.vo.order; package com.yovinchen.xlcs.vo.order;
import com.yovinchen.xlcs.vo.user.LeaderAddressVo;
import com.yovinchen.xlcs.model.activity.CouponInfo; import com.yovinchen.xlcs.model.activity.CouponInfo;
import com.yovinchen.xlcs.vo.user.LeaderAddressVo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -14,7 +14,7 @@ import java.util.List;
* OrderDetailActivity * OrderDetailActivity
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
public class OrderConfirmVo implements Serializable { public class OrderConfirmVo implements Serializable {

View File

@ -12,7 +12,7 @@ import java.util.List;
* OrderDetailActivity * OrderDetailActivity
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
public class OrderMqVo implements Serializable { public class OrderMqVo implements Serializable {

View File

@ -1,6 +1,5 @@
package com.yovinchen.xlcs.vo.user; package com.yovinchen.xlcs.vo.user;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -10,7 +9,7 @@ import lombok.Data;
* UserAddress * UserAddress
* </p> * </p>
* *
* @author qy * @author yovinchen
*/ */
@Data @Data
@ApiModel(description = "用户地址") @ApiModel(description = "用户地址")

View File

@ -158,5 +158,36 @@
<enabled>true</enabled> <enabled>true</enabled>
</snapshots> </snapshots>
</repository> </repository>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories> </repositories>
<!-- <repositories>-->
<!-- <repository>-->
<!-- <id>spring</id>-->
<!-- <url>https://maven.aliyun.com/repository/spring</url>-->
<!-- <releases>-->
<!-- <enabled>true</enabled>-->
<!-- </releases>-->
<!-- <snapshots>-->
<!-- <enabled>true</enabled>-->
<!-- </snapshots>-->
<!-- </repository>-->
<!-- </repositories>-->
<!-- <pluginRepositories>-->
<!-- <pluginRepository>-->
<!-- <id>alimaven</id>-->
<!-- <name>aliyun maven</name>-->
<!-- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>-->
<!-- <releases>-->
<!-- <enabled>true</enabled>-->
<!-- </releases>-->
<!-- <snapshots>-->
<!-- <enabled>false</enabled>-->
<!-- </snapshots>-->
<!-- </pluginRepository>-->
<!-- </pluginRepositories>-->
</project> </project>

View File

@ -19,7 +19,7 @@ import java.util.Map;
* Package: com.yovinchen.xlcs.client.activity * Package: com.yovinchen.xlcs.client.activity
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/26 14:10 * @since 2023/9/26 14:10
*/ */
@FeignClient(value = "service-activity") @FeignClient(value = "service-activity")
public interface ActivityFeignClient { public interface ActivityFeignClient {

View File

@ -13,7 +13,7 @@ import java.util.List;
* Package: com.yovinchen.xlcs.client.cart * Package: com.yovinchen.xlcs.client.cart
* *
* @author yovinchen * @author yovinchen
* @Create 2023/10/12 15:49 * @since 2023/10/12 15:49
*/ */
@FeignClient(value = "service-cart") @FeignClient(value = "service-cart")
public interface CartFeignClient { public interface CartFeignClient {

View File

@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.PathVariable;
* Package: com.yovinchen.xlcs.client.order * Package: com.yovinchen.xlcs.client.order
* *
* @author yovinchen * @author yovinchen
* @Create 2023/10/13 11:03 * @since 2023/10/13 11:03
*/ */
@FeignClient(value = "service-order") @FeignClient(value = "service-order")
public interface OrderFeignClient { public interface OrderFeignClient {

View File

@ -17,7 +17,7 @@ import java.util.List;
* Package: com.yovinchen.xlcs.client.product * Package: com.yovinchen.xlcs.client.product
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/16 17:45 * @since 2023/9/16 17:45
*/ */
@FeignClient(value = "service-product") @FeignClient(value = "service-product")
public interface ProductFeignClient { public interface ProductFeignClient {

View File

@ -13,7 +13,7 @@ import java.util.List;
* Package: com.yovinchen.xlcs.client.search * Package: com.yovinchen.xlcs.client.search
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/25 22:44 * @since 2023/9/25 22:44
*/ */
@FeignClient("service-search") @FeignClient("service-search")
public interface SkuFeignClient { public interface SkuFeignClient {

View File

@ -10,13 +10,13 @@ import org.springframework.web.bind.annotation.PathVariable;
* Package: com.yovinchen.xlcs.client.user * Package: com.yovinchen.xlcs.client.user
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/25 12:27 * @since 2023/9/25 12:27
*/ */
@FeignClient(value = "service-user") @FeignClient(value = "service-user")
public interface UserFeignClient { public interface UserFeignClient {
/** /**
* 提货点地址信息 * 配送点地址信息
* *
* @param userId * @param userId
* @return * @return

View File

@ -8,7 +8,7 @@ ARG WORK_PATH="/skywalking"
ENV JAR_FILE=${JAR_FILE} ENV JAR_FILE=${JAR_FILE}
ENV SW_AGENT_NAME=${APP_NAME} ENV SW_AGENT_NAME=${APP_NAME}
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES="10.211.55.50:11800" ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES="192.168.31.50:11800"
RUN rm /skywalking/agent/plugins/apm-armeria-* \ RUN rm /skywalking/agent/plugins/apm-armeria-* \
/skywalking/agent/plugins/apm-cxf-* \ /skywalking/agent/plugins/apm-cxf-* \

View File

@ -9,7 +9,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
* Package: com.yovinchen.xlcs * Package: com.yovinchen.xlcs
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/20 16:51 * @since 2023/9/20 16:51
*/ */
@SpringBootApplication @SpringBootApplication

View File

@ -12,7 +12,7 @@ import org.springframework.web.util.pattern.PathPatternParser;
* Package: com.yovinchen.xlcs.config.config * Package: com.yovinchen.xlcs.config.config
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/20 16:52 * @since 2023/9/20 16:52
*/ */
@Configuration @Configuration
public class CorsConfig { public class CorsConfig {

View File

@ -7,7 +7,7 @@ ARG WORK_PATH="/skywalking"
ENV JAR_FILE=${JAR_FILE} ENV JAR_FILE=${JAR_FILE}
ENV SW_AGENT_NAME=${APP_NAME} ENV SW_AGENT_NAME=${APP_NAME}
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES="10.211.55.50:11800" ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES="192.168.31.50:11800"
RUN rm /skywalking/agent/plugins/apm-cxf-* \ RUN rm /skywalking/agent/plugins/apm-cxf-* \
/skywalking/agent/plugins/apm-dubbo-* \ /skywalking/agent/plugins/apm-dubbo-* \

View File

@ -10,7 +10,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
* 权限管理模块启动类 * 权限管理模块启动类
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 17:38 * @since 2023/9/13 17:38
*/ */
@SpringBootApplication @SpringBootApplication
@EnableDiscoveryClient @EnableDiscoveryClient

View File

@ -1,14 +1,14 @@
package com.yovinchen.xlcs.acl.controller; package com.yovinchen.xlcs.acl.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yovinchen.xlcs.acl.service.AdminService; import com.yovinchen.xlcs.acl.service.AdminService;
import com.yovinchen.xlcs.acl.service.RoleService; import com.yovinchen.xlcs.acl.service.RoleService;
import com.yovinchen.xlcs.common.result.Result; import com.yovinchen.xlcs.common.result.Result;
import com.yovinchen.xlcs.common.utils.MD5; import com.yovinchen.xlcs.common.utils.MD5;
import com.yovinchen.xlcs.model.acl.Admin; import com.yovinchen.xlcs.model.acl.Admin;
import com.yovinchen.xlcs.vo.acl.AdminQueryVo; import com.yovinchen.xlcs.vo.acl.AdminQueryVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
@ -25,7 +25,7 @@ import java.util.Map;
* 用户管理 前端控制器 * 用户管理 前端控制器
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 10:38 * @since 2023/9/14 10:38
*/ */
@RestController @RestController
@RequestMapping("/admin/acl/user") @RequestMapping("/admin/acl/user")

View File

@ -15,7 +15,7 @@ import java.util.Map;
* Package: com.yovinchen.xlcs.acl.controller * Package: com.yovinchen.xlcs.acl.controller
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/13 18:00 * @since 2023/9/13 18:00
*/ */
@Api(tags = "登录接口") @Api(tags = "登录接口")

View File

@ -1,6 +1,7 @@
package com.yovinchen.xlcs.acl.controller; package com.yovinchen.xlcs.acl.controller;
import com.yovinchen.xlcs.acl.service.PermissionService; import com.yovinchen.xlcs.acl.service.PermissionService;
import com.yovinchen.xlcs.acl.service.RoleService;
import com.yovinchen.xlcs.common.result.Result; import com.yovinchen.xlcs.common.result.Result;
import com.yovinchen.xlcs.model.acl.Permission; import com.yovinchen.xlcs.model.acl.Permission;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* ClassName: PermissionController * ClassName: PermissionController
@ -17,17 +19,18 @@ import java.util.List;
* 菜单服务 * 菜单服务
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 14:03 * @since 2023/9/14 14:03
*/ */
@RestController @RestController
@RequestMapping("/admin/acl/permission") @RequestMapping("/admin/acl/permission")
@Api(tags = "菜单服务") @Api(tags = "菜单服务")
public class PermissionController { public class PermissionController {
@Autowired @Autowired
private PermissionService permissionService; private PermissionService permissionService;
@Autowired
private RoleService roleService;
@ApiOperation(value = "获取菜单") @ApiOperation(value = "获取菜单")
@GetMapping @GetMapping
public Result index() { public Result index() {
@ -71,4 +74,29 @@ public class PermissionController {
throw new RuntimeException("递归删除菜单异常", e); throw new RuntimeException("递归删除菜单异常", e);
} }
} }
@ApiOperation(value = "根据角色获取菜单数据")
@GetMapping("/toAssign/{roleId}")
public Result toAssign(@PathVariable Long roleId) {
Map<String, Object> roleMap = permissionService.findPermissionByRoleId(roleId);
return Result.ok(roleMap);
}
@ApiOperation(value = "根据用户分配角色")
@PostMapping("/doAssign")
public Result doAssign(@RequestParam Long roleId, @RequestParam Long[] permissionId) {
permissionService.saveRolePermissionRealtionShip(roleId, permissionId);
return Result.ok(null);
}
// @ApiOperation(value = "获取一个角色的所有权限列表")
// @GetMapping("toAssign/{id}")
// public Result toAssign(@PathVariable Long id) {
// try {
// Map<String, Object> result = permissionService.getPermissionById(id);
// return Result.ok(result);
// } catch (Exception e) {
// // 处理异常例如记录日志或者抛出自定义异常
// throw new RuntimeException("获取一个角色的所有权限列表异常", e);
// }
// }
} }

View File

@ -10,12 +10,10 @@ import com.yovinchen.xlcs.vo.acl.RoleQueryVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* ClassName: RoleController * ClassName: RoleController
@ -23,13 +21,11 @@ import java.util.Map;
* 角色管理 前端控制器 * 角色管理 前端控制器
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 09:09 * @since 2023/9/14 09:09
*/ */
@RestController @RestController
@RequestMapping("/admin/acl/role") @RequestMapping("/admin/acl/role")
@Api(tags = "角色管理") @Api(tags = "角色管理")
@Slf4j
public class RoleController { public class RoleController {
@Autowired @Autowired
@ -111,16 +107,4 @@ public class RoleController {
throw new RuntimeException("根据id列表删除角色异常", e); throw new RuntimeException("根据id列表删除角色异常", e);
} }
} }
@ApiOperation(value = "获取一个角色的所有权限列表")
@GetMapping("toAssign/{id}")
public Result toAssign(@PathVariable Long id) {
try {
Map<String, Object> result = permissionService.getPermissionById(id);
return Result.ok(result);
} catch (Exception e) {
// 处理异常例如记录日志或者抛出自定义异常
throw new RuntimeException("获取一个角色的所有权限列表异常", e);
}
}
} }

View File

@ -0,0 +1,22 @@
package com.yovinchen.xlcs.acl.controller;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 角色权限 前端控制器
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
@RestController
@RequestMapping("/admin/acl/rolePermission")
@Api(tags = "用户权限")
public class RolePermissionController {
}

View File

@ -0,0 +1,17 @@
package com.yovinchen.xlcs.acl.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.AdminLoginLog;
/**
* <p>
* 后台用户登录日志表 Mapper 接口
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
public interface AdminLoginLogMapper extends BaseMapper<AdminLoginLog> {
}

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.acl.mapper; package com.yovinchen.xlcs.acl.mapper;
import com.yovinchen.xlcs.model.acl.Admin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.Admin;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository;
* 用户管理 * 用户管理
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 10:45 * @since 2023/9/14 10:45
*/ */
@Repository @Repository
public interface AdminMapper extends BaseMapper<Admin> { public interface AdminMapper extends BaseMapper<Admin> {

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.acl.mapper; package com.yovinchen.xlcs.acl.mapper;
import com.yovinchen.xlcs.model.acl.AdminRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.AdminRole;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
@ -9,7 +9,7 @@ import org.springframework.stereotype.Repository;
* Package: com.yovinchen.xlcs.acl.mapper * Package: com.yovinchen.xlcs.acl.mapper
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 11:15 * @since 2023/9/14 11:15
*/ */
@Repository @Repository
public interface AdminRoleMapper extends BaseMapper<AdminRole> { public interface AdminRoleMapper extends BaseMapper<AdminRole> {

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.acl.mapper; package com.yovinchen.xlcs.acl.mapper;
import com.yovinchen.xlcs.model.acl.Permission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.Permission;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository;
* 菜单Mapper接口 * 菜单Mapper接口
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 13:59 * @since 2023/9/14 13:59
*/ */
@Repository @Repository
public interface PermissionMapper extends BaseMapper<Permission> { public interface PermissionMapper extends BaseMapper<Permission> {

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.acl.mapper; package com.yovinchen.xlcs.acl.mapper;
import com.yovinchen.xlcs.model.acl.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.Role;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/** /**
@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository;
* 角色管理 * 角色管理
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 09:11 * @since 2023/9/14 09:11
*/ */
@Repository @Repository
public interface RoleMapper extends BaseMapper<Role> { public interface RoleMapper extends BaseMapper<Role> {

View File

@ -1,14 +1,14 @@
package com.yovinchen.xlcs.acl.mapper; package com.yovinchen.xlcs.acl.mapper;
import com.yovinchen.xlcs.model.acl.RolePermission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.RolePermission;
/** /**
* ClassName: RolePermissionMapper * ClassName: RolePermissionMapper
* Package: com.yovinchen.xlcs.acl.mapper * Package: com.yovinchen.xlcs.acl.mapper
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 15:07 * @since 2023/9/14 15:07
*/ */
public interface RolePermissionMapper extends BaseMapper<RolePermission> { public interface RolePermissionMapper extends BaseMapper<RolePermission> {
} }

View File

@ -0,0 +1,16 @@
package com.yovinchen.xlcs.acl.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.AdminLoginLog;
/**
* <p>
* 后台用户登录日志表 服务类
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
public interface AdminLoginLogService extends IService<AdminLoginLog> {
}

View File

@ -1,14 +1,14 @@
package com.yovinchen.xlcs.acl.service; package com.yovinchen.xlcs.acl.service;
import com.yovinchen.xlcs.model.acl.AdminRole;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.AdminRole;
/** /**
* ClassName: AdminRoleService * ClassName: AdminRoleService
* Package: com.yovinchen.xlcs.acl.service * Package: com.yovinchen.xlcs.acl.service
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 11:15 * @since 2023/9/14 11:15
*/ */
public interface AdminRoleService extends IService<AdminRole> { public interface AdminRoleService extends IService<AdminRole> {
} }

View File

@ -1,10 +1,10 @@
package com.yovinchen.xlcs.acl.service; package com.yovinchen.xlcs.acl.service;
import com.yovinchen.xlcs.model.acl.Admin;
import com.yovinchen.xlcs.vo.acl.AdminQueryVo;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.Admin;
import com.yovinchen.xlcs.vo.acl.AdminQueryVo;
/** /**
* ClassName: AdminService * ClassName: AdminService
@ -12,7 +12,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
* 用户管理 * 用户管理
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 10:44 * @since 2023/9/14 10:44
*/ */
public interface AdminService extends IService<Admin> { public interface AdminService extends IService<Admin> {

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.acl.service; package com.yovinchen.xlcs.acl.service;
import com.yovinchen.xlcs.model.acl.Permission;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.Permission;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -12,7 +12,7 @@ import java.util.Map;
* 权限服务 * 权限服务
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 14:01 * @since 2023/9/14 14:01
*/ */
public interface PermissionService extends IService<Permission> { public interface PermissionService extends IService<Permission> {
@ -23,4 +23,8 @@ public interface PermissionService extends IService<Permission> {
boolean removeChildById(Long id); boolean removeChildById(Long id);
Map<String, Object> getPermissionById(Long id); Map<String, Object> getPermissionById(Long id);
void saveRolePermissionRealtionShip(Long roleId, Long[] permissionId);
Map<String, Object> findPermissionByRoleId(Long roleId);
} }

View File

@ -0,0 +1,16 @@
package com.yovinchen.xlcs.acl.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.RolePermission;
/**
* <p>
* 角色权限 服务类
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
public interface RolePermissionService extends IService<RolePermission> {
}

View File

@ -1,10 +1,10 @@
package com.yovinchen.xlcs.acl.service; package com.yovinchen.xlcs.acl.service;
import com.yovinchen.xlcs.model.acl.Role;
import com.yovinchen.xlcs.vo.acl.RoleQueryVo;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.Role;
import com.yovinchen.xlcs.vo.acl.RoleQueryVo;
import java.util.Map; import java.util.Map;
@ -14,7 +14,7 @@ import java.util.Map;
* 用户管理 * 用户管理
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 09:10 * @since 2023/9/14 09:10
*/ */
public interface RoleService extends IService<Role> { public interface RoleService extends IService<Role> {

View File

@ -0,0 +1,20 @@
package com.yovinchen.xlcs.acl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yovinchen.xlcs.acl.mapper.AdminLoginLogMapper;
import com.yovinchen.xlcs.acl.service.AdminLoginLogService;
import com.yovinchen.xlcs.model.acl.AdminLoginLog;
import org.springframework.stereotype.Service;
/**
* <p>
* 后台用户登录日志表 服务实现类
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
@Service
public class AdminLoginLogServiceImpl extends ServiceImpl<AdminLoginLogMapper, AdminLoginLog> implements AdminLoginLogService {
}

View File

@ -1,9 +1,9 @@
package com.yovinchen.xlcs.acl.service.impl; package com.yovinchen.xlcs.acl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yovinchen.xlcs.acl.mapper.AdminRoleMapper; import com.yovinchen.xlcs.acl.mapper.AdminRoleMapper;
import com.yovinchen.xlcs.acl.service.AdminRoleService; import com.yovinchen.xlcs.acl.service.AdminRoleService;
import com.yovinchen.xlcs.model.acl.AdminRole; import com.yovinchen.xlcs.model.acl.AdminRole;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
* Package: com.yovinchen.xlcs.acl.service.impl * Package: com.yovinchen.xlcs.acl.service.impl
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 11:15 * @since 2023/9/14 11:15
*/ */
@Service @Service
public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole> public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole>

View File

@ -20,7 +20,7 @@ import org.springframework.util.StringUtils;
* 用户管理 * 用户管理
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 10:44 * @since 2023/9/14 10:44
*/ */
@Slf4j @Slf4j
@Service @Service

View File

@ -1,27 +1,38 @@
package com.yovinchen.xlcs.acl.service.impl; package com.yovinchen.xlcs.acl.service.impl;
import com.yovinchen.xlcs.acl.mapper.PermissionMapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yovinchen.xlcs.acl.service.PermissionService;
import com.yovinchen.xlcs.acl.utils.PermissionHelper;
import com.yovinchen.xlcs.model.acl.Permission;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yovinchen.xlcs.acl.mapper.PermissionMapper;
import com.yovinchen.xlcs.acl.service.PermissionService;
import com.yovinchen.xlcs.acl.service.RolePermissionService;
import com.yovinchen.xlcs.acl.utils.PermissionHelper;
import com.yovinchen.xlcs.model.acl.Permission;
import com.yovinchen.xlcs.model.acl.RolePermission;
import com.yovinchen.xlcs.model.base.BaseEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* ClassName: PermissionServiceImpl * ClassName: PermissionServiceImpl
* Package: com.yovinchen.xlcs.acl.service.impl * Package: com.yovinchen.xlcs.acl.service.impl
* *
* @author yovinchen * @author yovinchen
* @Create 2023/9/14 14:02 * @since 2023/9/14 14:02
*/ */
@Service @Service
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService { public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {
@Autowired
private RolePermissionService rolePermissionService;
/** /**
* 获取所有菜单 * 获取所有菜单
@ -57,6 +68,71 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
return null; return null;
} }
/**
* 分配菜单
*
* @param roleId
* @param permissionIds
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void saveRolePermissionRealtionShip(Long roleId, Long[] permissionIds) {
//删除用户分配的角色数据
rolePermissionService.remove(new LambdaQueryWrapper<RolePermission>().eq(RolePermission::getRoleId, roleId));
//分配新的角色
List<RolePermission> rolePermissionList = new ArrayList<>();
for (Long permissionId : permissionIds) {
if (StringUtils.isEmpty(roleId)) {
continue;
}
RolePermission rolePermission = new RolePermission();
rolePermission.setRoleId(roleId);
rolePermission.setPermissionId(permissionId);
rolePermissionList.add(rolePermission);
}
rolePermissionService.saveBatch(rolePermissionList);
}
/**
* 根据用户获取菜单数据
*
* @param roleId
* @return
*/
@Override
public Map<String, Object> findPermissionByRoleId(Long roleId) {
//查询所有的角色
List<Permission> allPermissionList = queryAllMenu();
List<Permission> assignPermission1 = baseMapper.selectList(null);
//拥有的角色id
List<RolePermission> existRolePermissionList = rolePermissionService.list(new LambdaQueryWrapper<RolePermission>().eq(RolePermission::getRoleId, roleId)
.select(RolePermission::getPermissionId));
List<Long> existPermissionList = existRolePermissionList.stream()
.map(RolePermission::getPermissionId)
.collect(Collectors.toList());
//对角色进行分类
List<Permission> assignPermission2 = new ArrayList<>();
for (Permission permission : assignPermission1) {
//已分配
if (existPermissionList.contains(permission.getId())) {
assignPermission2.add(permission);
}
}
List<Long> assignPermission = assignPermission2.stream()
.map(BaseEntity::getId)
.collect(Collectors.toList());
Map<String, Object> roleMap = new HashMap<>();
roleMap.put("assignPermission", assignPermission);
roleMap.put("allPermissionList", allPermissionList);
return roleMap;
}
/** /**
* 递归获取子节点 * 递归获取子节点
* *
@ -64,8 +140,7 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
* @param idList * @param idList
*/ */
private void selectChildListById(Long id, List<Long> idList) { private void selectChildListById(Long id, List<Long> idList) {
List<Permission> childList = baseMapper.selectList(new QueryWrapper<Permission>() List<Permission> childList = baseMapper.selectList(new QueryWrapper<Permission>().eq("pid", id)
.eq("pid", id)
.select("id")); .select("id"));
childList.forEach(item -> { childList.forEach(item -> {
idList.add(item.getId()); idList.add(item.getId());

View File

@ -0,0 +1,20 @@
package com.yovinchen.xlcs.acl.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yovinchen.xlcs.acl.mapper.RolePermissionMapper;
import com.yovinchen.xlcs.acl.service.RolePermissionService;
import com.yovinchen.xlcs.model.acl.RolePermission;
import org.springframework.stereotype.Service;
/**
* <p>
* 角色权限 服务实现类
* </p>
*
* @author yovinchen
* @since 2024-01-24
*/
@Service
public class RolePermissionServiceImpl extends ServiceImpl<RolePermissionMapper, RolePermission> implements RolePermissionService {
}

Some files were not shown because too many files have changed in this diff Show More