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"?>
<project version="4">
<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>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
@ -21,6 +26,11 @@
<option name="name" value="Nexus aliyun" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</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>
<option name="id" value="spring" />
<option name="name" value="spring" />

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-acl" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-activity" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-cart" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ServiceGatewayApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" nameIsGenerated="true">
<module name="service-gateway" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-home" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-order" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-payment" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-product" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-search" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-sys" />
<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">
<option name="Make" enabled="true" />
</method>

View File

@ -3,7 +3,7 @@
<option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" />
<module name="service-user" />
<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">
<option name="Make" enabled="true" />
</method>

141
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 |
| 微信开发者工具 | 1.06.2306020 |
## 操作系统
### 操作系统
| 开发工具 | 版本 |
| ------------------- | ------ |
|---------------------|--------|
| Mac OS Ventura | 13.6.3 |
| Linux CentOS Stream | 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 数据库
```shell
@ -104,15 +193,33 @@ nacos/nacos-server:v2.2.3
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-d elasticsearch:7.8.0
-d elasticsearch:7.17.7
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 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)
@ -194,7 +301,7 @@ services:
environment:
SW_HEALTH_CHECKER: default
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"
TZ: Asia/Shanghai
SW_TELEMETRY: prometheus
@ -219,7 +326,7 @@ services:
ports:
- "8080:8080"
environment:
SW_OAP_ADDRESS: http://124.70.87.134:12800
SW_OAP_ADDRESS: http://192.168.31.50:12800
SW_HEALTH_CHECKER: default
TZ: Asia/Shanghai
healthcheck:
@ -229,3 +336,11 @@ services:
retries: 3
start_period: 60s #⾸次检测延迟时间
```
## 开发需求
| | | |
|------|------|------|
| | | |
| | | |
| | | |

View File

@ -3,4 +3,4 @@ ENV = 'development'
# base 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
#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 Router from 'vue-router'
Vue.use(Router)
/* Layout */
import Layout from '@/layout'
Vue.use(Router)
/**
* 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
@ -315,20 +314,20 @@ export const constantRoutes = [
component: Layout,
redirect: '/user/leader/list',
name: 'Leader',
meta: { title: '团长管理', icon: 'table' },
meta: {title: '配送员管理', icon: 'table'},
alwaysShow: true,
children: [
{
path: 'leader/checkList',
name: 'LeaderCheck',
component: () => import('@/views/user/leader/checkList'),
meta: { title: '团长待审核' }
meta: {title: '配送员待审核'}
},
{
path: 'leader/list',
name: 'leader',
component: () => import('@/views/user/leader/list'),
meta: { title: '团长已审核' }
meta: {title: '配送员已审核'}
}
]
},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -35,7 +35,7 @@
<el-table-column prop="name" 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.cityName" 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-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-form-item>
<el-form-item label="手机号码">
@ -77,7 +77,7 @@
<el-form-item label="身份证">
<el-input v-model="leader.idNo" />
</el-form-item>
<el-form-item label="提货点名称">
<el-form-item label="配送点名称">
<el-input v-model="leader.takeName" />
</el-form-item>
<el-form-item label="选择地址">

View File

@ -5,7 +5,7 @@
<el-card class="operate-container" shadow="never">
<el-form :inline="true">
<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-button type="primary" icon="el-icon-search" @click="fetchData()">查询</el-button>
@ -32,17 +32,17 @@
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" width="100px" />
<el-table-column prop="phone" label="手机号码" width="120px" />
<el-table-column prop="takeName" label="提货点名称" />
<el-table-column prop="param.regionName" label="所属区域" width="80px" />
<el-table-column label="姓名" prop="name" width="100px"/>
<el-table-column label="手机号码" prop="phone" width="120px"/>
<el-table-column label="配送点名称" prop="takeName"/>
<el-table-column label="所属区域" prop="param.regionName" width="80px"/>
<el-table-column label="状态" width="100">
<template slot-scope="scope">
<p>{{ scope.row.checkStatus === 0 ? '待审核' : scope.row.checkStatus === 1 ? '通过' : '未通过' }}</p>
</template>
</el-table-column>
<el-table-column prop="checkTime" label="审核时间" width="150px" />
<el-table-column prop="createTime" label="申请时间" width="150px" />
<el-table-column label="审核时间" prop="checkTime" width="150px"/>
<el-table-column label="申请时间" prop="createTime" width="150px"/>
<el-table-column label="操作" width="200" align="center">
<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
* @Create 2023/10/12 18:04
* @since 2023/10/12 18:04
*/
public class DateUtil {

View File

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

View File

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

View File

@ -13,7 +13,7 @@ import javax.annotation.PostConstruct;
* Package: com.yovinchen.xlcs.mq.config
*
* @author yovinchen
* @Create 2023/9/16 23:33
* @since 2023/9/16 23:33
*/
@Component
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
*
* @author yovinchen
* @Create 2023/9/16 23:34
* @since 2023/9/16 23:34
*/
public class MqConst {
/**

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -13,7 +13,7 @@ import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
* Package: com.yovinchen.xlcs
*
* @author yovinchen
* @Create 2023/9/14 08:49
* @since 2023/9/14 08:49
*/
public class CodeGet {
@ -25,7 +25,7 @@ public class CodeGet {
// 2全局配置
// 全局配置
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.setAuthor("yovinchen");
@ -34,17 +34,17 @@ public class CodeGet {
// 3数据源配置
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.setUsername("shequ-order");
dsc.setPassword("shequ-order");
dsc.setUsername("shequ-user");
dsc.setPassword("shequ-user");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.yovinchen.xlcs");
pc.setModuleName("order"); //模块名
pc.setModuleName("user"); //模块名
pc.setController("controller");
pc.setService("service");
pc.setMapper("mapper");
@ -53,7 +53,7 @@ public class CodeGet {
// 5策略配置
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);//数据库表映射到实体的命名策略

View File

@ -1,8 +1,8 @@
package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
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;
@ -12,8 +12,8 @@ import lombok.Data;
* 用户
* </p>
*
* @author qy
* @since 2019-11-08
* @author yovinchen
* @since 2023-09-21
*/
@Data
@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;
import com.yovinchen.xlcs.model.base.BaseEntity;
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;
@ -12,8 +12,8 @@ import lombok.Data;
* 用户角色
* </p>
*
* @author qy
* @since 2019-11-08
* @author yovinchen
* @since 2023-09-21
*/
@Data
@ApiModel(description = "用户角色")

View File

@ -2,9 +2,9 @@
//
package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
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;
@ -16,8 +16,8 @@ import java.util.List;
* 权限
* </p>
*
* @author qy
* @since 2019-11-08
* @author yovinchen
* @since 2023-09-21
*/
@Data
@ApiModel(description = "权限")

View File

@ -2,9 +2,9 @@
//
package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
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;
@ -14,8 +14,8 @@ import lombok.Data;
* 角色
* </p>
*
* @author qy
* @since 2019-11-08
* @author yovinchen
* @since 2023-09-21
*/
@Data
@ApiModel(description = "角色")

View File

@ -2,9 +2,9 @@
//
package com.yovinchen.xlcs.model.acl;
import com.yovinchen.xlcs.model.base.BaseEntity;
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;
@ -14,8 +14,8 @@ import lombok.Data;
* 角色权限
* </p>
*
* @author qy
* @since 2019-11-08
* @author yovinchen
* @since 2023-09-21
*/
@Data
@ApiModel(description = "角色权限")

View File

@ -1,10 +1,10 @@
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.TableName;
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.ApiModelProperty;
import lombok.Data;
@ -16,7 +16,7 @@ import java.util.Date;
* ActivityInfo
* </p>
*
* @author qy
* @author yovinchen
*/
@Data
@ApiModel(description = "ActivityInfo")

View File

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

View File

@ -1,8 +1,8 @@
package com.yovinchen.xlcs.model.activity;
import com.yovinchen.xlcs.model.base.BaseEntity;
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;
@ -12,7 +12,7 @@ import lombok.Data;
* ActivitySku
* </p>
*
* @author qy
* @author yovinchen
*/
@Data
@ApiModel(description = "ActivitySku")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -158,5 +158,36 @@
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</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>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,7 +8,7 @@ ARG WORK_PATH="/skywalking"
ENV JAR_FILE=${JAR_FILE}
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-* \
/skywalking/agent/plugins/apm-cxf-* \

View File

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

View File

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

View File

@ -7,7 +7,7 @@ ARG WORK_PATH="/skywalking"
ENV JAR_FILE=${JAR_FILE}
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-* \
/skywalking/agent/plugins/apm-dubbo-* \

View File

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

View File

@ -1,14 +1,14 @@
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.RoleService;
import com.yovinchen.xlcs.common.result.Result;
import com.yovinchen.xlcs.common.utils.MD5;
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.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -25,7 +25,7 @@ import java.util.Map;
* 用户管理 前端控制器
*
* @author yovinchen
* @Create 2023/9/14 10:38
* @since 2023/9/14 10:38
*/
@RestController
@RequestMapping("/admin/acl/user")

View File

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

View File

@ -1,6 +1,7 @@
package com.yovinchen.xlcs.acl.controller;
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.model.acl.Permission;
import io.swagger.annotations.Api;
@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* ClassName: PermissionController
@ -17,17 +19,18 @@ import java.util.List;
* 菜单服务
*
* @author yovinchen
* @Create 2023/9/14 14:03
* @since 2023/9/14 14:03
*/
@RestController
@RequestMapping("/admin/acl/permission")
@Api(tags = "菜单服务")
public class PermissionController {
@Autowired
private PermissionService permissionService;
@Autowired
private RoleService roleService;
@ApiOperation(value = "获取菜单")
@GetMapping
public Result index() {
@ -71,4 +74,29 @@ public class PermissionController {
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.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* ClassName: RoleController
@ -23,13 +21,11 @@ import java.util.Map;
* 角色管理 前端控制器
*
* @author yovinchen
* @Create 2023/9/14 09:09
* @since 2023/9/14 09:09
*/
@RestController
@RequestMapping("/admin/acl/role")
@Api(tags = "角色管理")
@Slf4j
public class RoleController {
@Autowired
@ -111,16 +107,4 @@ public class RoleController {
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;
import com.yovinchen.xlcs.model.acl.Admin;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.Admin;
import org.springframework.stereotype.Repository;
/**
@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository;
* 用户管理
*
* @author yovinchen
* @Create 2023/9/14 10:45
* @since 2023/9/14 10:45
*/
@Repository
public interface AdminMapper extends BaseMapper<Admin> {

View File

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

View File

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

View File

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

View File

@ -1,14 +1,14 @@
package com.yovinchen.xlcs.acl.mapper;
import com.yovinchen.xlcs.model.acl.RolePermission;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yovinchen.xlcs.model.acl.RolePermission;
/**
* ClassName: RolePermissionMapper
* Package: com.yovinchen.xlcs.acl.mapper
*
* @author yovinchen
* @Create 2023/9/14 15:07
* @since 2023/9/14 15:07
*/
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;
import com.yovinchen.xlcs.model.acl.AdminRole;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.AdminRole;
/**
* ClassName: AdminRoleService
* Package: com.yovinchen.xlcs.acl.service
*
* @author yovinchen
* @Create 2023/9/14 11:15
* @since 2023/9/14 11:15
*/
public interface AdminRoleService extends IService<AdminRole> {
}

View File

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

View File

@ -1,7 +1,7 @@
package com.yovinchen.xlcs.acl.service;
import com.yovinchen.xlcs.model.acl.Permission;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yovinchen.xlcs.model.acl.Permission;
import java.util.List;
import java.util.Map;
@ -12,7 +12,7 @@ import java.util.Map;
* 权限服务
*
* @author yovinchen
* @Create 2023/9/14 14:01
* @since 2023/9/14 14:01
*/
public interface PermissionService extends IService<Permission> {
@ -23,4 +23,8 @@ public interface PermissionService extends IService<Permission> {
boolean removeChildById(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;
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.extension.plugins.pagination.Page;
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;
@ -14,7 +14,7 @@ import java.util.Map;
* 用户管理
*
* @author yovinchen
* @Create 2023/9/14 09:10
* @since 2023/9/14 09:10
*/
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;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yovinchen.xlcs.acl.mapper.AdminRoleMapper;
import com.yovinchen.xlcs.acl.service.AdminRoleService;
import com.yovinchen.xlcs.model.acl.AdminRole;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
* Package: com.yovinchen.xlcs.acl.service.impl
*
* @author yovinchen
* @Create 2023/9/14 11:15
* @since 2023/9/14 11:15
*/
@Service
public class AdminRoleServiceImpl extends ServiceImpl<AdminRoleMapper, AdminRole>

View File

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

View File

@ -1,27 +1,38 @@
package com.yovinchen.xlcs.acl.service.impl;
import com.yovinchen.xlcs.acl.mapper.PermissionMapper;
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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* ClassName: PermissionServiceImpl
* Package: com.yovinchen.xlcs.acl.service.impl
*
* @author yovinchen
* @Create 2023/9/14 14:02
* @since 2023/9/14 14:02
*/
@Service
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;
}
/**
* 分配菜单
*
* @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
*/
private void selectChildListById(Long id, List<Long> idList) {
List<Permission> childList = baseMapper.selectList(new QueryWrapper<Permission>()
.eq("pid", id)
List<Permission> childList = baseMapper.selectList(new QueryWrapper<Permission>().eq("pid", id)
.select("id"));
childList.forEach(item -> {
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