Initial commit: yunjiao server
commit
da4b2059ba
|
|
@ -0,0 +1,18 @@
|
|||
# Build output
|
||||
target/
|
||||
**/target/
|
||||
|
||||
# Runtime and IDE files
|
||||
logs/
|
||||
*.log
|
||||
.idea/
|
||||
*.iml
|
||||
.DS_Store
|
||||
|
||||
# Local environment overrides and secrets
|
||||
.env
|
||||
.env.*
|
||||
application-local.yml
|
||||
application-local.yaml
|
||||
application-local.properties
|
||||
application-dev.yml
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<trees>
|
||||
<tree path="/yj-admin" title="后台模块"/>
|
||||
<tree path="/yj-common" title="公共模块"/>
|
||||
<tree path="/yj-front" title="前台模块"/>
|
||||
<tree path="/yj-generator" title="生成器"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/config" title="公共配置"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/core" title="核心代码"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/entity" title="模型实体"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/enums" title="公共枚举"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/exception" title="公共异常"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/mapper" title="模型映射"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/plugin" title="公共插件"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/utils" title="通用工具"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/validator" title="扩展验证"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/validator/IDMustValidator.java" title=""
|
||||
extension="java"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/config" title="配置层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/controller" title="控制层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/service" title="服务层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/validate" title="验证层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/vo" title="传输层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/LikeAdminApplication.java" title="启动器" extension="java"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/LikeAdminInterceptor.java" title="拦截器" extension="java"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/LikeAdminThreadLocal.java" title="线程" extension="java"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/config" title="配置层"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/controller" title="控制层"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/service" title="服务层"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/validate" title="验证层"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/vo" title="传输层"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/LikeFrontApplication.java" title="启动器" extension="java"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/LikeFrontInterceptor.java" title="拦截器" extension="java"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/LikeFrontThreadLocal.java" title="线程" extension="java"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/crontab" title="任务层"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/util" title="公共工具"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/aop" title="公共切面"/>
|
||||
<tree path="/yj-front/src/main/java/com/yj/front/cache" title="缓存层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/cache" title="缓存层"/>
|
||||
<tree path="/yj-admin/src/main/java/com/yj/admin/aop" title="切面层"/>
|
||||
<tree path="/yj-common/src/main/java/com/yj/common/cache" title="缓存层"/>
|
||||
</trees>
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
<a href="https://www.likeshop.cn"></a><br>
|
||||
<a href="https://www.buildingai.cc"></a><br>
|
||||
<h1 align="center">likeadmin通用管理后台(Java)</h1>
|
||||
<h4 align="center">⚡️快速开发、🛠️ 一键生成代码、✅后台多端自适应、📱手机端、🖥️PC(电脑)端前台</h4>
|
||||
<p align="center">
|
||||
<a href="https://www.java.com/zh-CN/download/"><img src="https://img.shields.io/badge/JAVA-8-d74f11"> </a><a href="#"> <img src="https://img.shields.io/badge/Spring Boot-2-5ea931"> </a><a href="https://www.tslang.cn/"><img src="https://img.shields.io/badge/TypeScript-3-294e80"></a> <a href="#"><img src="https://img.shields.io/badge/Vue.js-3-4eb883"> </a><a href="#"><img src="https://img.shields.io/badge/vite-2-ffc018"> </a><a href="#"><img src="https://img.shields.io/badge/Element Plus-2-409eff"> </a><a target="_blank" href="https://www.docker.com/"><img src="https://img.shields.io/badge/Docker--139cff"></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://mp.weixin.qq.com/"><img src="https://img.shields.io/badge/微信-公众号-05ce66"></a>
|
||||
<a href="https://mp.weixin.qq.com/"><img src="https://img.shields.io/badge/微信-小程序-05ce66"></a>
|
||||
<a href="https://open.weixin.qq.com/"><img src="https://img.shields.io/badge/微信-开放平台-05ce66"></a>
|
||||
<a href="https://cloud.tencent.com/"><img src="https://img.shields.io/badge/腾讯云-COS-00a3ff"></a>
|
||||
<a href="https://cloud.tencent.com/"><img src="https://img.shields.io/badge/腾讯云-短信-00a3ff"></a>
|
||||
<a href="https://www.aliyun.com/"><img src="https://img.shields.io/badge/阿里云-OSS-ff6a00"></a>
|
||||
<a href="https://www.aliyun.com/"><img src="https://img.shields.io/badge/阿里云-短信-ff6a00"></a>
|
||||
<a href="https://www.qiniu.com/"><img src="https://img.shields.io/badge/七牛云-OSS-07beff"></a>
|
||||
</p>
|
||||
<div align="center">
|
||||
<img width="80%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=9cf02b831e49d6a411bafbc4d79f51d4" /><br>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
## 🚀🚀🚀docker本地一句命令快速部署体验
|
||||
### 快速部署
|
||||
1.安装启动 [docker](https://www.docker.com/) 之后,在终端运行以下命令,等待程序启动完毕即可体验。<br>
|
||||
```shell
|
||||
docker run -it --name likeadmin_java -p 20222:20222 -p 20223:20223 likeshop/likeadmin_java:1.5.0
|
||||
```
|
||||
<br>
|
||||
|
||||
### 本地访问
|
||||
命令运行完毕以后,请等待程序启动完毕再访问。由于谷歌浏览器对本地部署不友好原因,访问的链接下面尾部有/就带上/。PC端管理后台帐号为admin,密码为123456 。<br>
|
||||
PC端管理后台:http://127.0.0.1:20222/
|
||||
<br>PC端前台:http://127.0.0.1:20223/pc/
|
||||
<br>手机端前台:http://127.0.0.1:20223/mobile/
|
||||
### ⚠️注意
|
||||
docker快速部署只适合本地部署体验,不熟悉docker请勿用于生产环境,可能造成数据丢失等问题。
|
||||
<br>
|
||||
|
||||
|
||||
## 👀体验
|
||||
### 管理后台
|
||||
地址:https://java-admin.likeadmin.cn <br>
|
||||
账号:admin 密码:123456
|
||||
### 手机端uniapp前台
|
||||
<img width="40%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=260c0869d9ba7e692b2db1e216078241" /><br>
|
||||
### 手机端网页前台
|
||||
https://java-front.likeadmin.cn/mobile
|
||||
### PC(电脑)端网页前台
|
||||
https://java-front.likeadmin.cn/pc/
|
||||
### 开发文档
|
||||
地址:[https://www.likeadmin.cn](https://www.likeadmin.cn "https://www.likeadmin.cn")
|
||||
|
||||
|
||||
## 👨💻简介
|
||||
我们希望能够为开源社区做出更多的贡献,推出永久免费开源的likeadmin通用前后端分离管理后台系统。遵循MIT开源许可协议,您可以免费使用,甚至允许把你基于likeadmin开发的软件应用开源、发布、销售。
|
||||
<br>
|
||||
## 🧐进一步了解
|
||||
### 🧰场景介绍
|
||||
1.likeadmin已经搭建好前后端分离的底层,包含程序安装、登录、登出、工作台、菜单权限控制、角色、管理员、部门管理、岗位管理、素材管理、网站设置、图库管理等基础功能,无需重复造轮子。更有开发者工具功能,一键生成代码,大大节省开发时间。<br>
|
||||
2.可视化系统程序安装界面,可自定义安装数据,开发者可快速扩展发行自己的软件产品。<br>
|
||||
3.likeadmin定位为通用的软件系统管理后台,方便开发者快速开发软件系统,文档清晰、代码易懂、简单易用。<br>
|
||||
4.手机端uniapp前台,含导导航配置、微信登录、个人登录等等基础功能,方便根据业务开发含手机前台的项目。
|
||||
|
||||
|
||||
### 🐙 后端架构方面
|
||||
1.服务端使用Java8开发,性能有突破性的提升。<br>
|
||||
2.使用Spring Boot2.7.5框架,目前国内流行的Java框架,高性能、简单易用、文档齐全、支持Mave高级项目管理工具、支持Redis等。
|
||||
### 🐹 前端架构方面
|
||||
#### 后台
|
||||
1.使用最流性的前后端分离方案typescript、vue3、vite开发,保持了代码的简洁、一致和规范。<br>
|
||||
2.后台界面使用element-plus UI框架,简单精美的后台界面,丰富的组件库,方便快速开发,满足各种后台交互。
|
||||
<br>
|
||||
### 前台
|
||||
手机端uniapp前台,可以编译成手机H5网页、微信小程序、安卓App,苹果App等客户端。<br>
|
||||
### 🛠️ 代码生成器
|
||||
一键生成前后端业务代码,大大提示开发效率。<br>
|
||||
## 界面预览
|
||||
### 🖥️后台页面
|
||||
 <br>
|
||||
 <br>
|
||||
 <br>
|
||||
 <br>
|
||||
 <br>
|
||||
<br>
|
||||
### 📱手机端前台界面
|
||||
<div class="half">
|
||||
<img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=2dbac190afadfb6650a04c8af44980e1" /> <img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=73adbdb91ff5c43ca3e694a99effae7a" /> <img width="30%" src="https://md.likeshop.cn/server/index.php?s=/api/attachment/visitFile&sign=55b51eaebd7d696f96ccbf60d4694368" />
|
||||
</div><br>
|
||||
|
|
@ -0,0 +1,284 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<!-- 模块信息 -->
|
||||
<groupId>org.yj</groupId>
|
||||
<artifactId>yunjiao-server</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<version>1.0.0</version>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<modules>
|
||||
<module>yj-admin</module>
|
||||
<module>yj-front</module>
|
||||
<module>yj-common</module>
|
||||
<module>yj-generator</module>
|
||||
</modules>
|
||||
|
||||
<!-- 特性信息 -->
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
|
||||
<like.version>1.0.0</like.version>
|
||||
<java.version>1.8</java.version>
|
||||
<log4j2.version>2.16.0</log4j2.version>
|
||||
|
||||
<mysql-connector.version>5.1.49</mysql-connector.version>
|
||||
<mybatis-plus.version>3.5.2</mybatis-plus.version>
|
||||
<mybatis-plus-join.version>1.2.4</mybatis-plus-join.version>
|
||||
<pagehelper.version>1.4.5</pagehelper.version>
|
||||
|
||||
<lombok.version>1.18.24</lombok.version>
|
||||
<fastJson2.version>2.0.16</fastJson2.version>
|
||||
<commons-lang3.version>3.12.0</commons-lang3.version>
|
||||
<commons.io.version>2.11.0</commons.io.version>
|
||||
<commons-pool2.version>2.11.1</commons-pool2.version>
|
||||
<google-gson.version>2.9.0</google-gson.version>
|
||||
|
||||
<kaptcha.version>2.3.2</kaptcha.version>
|
||||
<bitwalker.version>1.2.4</bitwalker.version>
|
||||
<oshi-core.version>6.1.2</oshi-core.version>
|
||||
<sa-token.version>1.32.0</sa-token.version>
|
||||
<sa-token-redis.version>1.32.0</sa-token-redis.version>
|
||||
<easyexcel.version>3.1.3</easyexcel.version>
|
||||
<quartz-scheduler.version>2.3.2</quartz-scheduler.version>
|
||||
|
||||
<qiniu.version>7.17.0</qiniu.version>
|
||||
<qcloud-version>5.6.54</qcloud-version>
|
||||
<tencentcloudapi.version>3.1.411</tencentcloudapi.version>
|
||||
<aliyun-oss.version>3.10.2</aliyun-oss.version>
|
||||
<aliyun-java.version>4.5.16</aliyun-java.version>
|
||||
|
||||
<weixin.version>4.4.0</weixin.version>
|
||||
</properties>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<!-- SpringBoot-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
<version>2.7.5</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Mysql-Connector -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>${mysql-connector.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- MyBatis-Plus -->
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>${mybatis-plus.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- MyBatis-Plus-Join -->
|
||||
<dependency>
|
||||
<groupId>com.github.yulichang</groupId>
|
||||
<artifactId>mybatis-plus-join</artifactId>
|
||||
<version>${mybatis-plus-join.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- MyBatis-PageHelper -->
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
<version>${pagehelper.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Pool2 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-pool2</artifactId>
|
||||
<version>${commons-pool2.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Fastjson2 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.fastjson2</groupId>
|
||||
<artifactId>fastjson2</artifactId>
|
||||
<version>${fastJson2.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- kaptCha -->
|
||||
<dependency>
|
||||
<groupId>com.github.penggle</groupId>
|
||||
<artifactId>kaptcha</artifactId>
|
||||
<version>${kaptcha.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- SaToken -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
<version>${sa-token.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- SaToken-Redis -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-dao-redis-jackson</artifactId>
|
||||
<version>${sa-token-redis.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Quartz-Scheduler -->
|
||||
<dependency>
|
||||
<groupId>org.quartz-scheduler</groupId>
|
||||
<artifactId>quartz</artifactId>
|
||||
<version>${quartz-scheduler.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Gson工具 -->
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>${google-gson.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- UA工具 -->
|
||||
<dependency>
|
||||
<groupId>nl.bitwalker</groupId>
|
||||
<artifactId>UserAgentUtils</artifactId>
|
||||
<version>${bitwalker.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Str工具 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons-lang3.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- IO工具 -->
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons.io.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 七牛云OSS -->
|
||||
<dependency>
|
||||
<groupId>com.qiniu</groupId>
|
||||
<artifactId>qiniu-java-sdk</artifactId>
|
||||
<version>${qiniu.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 腾讯云COS -->
|
||||
<dependency>
|
||||
<groupId>com.qcloud</groupId>
|
||||
<artifactId>cos_api</artifactId>
|
||||
<version>${qcloud-version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 阿里云OSS -->
|
||||
<dependency>
|
||||
<groupId>com.aliyun.oss</groupId>
|
||||
<artifactId>aliyun-sdk-oss</artifactId>
|
||||
<version>${aliyun-oss.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 腾讯云短信 -->
|
||||
<dependency>
|
||||
<groupId>com.tencentcloudapi</groupId>
|
||||
<artifactId>tencentcloud-sdk-java</artifactId>
|
||||
<version>${tencentcloudapi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 阿里云短信 -->
|
||||
<dependency>
|
||||
<groupId>com.aliyun</groupId>
|
||||
<artifactId>aliyun-java-sdk-core</artifactId>
|
||||
<version>${aliyun-java.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- EasyExcel -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>easyexcel</artifactId>
|
||||
<version>${easyexcel.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 系统监控 -->
|
||||
<dependency>
|
||||
<groupId>com.github.oshi</groupId>
|
||||
<artifactId>oshi-core</artifactId>
|
||||
<version>${oshi-core.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Swagger3 -->
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-boot-starter</artifactId>
|
||||
<version>3.0.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 微信小程序 -->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-miniapp</artifactId>
|
||||
<version>${weixin.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 微信公众号 -->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-mp</artifactId>
|
||||
<version>${weixin.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 微信支付 -->
|
||||
<dependency>
|
||||
<groupId>com.github.binarywang</groupId>
|
||||
<artifactId>weixin-java-pay</artifactId>
|
||||
<version>${weixin.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 全局工具 -->
|
||||
<dependency>
|
||||
<groupId>org.yj</groupId>
|
||||
<artifactId>yj-common</artifactId>
|
||||
<version>${like.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<!-- 插件管理 -->
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>2.6.4</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.10.0</version>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<encoding>${project.build.sourceEncoding}</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<!-- 父工程 -->
|
||||
<parent>
|
||||
<artifactId>yunjiao-server</artifactId>
|
||||
<groupId>org.yj</groupId>
|
||||
<version>1.0.0</version>
|
||||
</parent>
|
||||
|
||||
<!-- 模块信息 -->
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>yj-admin</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<!-- 项目管理 -->
|
||||
<dependencies>
|
||||
<!-- 全局工具 -->
|
||||
<dependency>
|
||||
<groupId>org.yj</groupId>
|
||||
<artifactId>yj-common</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 代码生成 -->
|
||||
<dependency>
|
||||
<groupId>org.yj</groupId>
|
||||
<artifactId>yj-generator</artifactId>
|
||||
<version>1.0.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 验证码 -->
|
||||
<dependency>
|
||||
<groupId>com.github.penggle</groupId>
|
||||
<artifactId>kaptcha</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SaToken -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- SaToken-Redis -->
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<artifactId>sa-token-dao-redis-jackson</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Quartz-Scheduler -->
|
||||
<dependency>
|
||||
<groupId>org.quartz-scheduler</groupId>
|
||||
<artifactId>quartz</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- 插件管理 -->
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<version>2.6.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.yj.admin;
|
||||
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
/**
|
||||
* 启动器
|
||||
*/
|
||||
@Configuration
|
||||
@ComponentScan(basePackages = {"com.yj"})
|
||||
@MapperScan(basePackages = {"com.yj.*.mapper"})
|
||||
@EnableTransactionManagement
|
||||
@SpringBootApplication(exclude = {RedisRepositoriesAutoConfiguration.class})
|
||||
public class LikeAdminApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(LikeAdminApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
package com.yj.admin;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.yj.admin.service.admin.IAdminRoleService;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.common.aop.NotLogin;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.entity.admin.Admin;
|
||||
import com.yj.common.enums.ErrorEnum;
|
||||
import com.yj.common.exception.LoginException;
|
||||
import com.yj.common.mapper.admin.AdminMapper;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import com.yj.common.util.YmlUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 拦截器
|
||||
*/
|
||||
@Component
|
||||
public class LikeAdminInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Resource
|
||||
AdminMapper systemAuthAdminMapper;
|
||||
|
||||
@Resource
|
||||
IAdminRoleService iAdminRoleService;
|
||||
|
||||
/**
|
||||
* 前置处理器
|
||||
*
|
||||
* @param request 请求
|
||||
* @param response 响应
|
||||
* @param handler 处理
|
||||
* @return boolean
|
||||
* @throws Exception 异常
|
||||
*/
|
||||
@Override
|
||||
public boolean preHandle(@NotNull HttpServletRequest request,
|
||||
@NotNull HttpServletResponse response,
|
||||
@NotNull Object handler) throws Exception {
|
||||
|
||||
// 请求方法类型
|
||||
String reqUri = request.getRequestURI();
|
||||
if (!(handler instanceof HandlerMethod) || ( !reqUri.startsWith("/api") && !reqUri.startsWith("/adminapi"))) {
|
||||
return HandlerInterceptor.super.preHandle(request, response, handler);
|
||||
}
|
||||
|
||||
// 登录权限校验
|
||||
try {
|
||||
response.setContentType("application/json;charset=utf-8");
|
||||
Method method = this.obtainAop(handler);
|
||||
this.checkLogin(method, reqUri);
|
||||
} catch (LoginException e) {
|
||||
AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
|
||||
response.getWriter().print(JSON.toJSONString(result));
|
||||
return false;
|
||||
}
|
||||
|
||||
// 演示环境拦截
|
||||
String env = YmlUtils.get("like.production");
|
||||
if (StringUtils.isNotNull(env) && env.equals("true")) {
|
||||
String prefix = "/adminapi/";
|
||||
String route = request.getRequestURI().replaceFirst(prefix, "");
|
||||
// String auths = route.replace("/", ":");
|
||||
String auths = route;
|
||||
List<String> ignoreUrl = Arrays.asList("login/account", "login/logout");
|
||||
if (request.getMethod().equals("POST") && !ignoreUrl.contains(auths)) {
|
||||
String message = "演示环境不支持修改数据,请下载源码本地部署体验";
|
||||
AjaxResult<Object> result = AjaxResult.failed(ErrorEnum.NO_PERMISSION.getCode(), message);
|
||||
response.getWriter().print(JSON.toJSONString(result));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 验证通过继续
|
||||
return HandlerInterceptor.super.preHandle(request, response, handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* 后置处理器
|
||||
*
|
||||
* @param request 请求
|
||||
* @param response 响应
|
||||
* @param handler 处理
|
||||
* @param ex 异常
|
||||
* @throws Exception 异常
|
||||
*/
|
||||
@Override
|
||||
public void afterCompletion(@NotNull HttpServletRequest request,
|
||||
@NotNull HttpServletResponse response,
|
||||
@NotNull Object handler, Exception ex) throws Exception {
|
||||
LikeAdminThreadLocal.remove();
|
||||
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
|
||||
}
|
||||
|
||||
/**
|
||||
* 提取注解
|
||||
*
|
||||
* @param handler 处理器
|
||||
* @return Method
|
||||
* @throws Exception 异常
|
||||
*/
|
||||
private Method obtainAop(@NotNull Object handler) throws Exception {
|
||||
String[] objArr = handler.toString().split("#");
|
||||
String methodStr = objArr[1].split("\\(")[0];
|
||||
String classStr = objArr[0];
|
||||
Class<?> clazz = Class.forName(classStr);
|
||||
|
||||
Method[] methods = clazz.getDeclaredMethods();
|
||||
for (Method method : methods) {
|
||||
if (method.getName().equals(methodStr)) {
|
||||
return method;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录验证
|
||||
*
|
||||
* @param method 方法类
|
||||
* @author fzr
|
||||
*/
|
||||
private void checkLogin(Method method, String reqUri) {
|
||||
for (int i=0; i<=0; i++) {
|
||||
// 免登校验
|
||||
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
|
||||
break;
|
||||
}
|
||||
|
||||
// 令牌校验
|
||||
String token = StpUtil.getTokenValue();
|
||||
if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
|
||||
Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
|
||||
String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
|
||||
throw new LoginException(errCode, errMsg);
|
||||
}
|
||||
|
||||
// 登录校验
|
||||
Object id = StpUtil.getLoginId();
|
||||
if (StringUtils.isNull(id)) {
|
||||
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
|
||||
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
|
||||
throw new LoginException(errCode, errMsg);
|
||||
}
|
||||
|
||||
// 用户校验
|
||||
Admin adminUser = systemAuthAdminMapper.selectOne(
|
||||
new QueryWrapper<Admin>()
|
||||
.select("id,name,disable")
|
||||
.eq("id", Integer.parseInt(id.toString()))
|
||||
.isNull("delete_time")
|
||||
.last("limit 1"));
|
||||
|
||||
// 删除校验
|
||||
if (StringUtils.isNull(adminUser)) {
|
||||
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
|
||||
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
|
||||
throw new LoginException(errCode, errMsg);
|
||||
}
|
||||
|
||||
// 禁用校验
|
||||
if (adminUser.getDisable().equals(1)) {
|
||||
Integer errCode = ErrorEnum.LOGIN_DISABLE_ERROR.getCode();
|
||||
String errMsg = ErrorEnum.LOGIN_DISABLE_ERROR.getMsg();
|
||||
throw new LoginException(errCode, errMsg);
|
||||
}
|
||||
|
||||
// 写入线程
|
||||
LikeAdminThreadLocal.put("adminId", id);
|
||||
LikeAdminThreadLocal.put("username", adminUser.getName());
|
||||
String roleIds = StringUtils.join(iAdminRoleService.getRoleIdAttr(Integer.parseInt(String.valueOf(id))), ",");
|
||||
LikeAdminThreadLocal.put("roleIds", roleIds);
|
||||
|
||||
// 权限校验
|
||||
if (!adminUser.getId().equals(1)) {
|
||||
this.checkAuth(method, reqUri);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 权限验证
|
||||
*
|
||||
* @param method 方法类
|
||||
* @param uri 请求路由
|
||||
* @author fzr
|
||||
*/
|
||||
private void checkAuth(Method method, String uri) {
|
||||
for (int i=0; i<=0; i++) {
|
||||
// 免权限校验
|
||||
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotPower.class)) {
|
||||
break;
|
||||
}
|
||||
|
||||
// 路由转权限
|
||||
String prefix = "/adminapi/";
|
||||
String route = uri.replaceFirst(prefix, "");
|
||||
// String auths = route.replace("/", ":");
|
||||
String auths = route;
|
||||
// 校验权限
|
||||
StpUtil.checkPermission(auths);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
package com.yj.admin;
|
||||
|
||||
import com.yj.common.util.ListUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentSkipListMap;
|
||||
|
||||
/**
|
||||
* 本地线程
|
||||
*/
|
||||
public class LikeAdminThreadLocal {
|
||||
|
||||
/**
|
||||
* 构造方法
|
||||
*/
|
||||
public LikeAdminThreadLocal() {}
|
||||
|
||||
/**
|
||||
* 取得本地线程对象
|
||||
*/
|
||||
private static final java.lang.ThreadLocal<Map<String, Object>> MY_LOCAL = new java.lang.ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 写入本地线程
|
||||
*/
|
||||
public static void put(String key, Object val) {
|
||||
Map<String, Object> map = MY_LOCAL.get();
|
||||
if (map == null) {
|
||||
synchronized (MY_LOCAL) {
|
||||
map = new ConcurrentSkipListMap<>();
|
||||
}
|
||||
}
|
||||
map.put(key, val);
|
||||
MY_LOCAL.set(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取本地线程
|
||||
*/
|
||||
public static Object get(String key) {
|
||||
return MY_LOCAL.get().getOrDefault(key, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取管理员ID
|
||||
*/
|
||||
public static Integer getAdminId() {
|
||||
String adminId = LikeAdminThreadLocal.get("adminId").toString();
|
||||
if (adminId.equals("")) {
|
||||
return 0;
|
||||
}
|
||||
return Integer.parseInt(adminId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色ID
|
||||
*/
|
||||
public static List<Integer> getRoleIds() {
|
||||
String roleIds = LikeAdminThreadLocal.get("roleIds").toString();
|
||||
if (roleIds.equals("") || roleIds.equals("0")) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return ListUtils.stringToListAsInt(roleIds, ",");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除本地线程
|
||||
*/
|
||||
public static void remove() {
|
||||
MY_LOCAL.remove();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.yj.admin.aop;
|
||||
|
||||
import com.yj.admin.aop.aspect.RequestType;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* 日志记录类
|
||||
*/
|
||||
@Target({ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Log {
|
||||
|
||||
/**
|
||||
* 模块名称
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
String title() default "";
|
||||
|
||||
/**
|
||||
* 请求类型
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
RequestType requestType() default RequestType.Default;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
package com.yj.admin.aop.aspect;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.entity.admin.Admin;
|
||||
import com.yj.common.entity.system.OperationLog;
|
||||
import com.yj.common.mapper.admin.AdminMapper;
|
||||
import com.yj.common.mapper.system.SystemLogOperateMapper;
|
||||
import com.yj.common.util.IpUtils;
|
||||
import com.yj.common.util.RequestUtils;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.AfterThrowing;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Aspect
|
||||
@Component
|
||||
public class LogAspect {
|
||||
|
||||
@Resource
|
||||
SystemLogOperateMapper systemLogOperateMapper;
|
||||
|
||||
@Resource
|
||||
AdminMapper adminMapper;
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
|
||||
|
||||
/**
|
||||
* 线程本地变量
|
||||
*/
|
||||
private static final ThreadLocal<Long> threadLocal = new ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 单线程化的线程池
|
||||
*/
|
||||
private final ExecutorService executor = Executors.newSingleThreadExecutor();
|
||||
|
||||
/**
|
||||
* 声明切面点拦截那些类
|
||||
*/
|
||||
@Pointcut("@annotation(com.yj.admin.aop.Log)")
|
||||
private void pointCutMethodController() {}
|
||||
|
||||
/**
|
||||
* 环绕通知前后增强
|
||||
*/
|
||||
@Around(value = "pointCutMethodController()")
|
||||
public Object doAroundService(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||
// 开始时间
|
||||
threadLocal.set(System.currentTimeMillis());
|
||||
// 执行方法
|
||||
Object result = joinPoint.proceed();
|
||||
// 保存日志
|
||||
recordLog(joinPoint, null);
|
||||
// 返回结果
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截异常操作
|
||||
*
|
||||
* @param joinPoint 切点
|
||||
* @param e 异常
|
||||
*/
|
||||
@AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
|
||||
public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) {
|
||||
recordLog(joinPoint, e);
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录日志信息
|
||||
*
|
||||
* @param joinPointObj joinPoint
|
||||
* @param e Exception 错误异常
|
||||
*/
|
||||
private void recordLog(Object joinPointObj, final Exception e) {
|
||||
try {
|
||||
long beginTime = threadLocal.get();
|
||||
long endTime = System.currentTimeMillis();
|
||||
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
if (requestAttributes != null) {
|
||||
// 取得请求对象
|
||||
HttpServletRequest request = requestAttributes.getRequest();
|
||||
|
||||
// 获取当前的用户
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
|
||||
// 获取日志注解
|
||||
ProceedingJoinPoint joinPoint = (ProceedingJoinPoint) joinPointObj;
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = signature.getMethod();
|
||||
Log logAnnotation = method.getAnnotation(Log.class);
|
||||
|
||||
// 方法名称
|
||||
String className = joinPoint.getTarget().getClass().getName();
|
||||
String methodName = joinPoint.getSignature().getName();
|
||||
|
||||
// 获取请求参数
|
||||
String queryString = request.getQueryString();
|
||||
Object[] args = joinPoint.getArgs();
|
||||
String params = "";
|
||||
if (args.length > 0) {
|
||||
if("POST".equals(request.getMethod())){
|
||||
if (RequestType.File.equals(logAnnotation.requestType())){
|
||||
//文件类型获取文件名称作为参数
|
||||
StandardMultipartHttpServletRequest standardMultipartHttpServletRequest = (StandardMultipartHttpServletRequest) args[0];
|
||||
//提取文件名
|
||||
params = standardMultipartHttpServletRequest
|
||||
.getMultiFileMap()
|
||||
.values()
|
||||
.stream()
|
||||
.map(m -> m.stream()
|
||||
.map(MultipartFile::getOriginalFilename)
|
||||
.collect(Collectors.joining(",")))
|
||||
.collect(Collectors.joining(","));
|
||||
} else {
|
||||
params = JSON.toJSONString(args);
|
||||
}
|
||||
|
||||
} else if("GET".equals(request.getMethod())){
|
||||
params = queryString;
|
||||
}
|
||||
}
|
||||
|
||||
// 错误信息
|
||||
String error = "";
|
||||
int status = 1;
|
||||
if (e != null) {
|
||||
error = e.getMessage();
|
||||
status = 2; // 1=成功, 2=失败
|
||||
}
|
||||
|
||||
String adminName = "";
|
||||
Admin admin = adminMapper.selectById(adminId);
|
||||
if (admin != null) {
|
||||
adminName = admin.getName();
|
||||
}
|
||||
// 数据库日志
|
||||
OperationLog model = new OperationLog();
|
||||
model.setAdminId(adminId);
|
||||
model.setAdminName(adminName);
|
||||
model.setAction(logAnnotation.title());
|
||||
model.setIp(IpUtils.getIpAddress());
|
||||
model.setType(request.getMethod());
|
||||
// model.setMethod(className + "." + methodName + "()");
|
||||
model.setUrl(RequestUtils.route());
|
||||
model.setParams(params);
|
||||
model.setResult(error);
|
||||
// model.setStatus(status);
|
||||
// model.setStartTime(beginTime / 1000);
|
||||
// model.setEndTime(endTime / 1000);
|
||||
// model.setTaskTime(endTime - beginTime);
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
executor.submit(() -> {
|
||||
systemLogOperateMapper.insert(model);
|
||||
});
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
log.error("异常信息:{}", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.yj.admin.aop.aspect;
|
||||
|
||||
/**
|
||||
* 请求参数类
|
||||
*/
|
||||
public enum RequestType {
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
File,
|
||||
/**
|
||||
* 默认数据类型
|
||||
*/
|
||||
Default
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.yj.admin.cache;
|
||||
|
||||
import com.yj.common.util.*;
|
||||
|
||||
/**
|
||||
* 验证码缓存器
|
||||
*/
|
||||
public class CaptchaCache {
|
||||
|
||||
public static String get(String uuid) {
|
||||
String ip = IpUtils.getIpAddress().replaceAll("\\.", "");
|
||||
String captchaKey = YmlUtils.get("like.captcha.token") + ip + ":" + uuid;
|
||||
Object code = RedisUtils.get(captchaKey);
|
||||
|
||||
if (StringUtils.isNull(code) || StringUtils.isEmpty(code.toString())) {
|
||||
return "";
|
||||
}
|
||||
|
||||
RedisUtils.del(captchaKey);
|
||||
return code.toString();
|
||||
}
|
||||
|
||||
public static void set(String code, String uuid) {
|
||||
String ip = IpUtils.getIpAddress().replaceAll("\\.", "");
|
||||
String verifyKey = YmlUtils.get("like.captcha.token") + ip + ":" + uuid;
|
||||
long expireTime = Long.parseLong(YmlUtils.get("like.captcha.expire"));
|
||||
|
||||
RedisUtils.set(verifyKey, code.toLowerCase(), expireTime);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
package com.yj.admin.config;
|
||||
|
||||
import com.google.code.kaptcha.impl.DefaultKaptcha;
|
||||
import com.google.code.kaptcha.util.Config;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import static com.google.code.kaptcha.Constants.*;
|
||||
|
||||
/**
|
||||
* 验证码配置
|
||||
*/
|
||||
@Configuration
|
||||
public class KaptChaConfig {
|
||||
|
||||
@Bean(name = "captchaProducer")
|
||||
public DefaultKaptcha getKaptchaBean() {
|
||||
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
|
||||
Properties properties = new Properties();
|
||||
// 是否边框
|
||||
properties.setProperty(KAPTCHA_BORDER, "yes");
|
||||
// 字符颜色
|
||||
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
|
||||
// 图片宽度
|
||||
properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
|
||||
// 图片高度
|
||||
properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
|
||||
// 字符大小
|
||||
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
|
||||
// 验证键码
|
||||
properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
|
||||
// 字符长度
|
||||
properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
|
||||
// 字体样式
|
||||
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
|
||||
// 图片样式
|
||||
properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
|
||||
Config config = new Config(properties);
|
||||
defaultKaptcha.setConfig(config);
|
||||
return defaultKaptcha;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.yj.admin.config;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* MybatisPlus配置
|
||||
*/
|
||||
@Configuration
|
||||
public class MybatisPlusConfig {
|
||||
|
||||
/**
|
||||
* 分页插件集成
|
||||
*/
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
package com.yj.admin.config;
|
||||
|
||||
import com.yj.common.config.GlobalConfig;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import springfox.documentation.builders.ApiInfoBuilder;
|
||||
import springfox.documentation.builders.RequestHandlerSelectors;
|
||||
import springfox.documentation.oas.annotations.EnableOpenApi;
|
||||
import springfox.documentation.service.ApiInfo;
|
||||
import springfox.documentation.service.Contact;
|
||||
import springfox.documentation.spi.DocumentationType;
|
||||
import springfox.documentation.spring.web.plugins.Docket;
|
||||
|
||||
@Configuration
|
||||
@EnableOpenApi
|
||||
public class SwaggerConfig {
|
||||
|
||||
@Value("${like.swagger.enabled}")
|
||||
private boolean enabled;
|
||||
|
||||
@Value("${like.swagger.pathMapping}")
|
||||
private String pathMapping;
|
||||
|
||||
@Bean
|
||||
public Docket createRestApi(){
|
||||
return new Docket(DocumentationType.OAS_30)
|
||||
.apiInfo(apiInfo())
|
||||
.enable(enabled)
|
||||
.select()
|
||||
.apis(RequestHandlerSelectors.basePackage("com.yj.admin.controller"))
|
||||
.build()
|
||||
.pathMapping(pathMapping);
|
||||
}
|
||||
|
||||
private ApiInfo apiInfo(){
|
||||
String author = "FZR";
|
||||
String url = "https://gitee.com/likeadmin/likeadmin_java";
|
||||
String email = "tinyants@163.com";
|
||||
|
||||
return new ApiInfoBuilder()
|
||||
.title("LikeAdmin【后台】接口文档")
|
||||
.description("likeadmin是一套使用流行的技术栈的快速开发管理后台")
|
||||
.version(GlobalConfig.version)
|
||||
.contact(new Contact(author, url, email))
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
package com.yj.admin.config;
|
||||
|
||||
import com.yj.admin.LikeAdminInterceptor;
|
||||
import com.yj.common.config.GlobalConfig;
|
||||
import com.yj.common.util.YmlUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* Web配置
|
||||
*/
|
||||
@Configuration
|
||||
public class WebMvcConfig implements WebMvcConfigurer {
|
||||
|
||||
@Resource
|
||||
LikeAdminInterceptor likeAdminInterceptor;
|
||||
|
||||
/**
|
||||
* 配置允许跨域
|
||||
*/
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping("/**")
|
||||
.allowedOrigins("*")
|
||||
.allowedHeaders("*")
|
||||
.allowedMethods("GET", "POST", "DELETE", "PUT")
|
||||
.maxAge(3600);
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录拦截器
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(likeAdminInterceptor)
|
||||
.addPathPatterns("/**");
|
||||
}
|
||||
|
||||
/**
|
||||
* 资源目录映射
|
||||
*/
|
||||
@Override
|
||||
public void addResourceHandlers(@NotNull ResourceHandlerRegistry registry) {
|
||||
String directory = YmlUtils.get("like.upload-directory");
|
||||
registry.addResourceHandler("/"+ GlobalConfig.adminPublicPrefix +"/**")
|
||||
.addResourceLocations("file:" + directory);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package com.yj.admin.config.quartz;
|
||||
|
||||
import org.quartz.CronExpression;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 表达式工具
|
||||
*/
|
||||
public class CronUtils {
|
||||
|
||||
/**
|
||||
* 验证表达式是否有效
|
||||
*
|
||||
* @param cronExpression 表达式
|
||||
* @return true=有效,false=无效
|
||||
*/
|
||||
public static boolean isValid(String cronExpression) {
|
||||
return CronExpression.isValidExpression(cronExpression);
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证表达式消息无效给出有效性
|
||||
*
|
||||
* @param cronExpression 表达式
|
||||
* @return null=有效, 其它=无效时的错误描述
|
||||
*/
|
||||
public static String invalidMessage(String cronExpression) {
|
||||
try {
|
||||
new CronExpression(cronExpression);
|
||||
return null;
|
||||
} catch (ParseException pe) {
|
||||
return pe.getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 下一个执行时间点
|
||||
*
|
||||
* @param cronExpression n表达式
|
||||
* @return Date下次表达式执行时间
|
||||
*/
|
||||
public static Date nextExecution(String cronExpression)
|
||||
{
|
||||
try {
|
||||
CronExpression cron = new CronExpression(cronExpression);
|
||||
return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
|
||||
} catch (ParseException e) {
|
||||
throw new IllegalArgumentException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
package com.yj.admin.config.quartz;
|
||||
|
||||
import com.yj.common.entity.DevCrontab;
|
||||
import com.yj.common.util.SpringUtils;
|
||||
import com.yj.common.util.StringUtils;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 执行工具
|
||||
*/
|
||||
public class InvokeUtils {
|
||||
|
||||
/**
|
||||
* 执行方法
|
||||
*
|
||||
* @param crontab 系统任务
|
||||
*/
|
||||
public static void invokeMethod(DevCrontab crontab) throws Exception {
|
||||
String invokeTarget = crontab.getCommand();
|
||||
String beanName = getBeanName(invokeTarget);
|
||||
String methodName = getMethodName(invokeTarget);
|
||||
List<Object[]> methodParams = getMethodParams(invokeTarget);
|
||||
|
||||
if (!isValidClassName(beanName)) {
|
||||
Object bean = SpringUtils.getBean(beanName);
|
||||
invokeMethod(bean, methodName, methodParams);
|
||||
} else {
|
||||
Object bean = Class.forName(beanName).newInstance();
|
||||
invokeMethod(bean, methodName, methodParams);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用任务方法
|
||||
*
|
||||
* @param bean 目标对象
|
||||
* @param methodName 方法名称
|
||||
* @param methodParams 方法参数
|
||||
*/
|
||||
private static void invokeMethod(Object bean, String methodName, List<Object[]> methodParams)
|
||||
throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException,
|
||||
InvocationTargetException {
|
||||
if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) {
|
||||
Method method = bean.getClass().getMethod(methodName, getMethodParamsType(methodParams));
|
||||
method.invoke(bean, getMethodParamsValue(methodParams));
|
||||
} else {
|
||||
Method method = bean.getClass().getMethod(methodName);
|
||||
method.invoke(bean);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 校验是否为为class包名
|
||||
*
|
||||
* @param invokeTarget 名称
|
||||
* @return true是 false否
|
||||
*/
|
||||
public static boolean isValidClassName(String invokeTarget) {
|
||||
return StringUtils.countMatches(invokeTarget, ".") > 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取bean名称
|
||||
*
|
||||
* @param invokeTarget 目标字符串
|
||||
* @return bean名称
|
||||
*/
|
||||
public static String getBeanName(String invokeTarget) {
|
||||
String beanName = StringUtils.substringBefore(invokeTarget, "(");
|
||||
return StringUtils.substringBeforeLast(beanName, ".");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取bean方法
|
||||
*
|
||||
* @param invokeTarget 目标字符串
|
||||
* @return method方法
|
||||
*/
|
||||
public static String getMethodName(String invokeTarget) {
|
||||
String methodName = StringUtils.substringBefore(invokeTarget, "(");
|
||||
return StringUtils.substringAfterLast(methodName, ".");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取method方法参数相关列表
|
||||
*
|
||||
* @param invokeTarget 目标字符串
|
||||
* @return method方法相关参数列表
|
||||
*/
|
||||
public static List<Object[]> getMethodParams(String invokeTarget) {
|
||||
String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")");
|
||||
if (StringUtils.isEmpty(methodStr)) {
|
||||
return null;
|
||||
}
|
||||
String[] methodParams = methodStr.split(",(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)");
|
||||
List<Object[]> clazz = new LinkedList<>();
|
||||
for (String methodParam : methodParams) {
|
||||
String str = StringUtils.trimToEmpty(methodParam);
|
||||
if (StringUtils.startsWithAny(str, "'", "\"")) {
|
||||
clazz.add(new Object[]{StringUtils.substring(str, 1, str.length() - 1), String.class});
|
||||
} else if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str)) {
|
||||
clazz.add(new Object[]{Boolean.valueOf(str), Boolean.class});
|
||||
} else if (StringUtils.endsWith(str, "L")) {
|
||||
clazz.add(new Object[]{Long.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Long.class});
|
||||
} else if (StringUtils.endsWith(str, "D")) {
|
||||
clazz.add(new Object[]{Double.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Double.class});
|
||||
} else {
|
||||
clazz.add(new Object[]{Integer.valueOf(str), Integer.class});
|
||||
}
|
||||
}
|
||||
return clazz;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参数类型
|
||||
*
|
||||
* @param methodParams 参数相关列表
|
||||
* @return 参数类型列表
|
||||
*/
|
||||
public static Class<?>[] getMethodParamsType(List<Object[]> methodParams) {
|
||||
Class<?>[] clazz = new Class<?>[methodParams.size()];
|
||||
int index = 0;
|
||||
for (Object[] os : methodParams)
|
||||
{
|
||||
clazz[index] = (Class<?>) os[1];
|
||||
index++;
|
||||
}
|
||||
return clazz;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参数值
|
||||
*
|
||||
* @param methodParams 参数相关列表
|
||||
* @return 参数值列表
|
||||
*/
|
||||
public static Object[] getMethodParamsValue(List<Object[]> methodParams) {
|
||||
Object[] clazz = new Object[methodParams.size()];
|
||||
int index = 0;
|
||||
for (Object[] os : methodParams) {
|
||||
clazz[index] = os[0];
|
||||
index++;
|
||||
}
|
||||
return clazz;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
package com.yj.admin.config.quartz;
|
||||
|
||||
import com.yj.admin.config.quartz.exceution.QuartzJobExecution;
|
||||
import com.yj.common.entity.DevCrontab;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import org.quartz.*;
|
||||
|
||||
/**
|
||||
* 计划任务工具
|
||||
*/
|
||||
public class QuartzUtils {
|
||||
|
||||
/**
|
||||
* 得到quartz任务类
|
||||
*
|
||||
* @param crontab 执行计划
|
||||
* @return 具体执行任务类
|
||||
*/
|
||||
private static Class<? extends Job> getQuartzJobClass(DevCrontab crontab) {
|
||||
// boolean isConcurrent = crontab.getConcurrent().equals(0);
|
||||
// return isConcurrent ? QuartzJobExecution.class : QuartzDisExecution.class;
|
||||
return QuartzJobExecution.class;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建任务对象Key
|
||||
*
|
||||
* @param jobId (任务ID)
|
||||
* @param jobGroup (任务分组)
|
||||
* @return JobKey
|
||||
*/
|
||||
public static JobKey getJobKey(Integer jobId, String jobGroup) {
|
||||
return JobKey.jobKey(TaskConstants.TASK_CLASS_NAME + jobId, jobGroup);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建触发对象Key
|
||||
*
|
||||
* @param jobId (任务ID)
|
||||
* @param jobGroup (任务分组)
|
||||
* @return TriggerKey
|
||||
*/
|
||||
public static TriggerKey getTriggerKey(Integer jobId, String jobGroup) {
|
||||
return TriggerKey.triggerKey(TaskConstants.TASK_PROPERTIES + jobId, jobGroup);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建定时任务
|
||||
*
|
||||
* @param scheduler 调度器
|
||||
* @param job 任务
|
||||
* @throws SchedulerException 调度异常
|
||||
*/
|
||||
public static void createScheduleJob(Scheduler scheduler, DevCrontab job) throws SchedulerException {
|
||||
Integer jobId = job.getId();
|
||||
String jobGroup = job.getType().toString();
|
||||
String expression = job.getExpression();
|
||||
|
||||
|
||||
// 构建任务
|
||||
Class<? extends Job> jobClass = getQuartzJobClass(job);
|
||||
JobDetail jobDetail = JobBuilder.newJob(jobClass)
|
||||
.withIdentity(getJobKey(jobId, jobGroup))
|
||||
.build();
|
||||
|
||||
// 构建时间
|
||||
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(expression);
|
||||
// switch (job.getStrategy()) {
|
||||
// case 1: // 立即执行
|
||||
// cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();
|
||||
// break;
|
||||
// case 2: // 执行一次
|
||||
// cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionFireAndProceed();
|
||||
// break;
|
||||
// case 3: // 放弃执行
|
||||
// cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionDoNothing();
|
||||
// break;
|
||||
// }
|
||||
|
||||
cronScheduleBuilder = cronScheduleBuilder.withMisfireHandlingInstructionIgnoreMisfires();
|
||||
|
||||
// 注入参数
|
||||
jobDetail.getJobDataMap().put(TaskConstants.TASK_PROPERTIES, job);
|
||||
|
||||
// 构建目标
|
||||
CronTrigger trigger = TriggerBuilder.newTrigger()
|
||||
.withIdentity(getTriggerKey(jobId, jobGroup))
|
||||
.withSchedule(cronScheduleBuilder)
|
||||
.build();
|
||||
|
||||
// 如果存在则删除
|
||||
if (scheduler.checkExists(getJobKey(jobId, jobGroup))) {
|
||||
scheduler.deleteJob(getJobKey(jobId, jobGroup));
|
||||
}
|
||||
|
||||
// 如果过期则调度
|
||||
if (StringUtils.isNotNull(CronUtils.nextExecution(job.getExpression()))) {
|
||||
scheduler.scheduleJob(jobDetail, trigger);
|
||||
}
|
||||
|
||||
// 如果暂停则停止
|
||||
if (!job.getStatus().equals(TaskConstants.STATUS_RUN)) {
|
||||
scheduler.pauseJob(getJobKey(jobId, jobGroup));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
package com.yj.admin.config.quartz;
|
||||
|
||||
/**
|
||||
* 计划任务常量
|
||||
*/
|
||||
public class TaskConstants {
|
||||
|
||||
/** 执行任务名 */
|
||||
public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
|
||||
|
||||
/** 执行目标键 */
|
||||
public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
|
||||
|
||||
/** 状态: 运行 */
|
||||
public static final Integer STATUS_RUN = 1;
|
||||
|
||||
/** 状态: 失败 */
|
||||
public static final Integer STATUS_FAIL = 2;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
package com.yj.admin.config.quartz.exceution;
|
||||
|
||||
import com.yj.admin.config.quartz.TaskConstants;
|
||||
import com.yj.common.entity.DevCrontab;
|
||||
import com.yj.common.mapper.DevCrontabMapper;
|
||||
import com.yj.common.util.SpringUtils;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
||||
public abstract class AbstractQuartzJob implements Job {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class);
|
||||
|
||||
/**
|
||||
* 线程本地变量
|
||||
*/
|
||||
private static final ThreadLocal<Long> threadLocal = new ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 执行
|
||||
*
|
||||
* @param context 上下文
|
||||
*/
|
||||
@Override
|
||||
public void execute(JobExecutionContext context) {
|
||||
DevCrontab crontab = new DevCrontab();
|
||||
BeanUtils.copyProperties(context.getMergedJobDataMap().get(TaskConstants.TASK_PROPERTIES), crontab);
|
||||
try {
|
||||
before();
|
||||
doExecute(context, crontab);
|
||||
after(crontab, null);
|
||||
} catch (Exception e) {
|
||||
log.error("任务执行异常:", e);
|
||||
after(crontab, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行前
|
||||
*/
|
||||
protected void before() {
|
||||
threadLocal.set(System.currentTimeMillis());
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行后
|
||||
*
|
||||
* @param crontab 系统计划任务
|
||||
*/
|
||||
protected void after(DevCrontab crontab, Exception e)
|
||||
{
|
||||
long startTime = threadLocal.get();
|
||||
long endTime = System.currentTimeMillis();
|
||||
threadLocal.remove();
|
||||
|
||||
crontab.setError("");
|
||||
// crontab.set(startTime / 1000);
|
||||
crontab.setLastTime(endTime / 1000);
|
||||
crontab.setMaxTime(endTime - startTime);
|
||||
crontab.setTime(endTime - startTime);
|
||||
if (StringUtils.isNotNull(e)) {
|
||||
crontab.setError(e.getMessage());
|
||||
crontab.setStatus(TaskConstants.STATUS_FAIL);
|
||||
}
|
||||
|
||||
SpringUtils.getBean(DevCrontabMapper.class).updateById(crontab);
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行方法
|
||||
*
|
||||
* @param context 工作执行上下文对象
|
||||
* @param sysJob 系统计划任务
|
||||
* @throws Exception 执行过程中的异常
|
||||
*/
|
||||
protected abstract void doExecute(JobExecutionContext context, DevCrontab sysJob) throws Exception;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.yj.admin.config.quartz.exceution;
|
||||
|
||||
import com.yj.admin.config.quartz.InvokeUtils;
|
||||
import com.yj.common.entity.DevCrontab;
|
||||
import org.quartz.DisallowConcurrentExecution;
|
||||
import org.quartz.JobExecutionContext;
|
||||
|
||||
/**
|
||||
* 禁止并发任务
|
||||
*/
|
||||
@DisallowConcurrentExecution
|
||||
public class QuartzDisExecution extends AbstractQuartzJob {
|
||||
|
||||
@Override
|
||||
protected void doExecute(JobExecutionContext context, DevCrontab crontab) throws Exception {
|
||||
InvokeUtils.invokeMethod(crontab);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.yj.admin.config.quartz.exceution;
|
||||
|
||||
import com.yj.admin.config.quartz.InvokeUtils;
|
||||
import com.yj.common.entity.DevCrontab;
|
||||
import org.quartz.JobExecutionContext;
|
||||
|
||||
/**
|
||||
* 允许并发任务
|
||||
*/
|
||||
public class QuartzJobExecution extends AbstractQuartzJob {
|
||||
|
||||
@Override
|
||||
protected void doExecute(JobExecutionContext context, DevCrontab crontab) throws Exception {
|
||||
InvokeUtils.invokeMethod(crontab);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.yj.admin.config.stp;
|
||||
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import cn.dev33.satoken.exception.NotPermissionException;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.enums.ErrorEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
|
||||
/**
|
||||
* Sa-Token的异常拦截
|
||||
*/
|
||||
@Slf4j
|
||||
@ControllerAdvice
|
||||
public class StpInException {
|
||||
|
||||
/**
|
||||
* 拦截登录异常
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(NotLoginException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult<Object> handleNotLoginException(NotLoginException e){
|
||||
String msg = e.getMessage().startsWith("Token无效") ? "尚未登录,请先登录!" : e.getMessage();
|
||||
return AjaxResult.failed(ErrorEnum.TOKEN_INVALID.getCode(), msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 拦截权限异常
|
||||
*/
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
@ExceptionHandler(NotPermissionException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult<Object> handleNotPermissionException(){
|
||||
return AjaxResult.failed(ErrorEnum.NO_PERMISSION.getCode(), ErrorEnum.NO_PERMISSION.getMsg());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
package com.yj.admin.config.stp;
|
||||
|
||||
import cn.dev33.satoken.stp.StpInterface;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.service.admin.IAdminRoleService;
|
||||
import com.yj.common.entity.system.SystemMenu;
|
||||
import com.yj.common.entity.system.SystemRoleMenu;
|
||||
import com.yj.common.mapper.system.SystemMenuMapper;
|
||||
import com.yj.common.mapper.system.SystemRoleMenuMapper;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Sa-Token自定义权限验证接口
|
||||
*/
|
||||
@Component
|
||||
public class StpInterConfig implements StpInterface {
|
||||
|
||||
@Resource
|
||||
SystemRoleMenuMapper systemRoleMenuMapper;
|
||||
|
||||
@Resource
|
||||
SystemMenuMapper systemAuthMenuMapper;
|
||||
|
||||
@Resource
|
||||
IAdminRoleService iAdminRoleService;
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的权限码集合
|
||||
*
|
||||
* @param loginId 登录ID
|
||||
* @param loginType 登录类型
|
||||
* @return List<String>
|
||||
*/
|
||||
@Override
|
||||
public List<String> getPermissionList(Object loginId, String loginType) {
|
||||
List<Integer> roleIds = LikeAdminThreadLocal.getRoleIds();
|
||||
List<String> perms = new LinkedList<>();
|
||||
if (roleIds.isEmpty()) {
|
||||
return perms;
|
||||
}
|
||||
|
||||
List<SystemRoleMenu> permList = systemRoleMenuMapper.selectList(
|
||||
new QueryWrapper<SystemRoleMenu>()
|
||||
.select("role_id,menu_id")
|
||||
.in("role_id", roleIds));
|
||||
|
||||
if (permList.isEmpty()) {
|
||||
return perms;
|
||||
}
|
||||
|
||||
List<Integer> menuIds = new LinkedList<>();
|
||||
for (SystemRoleMenu systemAuthPerm : permList) {
|
||||
menuIds.add(systemAuthPerm.getMenuId());
|
||||
}
|
||||
|
||||
List<SystemMenu> systemAuthMenus = systemAuthMenuMapper.selectList(
|
||||
new QueryWrapper<SystemMenu>()
|
||||
.select("id,perms")
|
||||
.eq("is_disable", 0)
|
||||
.in("id", menuIds)
|
||||
.in("type", Arrays.asList("C", "A"))
|
||||
.orderByAsc(Arrays.asList("sort", "id")));
|
||||
|
||||
for (SystemMenu item : systemAuthMenus) {
|
||||
if (StringUtils.isNotNull(item.getPerms()) && StringUtils.isNotEmpty(item.getPerms())) {
|
||||
// perms.add(item.getPerms().trim().replace("/", ":"));
|
||||
perms.add(item.getPerms().trim());
|
||||
}
|
||||
}
|
||||
|
||||
return perms;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的角色标识集合
|
||||
*
|
||||
* @param loginId 登录ID
|
||||
* @param loginType 登录类型
|
||||
* @return List<String>
|
||||
*/
|
||||
@Override
|
||||
public List<String> getRoleList(Object loginId, String loginType) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.IArtCateService;
|
||||
import com.yj.admin.validate.article.ArtCateCreateValidate;
|
||||
import com.yj.admin.validate.article.ArtCateUpdateValidate;
|
||||
import com.yj.admin.validate.article.ArtCateSearchValidate;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.article.ArticleCateVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping({"/adminapi/article/articleCate", "/adminapi/article.articleCate"})
|
||||
@Api(tags = "文章分类管理")
|
||||
public class ArtCateController {
|
||||
|
||||
@Resource
|
||||
IArtCateService iArtCateService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="所有分类")
|
||||
public AjaxResult<List<ArticleCateVo>> all() {
|
||||
List<ArticleCateVo> list = iArtCateService.all();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="分类列表")
|
||||
public AjaxResult<PageResult<ArticleCateVo>> list(@Validated PageValidate pageValidate,
|
||||
@Validated ArtCateSearchValidate searchValidate) {
|
||||
PageResult<ArticleCateVo> list = iArtCateService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="分类详情")
|
||||
public AjaxResult<ArticleCateVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
ArticleCateVo vo = iArtCateService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "文章分类新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="分类新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody ArtCateCreateValidate createValidate) {
|
||||
iArtCateService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文章分类编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="分类编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody ArtCateUpdateValidate updateValidate) {
|
||||
iArtCateService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文章分类删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="分类删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iArtCateService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文章分类状态")
|
||||
@PostMapping("/updateStatus")
|
||||
@ApiOperation(value="分类状态")
|
||||
public AjaxResult<Object> change(@Validated @RequestBody IdValidate idValidate) {
|
||||
iArtCateService.change(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IArticleService;
|
||||
import com.yj.admin.validate.article.ArticleCreateValidate;
|
||||
import com.yj.admin.validate.article.ArticleSearchValidate;
|
||||
import com.yj.admin.validate.article.ArticleUpdateValidate;
|
||||
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.article.ArticleDetailVo;
|
||||
import com.yj.admin.vo.article.ArticleListedVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping({"adminapi/article/article", "adminapi/article.article"})
|
||||
@Api(tags = "文章数据管理")
|
||||
public class ArticleController {
|
||||
|
||||
@Resource
|
||||
IArticleService iArticleService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="文章列表")
|
||||
public AjaxResult<PageResult<ArticleListedVo>> list(@Validated PageValidate pageValidate,
|
||||
@Validated ArticleSearchValidate searchValidate) {
|
||||
PageResult<ArticleListedVo> vos = iArticleService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(vos);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="文章详情")
|
||||
public AjaxResult<ArticleDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
ArticleDetailVo vo = iArticleService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "文章新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="文章新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody ArticleCreateValidate createValidate) {
|
||||
iArticleService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文章编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="文章编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody ArticleUpdateValidate updateValidate) {
|
||||
iArticleService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文章删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="文章删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iArticleService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文章状态")
|
||||
@PostMapping("/updateStatus")
|
||||
@ApiOperation(value="文章状态")
|
||||
public AjaxResult<Object> change(@Validated @RequestBody IdValidate idValidate) {
|
||||
iArticleService.change(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ICrontabService;
|
||||
import com.yj.admin.validate.crontab.CrontabCreateValidate;
|
||||
import com.yj.admin.validate.crontab.CrontabUpdateValidate;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.CrontabDetailVo;
|
||||
import com.yj.admin.vo.CrontabListedVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.exception.OperateException;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.quartz.CronExpression;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/crontab.crontab")
|
||||
@Api(tags = "计划任务管理")
|
||||
public class CrontabController {
|
||||
|
||||
@Resource
|
||||
ICrontabService iCrontabService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="计划任务列表")
|
||||
public AjaxResult< PageResult<CrontabListedVo>> list(@Validated PageValidate pageValidate) {
|
||||
PageResult<CrontabListedVo> list = iCrontabService.list(pageValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="计划任务详情")
|
||||
public AjaxResult<Object> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
CrontabDetailVo vo = iCrontabService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "计划任务新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="计划任务新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody CrontabCreateValidate createValidate) throws SchedulerException {
|
||||
iCrontabService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "计划任务编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="计划任务编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody CrontabUpdateValidate updateValidate) throws SchedulerException {
|
||||
iCrontabService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "计划任务删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="计划任务删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) throws SchedulerException {
|
||||
iCrontabService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/expression")
|
||||
@ApiOperation(value="计划任务列表")
|
||||
public AjaxResult<List<Map<String, String>>> expression(@Validated @RequestParam("expression") String expression) {
|
||||
return AjaxResult.success(getExpression(expression));
|
||||
}
|
||||
|
||||
|
||||
public static List<Map<String, String>> getExpression(String cronExpression) {
|
||||
try {
|
||||
CronExpression cron = new CronExpression(cronExpression);
|
||||
List<Date> dates = new ArrayList<>();
|
||||
|
||||
Date date = new Date();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
Date nextValidTimeAfter = cron.getNextValidTimeAfter(date); // 假设从当前时间开始
|
||||
if (nextValidTimeAfter != null) {
|
||||
dates.add(nextValidTimeAfter);
|
||||
date = nextValidTimeAfter;
|
||||
} else {
|
||||
break; // 如果没有更多的有效时间,则退出循环
|
||||
}
|
||||
}
|
||||
|
||||
List<Map<String, String>> lists = new ArrayList<>();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
for (int i = 0; i < dates.size(); i++) {
|
||||
Map<String, String> entry = new HashMap<>();
|
||||
entry.put("time", String.valueOf(i + 1));
|
||||
entry.put("date", sdf.format(dates.get(i)));
|
||||
lists.add(entry);
|
||||
}
|
||||
|
||||
// 添加额外的条目
|
||||
Map<String, String> extraEntry = new HashMap<>();
|
||||
extraEntry.put("time", "x");
|
||||
extraEntry.put("date", "……");
|
||||
lists.add(extraEntry);
|
||||
|
||||
return lists;
|
||||
} catch (Exception e) {
|
||||
// 注意:在Java中,通常不会直接返回异常消息作为业务逻辑的一部分
|
||||
// 这里为了与PHP函数保持一致,我们返回异常消息,但在实际应用中应避免这样做
|
||||
throw new OperateException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IFileService;
|
||||
import com.yj.admin.validate.file.FileCateValidate;
|
||||
import com.yj.admin.validate.file.FileMoveValidate;
|
||||
import com.yj.admin.validate.file.FileRenameValidate;
|
||||
import com.yj.admin.validate.file.FileSearchValidate;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.IdsValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.album.FileVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/file")
|
||||
@Api(tags = "文件数据管理")
|
||||
public class FileController {
|
||||
|
||||
@Resource
|
||||
IFileService fileService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="文件列表")
|
||||
public AjaxResult<PageResult<FileVo>> fileList(@Validated PageValidate pageValidate,
|
||||
@Validated FileSearchValidate searchValidate) {
|
||||
PageResult<FileVo> voPageResult = fileService.fileList(pageValidate, searchValidate);
|
||||
return AjaxResult.success(voPageResult);
|
||||
}
|
||||
|
||||
@Log(title = "文件重命名")
|
||||
@PostMapping("/rename")
|
||||
@ApiOperation(value="文件重命名")
|
||||
public AjaxResult<Object> rename(@Validated @RequestBody FileRenameValidate renameValidate) {
|
||||
fileService.fileRename(renameValidate.getId(), renameValidate.getName());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文件移动")
|
||||
@PostMapping("/move")
|
||||
@ApiOperation(value="相册文件移动")
|
||||
public AjaxResult<Object> move(@Validated @RequestBody FileMoveValidate moveValidate) {
|
||||
fileService.fileMove(moveValidate.getIds(), moveValidate.getCid());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "文件删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="相册文件删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdsValidate idsValidate) {
|
||||
fileService.fileDel(idsValidate.getIds());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@GetMapping("/listCate")
|
||||
@ApiOperation(value="文件分类列表")
|
||||
public AjaxResult<JSONObject> cateList(@Validated FileSearchValidate searchValidate) {
|
||||
JSONObject result = fileService.cateList(searchValidate);
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
@Log(title = "分类新增")
|
||||
@PostMapping("/addCate")
|
||||
@ApiOperation(value="分类新增")
|
||||
public AjaxResult<Object> cateAdd(@Validated @RequestBody FileCateValidate cateValidate) {
|
||||
fileService.cateAdd(cateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "相册分类重命名")
|
||||
@PostMapping("/editCate")
|
||||
@ApiOperation(value="相册分类重命名")
|
||||
public AjaxResult<Object> cateRename(@Validated @RequestBody FileRenameValidate renameValidate) {
|
||||
fileService.cateRename(renameValidate.getId(), renameValidate.getName());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "相册分类删除")
|
||||
@PostMapping("/delCate")
|
||||
@ApiOperation(value="相册分类删除")
|
||||
public AjaxResult<Object> cateDel(@Validated @RequestBody IdValidate idValidate) {
|
||||
fileService.cateDel(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.yj.admin.service.IIndexService;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/workbench")
|
||||
@Api(tags = "主页数据管理")
|
||||
public class IndexController {
|
||||
|
||||
@Resource
|
||||
IIndexService iIndexService;
|
||||
|
||||
@GetMapping("/index")
|
||||
@ApiOperation(value="控制台")
|
||||
public AjaxResult<Map<String, Object>> index() {
|
||||
Map<String, Object> map = iIndexService.index();
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.aop.aspect.RequestType;
|
||||
import com.yj.admin.service.IFileService;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.enums.AlbumEnum;
|
||||
import com.yj.common.exception.OperateException;
|
||||
import com.yj.common.plugin.storage.StorageDriver;
|
||||
import com.yj.common.plugin.storage.UploadFilesVo;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/upload")
|
||||
@Api(tags = "上传文件管理")
|
||||
public class UploadController {
|
||||
|
||||
@Resource
|
||||
IFileService fileService;
|
||||
|
||||
@Log(title = "上传图片", requestType = RequestType.File)
|
||||
@PostMapping("/image")
|
||||
@NotPower
|
||||
@ApiOperation(value="上传图片")
|
||||
public AjaxResult image(@RequestParam("file") MultipartFile[] files, @RequestParam("cid") String requestCid) {
|
||||
|
||||
String cid = StringUtils.isNotEmpty(requestCid) ? requestCid : "0";
|
||||
|
||||
if (files == null || files.length == 0) {
|
||||
throw new OperateException("请选择上传图片!");
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
StorageDriver storageDriver = new StorageDriver();
|
||||
UploadFilesVo vo = storageDriver.upload(files[i], "image", AlbumEnum.IMAGE.getCode());
|
||||
Map<String, String> album = new LinkedHashMap<>();
|
||||
album.put("aid", String.valueOf(LikeAdminThreadLocal.getAdminId()));
|
||||
album.put("cid", cid);
|
||||
album.put("type", String.valueOf(AlbumEnum.IMAGE.getCode()));
|
||||
// album.put("size", vo.getSize().toString());
|
||||
// album.put("ext", vo.getExt());
|
||||
album.put("url", vo.getUrl());
|
||||
album.put("name", vo.getName());
|
||||
Integer id = fileService.fileAdd(album);
|
||||
vo.setId(id);
|
||||
}
|
||||
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "上传图片", requestType = RequestType.File)
|
||||
@PostMapping("/file")
|
||||
@NotPower
|
||||
@ApiOperation(value="上传文件")
|
||||
public AjaxResult file(@RequestParam("file") MultipartFile[] files, @RequestParam("cid") String requestCid) {
|
||||
|
||||
String cid = StringUtils.isNotEmpty(requestCid) ? requestCid : "0";
|
||||
|
||||
if (files == null || files.length == 0) {
|
||||
throw new OperateException("请选择上传文件!");
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
StorageDriver storageDriver = new StorageDriver();
|
||||
UploadFilesVo vo = storageDriver.upload(files[i], "image", AlbumEnum.Doc.getCode());
|
||||
Map<String, String> album = new LinkedHashMap<>();
|
||||
album.put("aid", String.valueOf(LikeAdminThreadLocal.getAdminId()));
|
||||
album.put("cid", cid);
|
||||
album.put("type", String.valueOf(AlbumEnum.Doc.getCode()));
|
||||
// album.put("size", vo.getSize().toString());
|
||||
// album.put("ext", vo.getExt());
|
||||
album.put("url", vo.getUrl());
|
||||
album.put("name", vo.getName());
|
||||
Integer id = fileService.fileAdd(album);
|
||||
vo.setId(id);
|
||||
}
|
||||
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "上传视频", requestType = RequestType.File)
|
||||
@PostMapping("/video")
|
||||
@NotPower
|
||||
@ApiOperation(value="上传视频")
|
||||
public AjaxResult video(@RequestParam("file") MultipartFile[] files, @RequestParam("cid") String requestCid) {
|
||||
|
||||
String cid = StringUtils.isNotEmpty(requestCid) ? requestCid : "0";
|
||||
|
||||
|
||||
if (files == null || files.length == 0) {
|
||||
throw new OperateException("请选择上传视频!");
|
||||
}
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
|
||||
StorageDriver storageDriver = new StorageDriver();
|
||||
UploadFilesVo vo = storageDriver.upload(files[i], "video", AlbumEnum.Video.getCode());
|
||||
|
||||
Map<String, String> album = new LinkedHashMap<>();
|
||||
album.put("cid", cid);
|
||||
album.put("aid", String.valueOf(LikeAdminThreadLocal.getAdminId()));
|
||||
album.put("type", String.valueOf(AlbumEnum.Video.getCode()));
|
||||
// album.put("ext", vo.getExt());
|
||||
// album.put("size", vo.getSize().toString());
|
||||
album.put("url", vo.getUrl());
|
||||
album.put("name", vo.getName());
|
||||
Integer id = fileService.fileAdd(album);
|
||||
|
||||
vo.setId(id);
|
||||
}
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package com.yj.admin.controller;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IUserService;
|
||||
import com.yj.admin.validate.user.UserSearchValidate;
|
||||
import com.yj.admin.validate.user.UserUpdateValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.user.UserWalletValidate;
|
||||
import com.yj.admin.vo.user.UserVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.enums.ErrorEnum;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping({"adminapi/user/user", "adminapi/user.user"})
|
||||
@Api(tags = "用户数据管理")
|
||||
public class UserController {
|
||||
|
||||
@Resource
|
||||
IUserService iUserService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="用户列表")
|
||||
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
|
||||
@Validated UserSearchValidate searchValidate) {
|
||||
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
|
||||
JSONObject ret = iUserService.getExportData(pageValidate, searchValidate);
|
||||
return AjaxResult.success(ret);
|
||||
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
|
||||
String path = iUserService.export(searchValidate);
|
||||
return AjaxResult.success(2, new JSONObject() {{
|
||||
put("url", path);
|
||||
}}, ErrorEnum.SHOW_MSG.getCode());
|
||||
} else {
|
||||
PageResult<UserVo> list = iUserService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="用户详情")
|
||||
public AjaxResult<UserVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
UserVo vo = iUserService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "用户编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="用户编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody UserUpdateValidate updateValidate) {
|
||||
iUserService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "余额调整")
|
||||
@PostMapping("/adjustMoney")
|
||||
@ApiOperation(value="余额调整")
|
||||
public AjaxResult<Object> adjustWallet(@Validated @RequestBody UserWalletValidate walletValidate) {
|
||||
iUserService.adjustWallet(walletValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.yj.admin.controller.adminapi;
|
||||
|
||||
import com.yj.admin.service.IIndexService;
|
||||
import com.yj.common.aop.NotLogin;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("adminapi/config")
|
||||
@Api(tags = "主页数据管理")
|
||||
public class ConfigController {
|
||||
|
||||
@Resource
|
||||
IIndexService iIndexService;
|
||||
@NotLogin
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="公共配置")
|
||||
public AjaxResult<Map<String, Object>> getConfig() {
|
||||
Map<String, Object> map = iIndexService.config();
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.yj.admin.controller.adminapi;
|
||||
|
||||
import com.yj.admin.service.system.ISystemLoginService;
|
||||
import com.yj.admin.validate.system.SystemAdminLoginsValidate;
|
||||
import com.yj.admin.vo.system.SystemCaptchaVo;
|
||||
import com.yj.admin.vo.system.SystemLoginVo;
|
||||
import com.yj.common.aop.NotLogin;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("adminapi/login")
|
||||
@Api(tags = "系统登录管理")
|
||||
public class LoginController {
|
||||
|
||||
@Resource
|
||||
ISystemLoginService iSystemLoginService;
|
||||
|
||||
@NotLogin
|
||||
@GetMapping("/captcha")
|
||||
@ApiOperation(value="取验证码")
|
||||
public AjaxResult<SystemCaptchaVo> captcha() {
|
||||
SystemCaptchaVo vo = iSystemLoginService.captcha();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@NotLogin
|
||||
@PostMapping("/account")
|
||||
@ApiOperation(value="登录系统")
|
||||
public AjaxResult<SystemLoginVo> account(@Validated() @RequestBody SystemAdminLoginsValidate loginsValidate) {
|
||||
SystemLoginVo vo = iSystemLoginService.login(loginsValidate);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@NotPower
|
||||
@PostMapping("/logout")
|
||||
@ApiOperation(value="退出登录")
|
||||
public AjaxResult<Object> logout(HttpServletRequest request) {
|
||||
iSystemLoginService.logout(request.getHeader("token"));
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
package com.yj.admin.controller.adminapi.auth;
|
||||
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.service.admin.IAdminRoleService;
|
||||
import com.yj.admin.service.admin.IAdminService;
|
||||
import com.yj.admin.validate.system.SystemEditSelfValidate;
|
||||
import com.yj.admin.vo.auth.AdminMySelfVo;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping({"adminapi/auth/admin", "adminapi/auth.admin"})
|
||||
@Api(tags = "管理员详情管理")
|
||||
public class AdminController {
|
||||
|
||||
@Resource
|
||||
IAdminService iAdminService;
|
||||
|
||||
@Resource
|
||||
IAdminRoleService iAdminRoleService;
|
||||
|
||||
@Resource
|
||||
IAdminService iSystemAuthAdminService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/mySelf")
|
||||
@ApiOperation(value="获取当前管理员信息")
|
||||
public AjaxResult<AdminMySelfVo> mySelf() {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
|
||||
List<Integer> roleIds = iAdminRoleService.getRoleIdAttr(adminId);
|
||||
|
||||
AdminMySelfVo mySelf = iAdminService.mySelf(LikeAdminThreadLocal.getAdminId(), roleIds);
|
||||
return AjaxResult.success(mySelf);
|
||||
}
|
||||
|
||||
@PostMapping("/editSelf")
|
||||
@ApiOperation(value = "编辑当前管理员信息")
|
||||
public AjaxResult<Object> editSelf(@Validated @RequestBody SystemEditSelfValidate upInfoValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
iAdminService.editSelf(upInfoValidate, adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IChannelH5ConfigService;
|
||||
import com.yj.admin.validate.channel.ChannelH5Validate;
|
||||
import com.yj.admin.vo.channel.ChannelH5Vo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel.web_page_setting")
|
||||
@Api(tags = "移动渠道设置")
|
||||
public class ChannelH5Controller {
|
||||
|
||||
@Resource
|
||||
IChannelH5ConfigService iChannelH5ConfigService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="H5渠道设置详情")
|
||||
public AjaxResult<ChannelH5Vo> getConfig() {
|
||||
ChannelH5Vo vo = iChannelH5ConfigService.getConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "H5渠道设置保存")
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="H5渠道设置保存")
|
||||
public AjaxResult<Object> setConfig(@Validated @RequestBody ChannelH5Validate channelH5Validate) {
|
||||
iChannelH5ConfigService.setConfig(channelH5Validate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IChannelMpConfigService;
|
||||
import com.yj.admin.validate.channel.ChannelMpValidate;
|
||||
import com.yj.admin.vo.channel.ChannelMpVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel.mnp_settings")
|
||||
@Api(tags = "微信程序渠道")
|
||||
public class ChannelMpController {
|
||||
|
||||
@Resource
|
||||
IChannelMpConfigService iChannelMpConfigService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="微信程序渠道设置详情")
|
||||
public AjaxResult<ChannelMpVo> getConfig() {
|
||||
ChannelMpVo vo = iChannelMpConfigService.getConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "微信小程序渠道设置保存")
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="微信程序渠道设置保存")
|
||||
public AjaxResult<Object> setConfig(@Validated @RequestBody ChannelMpValidate channelMpValidate) {
|
||||
iChannelMpConfigService.setConfig(channelMpValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.yj.admin.service.IChannelOaCallBackService;
|
||||
import com.yj.common.aop.NotLogin;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel/oa/callback")
|
||||
@Api(tags = "公众号服务器验证及消息回复")
|
||||
public class ChannelOaCallBackController {
|
||||
|
||||
@Resource
|
||||
private IChannelOaCallBackService iChannelOaCallBackService;
|
||||
|
||||
@NotLogin
|
||||
@GetMapping(produces = "text/plain;charset=utf-8")
|
||||
@ApiOperation(value="公众号服务器地址验证")
|
||||
public String authGet(@RequestParam(name = "signature", required = false) String signature,
|
||||
@RequestParam(name = "timestamp", required = false) String timestamp,
|
||||
@RequestParam(name = "nonce", required = false) String nonce,
|
||||
@RequestParam(name = "echostr", required = false) String echostr) {
|
||||
return iChannelOaCallBackService.checkSignature(signature, timestamp, nonce, echostr);
|
||||
}
|
||||
|
||||
|
||||
@NotLogin
|
||||
@PostMapping(produces = "application/xml; charset=UTF-8")
|
||||
@ApiOperation(value="公众号消息回复")
|
||||
public String post(@RequestBody String requestBody,
|
||||
@RequestParam("signature") String signature,
|
||||
@RequestParam("timestamp") String timestamp,
|
||||
@RequestParam("nonce") String nonce,
|
||||
@RequestParam(name = "encrypt_type", required = false) String encType,
|
||||
@RequestParam(name = "msg_signature", required = false) String msgSignature) {
|
||||
return iChannelOaCallBackService.post(requestBody, signature, timestamp, nonce, encType, msgSignature);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IChannelOaConfigService;
|
||||
import com.yj.admin.validate.channel.ChannelOaValidate;
|
||||
import com.yj.admin.vo.channel.ChannelOaVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel.official_account_setting")
|
||||
@Api(tags = "公众号渠道设置")
|
||||
public class ChannelOaController {
|
||||
|
||||
@Resource
|
||||
IChannelOaConfigService iChannelOaConfigService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="公众号渠道设置详情")
|
||||
public AjaxResult<ChannelOaVo> getConfig() {
|
||||
ChannelOaVo vo = iChannelOaConfigService.getConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "公众号渠道设置保存")
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="公众号渠道设置保存")
|
||||
public AjaxResult<Object> setConfig(@Validated @RequestBody ChannelOaValidate channelOaValidate) {
|
||||
iChannelOaConfigService.setConfig(channelOaValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.yj.admin.service.IChannelOaMenusService;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel.official_account_menu")
|
||||
@Api(tags = "公众号菜单管理")
|
||||
public class ChannelOaMenuController {
|
||||
|
||||
@Resource
|
||||
IChannelOaMenusService iChannelOaMenusService;
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="菜单详情")
|
||||
public AjaxResult<JSONArray> detail() {
|
||||
JSONArray detail = iChannelOaMenusService.detail();
|
||||
return AjaxResult.success(detail);
|
||||
}
|
||||
|
||||
@PostMapping("/save")
|
||||
@ApiOperation(value="仅是保存菜单")
|
||||
public AjaxResult<Object> save(@RequestBody List<Object> params) {
|
||||
iChannelOaMenusService.save(params, false);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/saveAndPublish")
|
||||
@ApiOperation(value="saveAndPublish")
|
||||
public AjaxResult<Object> publish(@RequestBody List<Object> params) {
|
||||
iChannelOaMenusService.save(params, true);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.yj.admin.service.IChannelOaReplyService;
|
||||
import com.yj.admin.validate.channel.ChannelRpValidate;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.channel.ChannelRpVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel.official_account_reply")
|
||||
@Api(tags = "公众号回复")
|
||||
public class ChannelOaReplyController {
|
||||
|
||||
@Resource
|
||||
IChannelOaReplyService iChannelOaReplyService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="默认回复列表")
|
||||
public AjaxResult<PageResult<ChannelRpVo>> list(@Validated PageValidate pageValidate, @RequestParam("reply_type") Integer replyType) {
|
||||
PageResult<ChannelRpVo> list = iChannelOaReplyService.list(pageValidate, replyType);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="默认回复详情")
|
||||
public AjaxResult<ChannelRpVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
ChannelRpVo vo = iChannelOaReplyService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="默认回复新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody ChannelRpValidate defaultValidate) {
|
||||
iChannelOaReplyService.add(defaultValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="默认回复编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody ChannelRpValidate defaultValidate) {
|
||||
iChannelOaReplyService.edit(defaultValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="默认回复删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iChannelOaReplyService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/status")
|
||||
@ApiOperation(value="默认回复状态")
|
||||
public AjaxResult<Object> status(@Validated @RequestBody IdValidate idValidate) {
|
||||
iChannelOaReplyService.status(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.yj.admin.controller.channel;
|
||||
|
||||
import com.yj.admin.service.IChannelOpService;
|
||||
import com.yj.admin.validate.channel.ChannelOpValidate;
|
||||
import com.yj.admin.vo.channel.ChannelOpVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/channel.open_setting/")
|
||||
@Api(tags = "微信开放渠道")
|
||||
public class ChannelOpController {
|
||||
|
||||
@Resource
|
||||
IChannelOpService iChannelOpService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="开放平台设置详情")
|
||||
public AjaxResult<Object> getConfig() {
|
||||
ChannelOpVo vo = iChannelOpService.getConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="开放平台设置保存")
|
||||
public AjaxResult<Object> save(@Validated @RequestBody ChannelOpValidate opValidate) {
|
||||
iChannelOpService.setConfig(opValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.yj.admin.controller.decorate;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.IDecorateDataService;
|
||||
import com.yj.admin.vo.decorate.DecorateDataArticleVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/decorate.data")
|
||||
@Api(tags = "装修数据管理")
|
||||
public class DecorateDataController {
|
||||
|
||||
@Resource
|
||||
IDecorateDataService iDecorateDataService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/article")
|
||||
@ApiOperation(value="获取文章数据")
|
||||
public AjaxResult<List<DecorateDataArticleVo>> article(@RequestParam(defaultValue = "10") Integer limit) {
|
||||
List<DecorateDataArticleVo> list = iDecorateDataService.article(limit);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/pc")
|
||||
@ApiOperation(value="获取pc装修数据")
|
||||
public AjaxResult<JSONObject> pc() {
|
||||
JSONObject pc = iDecorateDataService.pc();
|
||||
return AjaxResult.success(pc);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
package com.yj.admin.controller.decorate;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IDecoratePageService;
|
||||
import com.yj.admin.validate.decorate.DecoratePageValidate;
|
||||
import com.yj.admin.vo.decorate.DecoratePageVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/decorate.page")
|
||||
@Api(tags = "装修页面管理")
|
||||
public class DecoratePagesController {
|
||||
|
||||
@Resource
|
||||
IDecoratePageService iDecoratePageService;
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="页面装修详情")
|
||||
public AjaxResult<DecoratePageVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
DecoratePageVo vo = iDecoratePageService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "页面装修保存")
|
||||
@PostMapping("/save")
|
||||
@ApiOperation(value="页面装修保存")
|
||||
public AjaxResult<Object> save(@RequestBody DecoratePageValidate decoratePageValidate) {
|
||||
iDecoratePageService.save(decoratePageValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.decorate;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.IDecorateTabbarService;
|
||||
import com.yj.admin.validate.decorate.DecorateTabsValidate;
|
||||
import com.yj.admin.vo.decorate.DecorateTabbarVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/decorate.tabbar")
|
||||
@Api(tags = "装修导航管理")
|
||||
public class DecorateTabbarController {
|
||||
|
||||
@Resource
|
||||
IDecorateTabbarService iDecorateTabbarService;
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="底部导航详情")
|
||||
public AjaxResult<DecorateTabbarVo> detail() {
|
||||
DecorateTabbarVo vo = iDecorateTabbarService.detail();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "底部导航编辑")
|
||||
@PostMapping("/save")
|
||||
@ApiOperation(value="底部导航编辑")
|
||||
public AjaxResult<Object> save(@Validated @RequestBody DecorateTabsValidate tabsValidate) {
|
||||
iDecorateTabbarService.save(tabsValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
package com.yj.admin.controller.finance;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.service.IFinanceRechargerService;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.finance.FinanceRechargeSearchValidate;
|
||||
import com.yj.admin.validate.finance.FinanceRefundValidate;
|
||||
import com.yj.admin.vo.finance.FinanceRechargeListVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.enums.ErrorEnum;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping({"/adminapi/recharge/recharge", "/adminapi/recharge.recharge"})
|
||||
@Api("充值记录管理")
|
||||
public class FinanceRechargerController {
|
||||
|
||||
@Resource
|
||||
IFinanceRechargerService iFinanceRechargerService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation("充值记录")
|
||||
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
|
||||
@Validated FinanceRechargeSearchValidate searchValidate) {
|
||||
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
|
||||
JSONObject ret = iFinanceRechargerService.getExportData(pageValidate, searchValidate);
|
||||
return AjaxResult.success(ret);
|
||||
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
|
||||
String path = iFinanceRechargerService.export(searchValidate);
|
||||
return AjaxResult.success(2, new JSONObject() {{
|
||||
put("url", path);
|
||||
}}, ErrorEnum.SHOW_MSG.getCode());
|
||||
} else {
|
||||
PageResult<FinanceRechargeListVo> list = iFinanceRechargerService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/refund")
|
||||
@ApiOperation("发起退款")
|
||||
public AjaxResult<Object> refund(@Validated @RequestBody FinanceRefundValidate financeRefundValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
|
||||
iFinanceRechargerService.refund(financeRefundValidate.getRecharge_id(), adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/refundAgain")
|
||||
@ApiModelProperty("重新退款")
|
||||
public AjaxResult<Object> refundAgain(@Validated @RequestBody IdValidate idValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
|
||||
iFinanceRechargerService.refundAgain(idValidate.getId(), adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
package com.yj.admin.controller.finance;
|
||||
|
||||
import com.yj.admin.service.IFinanceRefundService;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.finance.FinanceRefundSearchValidate;
|
||||
import com.yj.admin.vo.finance.FinanceRefundListVo;
|
||||
import com.yj.admin.vo.finance.FinanceRefundLogVo;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/finance.refund")
|
||||
@Api("退款记录管理")
|
||||
public class FinanceRefundController {
|
||||
|
||||
@Resource
|
||||
IFinanceRefundService iFinanceRefundService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/stat")
|
||||
@ApiOperation("退还统计")
|
||||
public AjaxResult<Object> stat() {
|
||||
return AjaxResult.success(iFinanceRefundService.stat());
|
||||
}
|
||||
|
||||
@GetMapping("/record")
|
||||
@ApiOperation("退款记录")
|
||||
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
|
||||
@Validated FinanceRefundSearchValidate searchValidate) {
|
||||
PageResult<FinanceRefundListVo> list = iFinanceRefundService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/log")
|
||||
@ApiOperation("退款日志")
|
||||
public AjaxResult<Object> log(@Validated @IDMust() @RequestParam("record_id") Integer id) {
|
||||
List<FinanceRefundLogVo> list = iFinanceRefundService.log(id);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.yj.admin.controller.finance;
|
||||
|
||||
import com.yj.admin.service.IFinanceWalletService;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.finance.FinanceWalletSearchValidate;
|
||||
import com.yj.admin.vo.finance.FinanceWalletListVo;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/finance.account_log")
|
||||
@Api("余额明细管理")
|
||||
public class FinanceWalletController {
|
||||
|
||||
@Resource
|
||||
IFinanceWalletService iFinanceWalletService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation("记录列表")
|
||||
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
|
||||
@Validated FinanceWalletSearchValidate searchValidate) {
|
||||
PageResult<FinanceWalletListVo> list = iFinanceWalletService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/getUmChangeType")
|
||||
@ApiOperation("记录列表")
|
||||
public AjaxResult<Map<Integer, String>> getUmChangeType() {
|
||||
return AjaxResult.success(iFinanceWalletService.getUmChangeType());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.yj.admin.controller.marketing;
|
||||
|
||||
import com.yj.admin.service.IMarketingRechargeService;
|
||||
import com.yj.admin.validate.marketing.MarketingRechargeValidate;
|
||||
import com.yj.admin.vo.marketing.MarketingRechargeVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping({"adminapi/recharge/recharge", "adminapi/recharge.recharge"})
|
||||
@Api("营销充值管理")
|
||||
public class MarketingRechargeController {
|
||||
|
||||
@Resource
|
||||
IMarketingRechargeService iMarketingRechargeService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiModelProperty(value = "充值配置详情")
|
||||
public AjaxResult<MarketingRechargeVo> detail() {
|
||||
MarketingRechargeVo vo = iMarketingRechargeService.detail();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/setConfig")
|
||||
@ApiModelProperty(value = "充值配置保存")
|
||||
public AjaxResult<Object> save(@Validated @RequestBody MarketingRechargeValidate rechargeValidate) {
|
||||
iMarketingRechargeService.save(rechargeValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
package com.yj.admin.controller.monitor;
|
||||
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.data.redis.connection.RedisServerCommands;
|
||||
import org.springframework.data.redis.core.RedisCallback;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("api/monitor")
|
||||
@Api(tags = "监控缓存管理")
|
||||
public class MonitorCacheController {
|
||||
|
||||
@Resource
|
||||
private RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
/**
|
||||
* 缓存监控
|
||||
*
|
||||
* @author fzr
|
||||
* @return AjaxResult<Object>
|
||||
*/
|
||||
@Log(title = "缓存监控")
|
||||
@GetMapping("/cache")
|
||||
@ApiOperation(value="缓存监控")
|
||||
public AjaxResult<Object> info() {
|
||||
Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::info);
|
||||
Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
|
||||
Object dbSize = redisTemplate.execute((RedisCallback<Object>) RedisServerCommands::dbSize);
|
||||
|
||||
if (commandStats == null) {
|
||||
return AjaxResult.failed("获取异常");
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>(3);
|
||||
result.put("info", info);
|
||||
result.put("dbSize", dbSize);
|
||||
|
||||
List<Map<String, String>> pieList = new ArrayList<>();
|
||||
commandStats.stringPropertyNames().forEach(key -> {
|
||||
Map<String, String> data = new HashMap<>(2);
|
||||
String property = commandStats.getProperty(key);
|
||||
data.put("name", StringUtils.removeStart(key, "cmdstat_"));
|
||||
data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
|
||||
pieList.add(data);
|
||||
});
|
||||
|
||||
result.put("commandStats", pieList);
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package com.yj.admin.controller.monitor;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.ServerResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("adminapi/setting.system.system")
|
||||
@Api(tags = "监控服务管理")
|
||||
public class MonitorServerController {
|
||||
|
||||
/**
|
||||
* 服务器信息
|
||||
*
|
||||
* @author fzr
|
||||
* @return AjaxResult<Map<String, Object>>
|
||||
*/
|
||||
@Log(title = "服务监控")
|
||||
@GetMapping("/info")
|
||||
@ApiOperation(value="服务监控")
|
||||
public AjaxResult<Map<String, Object>> info() {
|
||||
ServerResult server = new ServerResult();
|
||||
return AjaxResult.success(server.copyTo());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.validate.commons.IdArrayValidate;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.ISettingDictDataService;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.setting.DictDataCreateValidate;
|
||||
import com.yj.admin.validate.setting.DictDataUpdateValidate;
|
||||
import com.yj.admin.vo.setting.SettingDictDataVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.dict.dict_data")
|
||||
@Api(tags = "配置字典数据")
|
||||
public class SettingDictDataController {
|
||||
|
||||
@Resource
|
||||
ISettingDictDataService iSettingDictDataService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="字典数据所有")
|
||||
public AjaxResult<List<SettingDictDataVo>> all(@RequestParam Map<String, String> params) {
|
||||
Assert.isFalse(StringUtils.isEmpty(params.get("type_id")), "type_id缺失");
|
||||
List<SettingDictDataVo> list = iSettingDictDataService.all(params);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="字典数据列表")
|
||||
public AjaxResult<PageResult<SettingDictDataVo>> list(@Validated PageValidate pageValidate,
|
||||
@RequestParam Map<String, String> params) {
|
||||
Assert.isFalse(StringUtils.isEmpty(params.get("type_id")), "type_id缺失");
|
||||
PageResult<SettingDictDataVo> list = iSettingDictDataService.list(pageValidate, params);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="字典数据详情")
|
||||
public AjaxResult<SettingDictDataVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SettingDictDataVo vo = iSettingDictDataService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "字典数据新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="字典数据新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody DictDataCreateValidate createValidate) {
|
||||
iSettingDictDataService.add(createValidate);
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
@Log(title = "字典数据编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="字典数据编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody DictDataUpdateValidate updateValidate) {
|
||||
iSettingDictDataService.edit(updateValidate);
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
@Log(title = "字典数据删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="字典数据删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdArrayValidate idArrayValidate) {
|
||||
iSettingDictDataService.del(idArrayValidate.getId());
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.ISettingDictTypeService;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.setting.DictTypeCreateValidate;
|
||||
import com.yj.admin.validate.setting.DictTypeUpdateValidate;
|
||||
import com.yj.admin.vo.setting.SettingDictTypeVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.dict.dict_type")
|
||||
@Api(tags = "配置字典类型")
|
||||
public class SettingDictTypeController {
|
||||
|
||||
@Resource
|
||||
ISettingDictTypeService iSettingDictTypeService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="字典类型所有")
|
||||
public AjaxResult<List<SettingDictTypeVo>> all() {
|
||||
List<SettingDictTypeVo> list = iSettingDictTypeService.all();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="字典类型列表")
|
||||
public AjaxResult<PageResult<SettingDictTypeVo>> list(@Validated PageValidate pageValidate,
|
||||
@RequestParam Map<String, String> params) {
|
||||
PageResult<SettingDictTypeVo> list = iSettingDictTypeService.list(pageValidate, params);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="字典类型详情")
|
||||
public AjaxResult<SettingDictTypeVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SettingDictTypeVo vo = iSettingDictTypeService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "字典类型新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="字典类型新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody DictTypeCreateValidate createValidate) {
|
||||
iSettingDictTypeService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "字典类型编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="字典类型编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody DictTypeUpdateValidate updateValidate) {
|
||||
iSettingDictTypeService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "字典类型删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="字典类型删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iSettingDictTypeService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingLoginService;
|
||||
import com.yj.admin.validate.setting.SettingLoginValidate;
|
||||
import com.yj.admin.vo.setting.SettingLoginVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.user.user")
|
||||
@Api(tags = "配置用户登录")
|
||||
public class SettingLoginController {
|
||||
|
||||
@Resource
|
||||
ISettingLoginService iSettingLoginService;
|
||||
|
||||
@GetMapping("/getRegisterConfig")
|
||||
@ApiOperation(value="登录设置详情")
|
||||
public AjaxResult<SettingLoginVo> getRegisterConfig() {
|
||||
SettingLoginVo vo = iSettingLoginService.getRegisterConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "登录设置编辑")
|
||||
@PostMapping("/setRegisterConfig")
|
||||
@ApiOperation(value="登录设置编辑")
|
||||
public AjaxResult<Object> setRegisterConfig(@Validated @RequestBody SettingLoginValidate loginValidate) {
|
||||
iSettingLoginService.setRegisterConfig(loginValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingNoticeService;
|
||||
import com.yj.admin.vo.setting.SettingNoticeDetailVo;
|
||||
import com.yj.admin.vo.setting.SettingNoticeListedVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/notice.notice")
|
||||
@Api(tags = "配置消息通知")
|
||||
public class SettingNoticeController {
|
||||
|
||||
@Resource
|
||||
ISettingNoticeService iSettingNoticeService;
|
||||
|
||||
@GetMapping("/settingLists")
|
||||
@ApiOperation(value="通知设置列表")
|
||||
public AjaxResult<JSONObject> list(@RequestParam Integer recipient) {
|
||||
List<SettingNoticeListedVo> list = iSettingNoticeService.list(recipient);
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("lists", list);
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="通知设置详情")
|
||||
public AjaxResult<SettingNoticeDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SettingNoticeDetailVo vo = iSettingNoticeService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "通知设置编辑")
|
||||
@PostMapping("/set")
|
||||
@ApiOperation(value="通知设置编辑")
|
||||
public AjaxResult<Object> save(@RequestBody JSONObject params) {
|
||||
iSettingNoticeService.save(params);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.service.ISettingPaymentService;
|
||||
import com.yj.admin.validate.setting.SettingPayConfigValidate;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.entity.setting.DevPayConfig;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.pay.pay_config")
|
||||
@Api(tags = "配置支付参数")
|
||||
public class SettingPayConfigController {
|
||||
|
||||
@Resource
|
||||
ISettingPaymentService iSettingPaymentService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="支付配置列表")
|
||||
public AjaxResult<JSONObject> list() {
|
||||
JSONObject result = iSettingPaymentService.list();
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="支付配置详情")
|
||||
public AjaxResult<Object> getConfig(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
DevPayConfig vo = iSettingPaymentService.getConfig(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="支付配置编辑")
|
||||
public AjaxResult<Object> setConfig(@Validated @RequestBody SettingPayConfigValidate configValidate) {
|
||||
iSettingPaymentService.setConfig(configValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
|
||||
import com.yj.admin.service.ISettingPaymentService;
|
||||
import com.yj.admin.vo.setting.SettingPaymentMethodVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.pay.pay_way")
|
||||
@Api(tags = "配置支付参数")
|
||||
public class SettingPayWayController {
|
||||
|
||||
@Resource
|
||||
ISettingPaymentService iSettingPaymentService;
|
||||
|
||||
@GetMapping("/getPayWay")
|
||||
@ApiOperation(value="支付方式列表")
|
||||
public AjaxResult<HashMap> method() {
|
||||
HashMap list = iSettingPaymentService.getPayWay();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@PostMapping("/setPayWay")
|
||||
@ApiOperation(value="支付方式编辑")
|
||||
public AjaxResult<Object> setPayWay(@Validated @RequestBody HashMap<Integer, List<SettingPaymentMethodVo>> data) {
|
||||
iSettingPaymentService.setPayWay(data);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingSearchService;
|
||||
import com.yj.admin.validate.setting.SettingSearchValidate;
|
||||
import com.yj.admin.vo.setting.SettingSearchDetailVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.hot_search")
|
||||
@Api(tags = "配置热门搜索")
|
||||
public class SettingSearchController {
|
||||
|
||||
@Resource
|
||||
ISettingSearchService iSettingSearchService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="热门搜索详情")
|
||||
public AjaxResult<SettingSearchDetailVo> getConfig() {
|
||||
SettingSearchDetailVo vo = iSettingSearchService.getConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "热门搜索编辑")
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="热门搜索编辑")
|
||||
public AjaxResult<Object> setConfig(@Validated @RequestBody SettingSearchValidate searchValidate) {
|
||||
iSettingSearchService.setConfig(searchValidate);
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingSmsService;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 短信设置管理
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/notice.sms_config")
|
||||
@Api(tags = "配置短信引擎")
|
||||
public class SettingSmsController {
|
||||
|
||||
@Resource
|
||||
ISettingSmsService iSettingSmsService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="短信引擎列表")
|
||||
public AjaxResult<List<Map<String, Object>>> getConfig() {
|
||||
List<Map<String, Object>> list = iSettingSmsService.getConfig();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="短信引擎详情")
|
||||
public AjaxResult<Map<String, Object>> detail(String type) {
|
||||
Map<String, Object> map = iSettingSmsService.detail(type);
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
|
||||
@Log(title = "短信引擎编辑")
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="短信引擎编辑")
|
||||
public AjaxResult<Object> setConfig(@RequestBody JSONObject params) {
|
||||
iSettingSmsService.setConfig(params);
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingStorageService;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.storage")
|
||||
@Api(tags = "配置存储方式")
|
||||
public class SettingStorageController {
|
||||
|
||||
@Resource
|
||||
ISettingStorageService iSettingStorageService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="存储列表")
|
||||
public AjaxResult<List<Map<String, Object>>> list() {
|
||||
List<Map<String, Object>> list = iSettingStorageService.list();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="存储详情")
|
||||
public AjaxResult<Map<String, Object>> detail(String engine) {
|
||||
Map<String, Object> map = iSettingStorageService.detail(engine);
|
||||
return AjaxResult.success(map);
|
||||
}
|
||||
|
||||
@Log(title = "存储编辑")
|
||||
@PostMapping("/setup")
|
||||
@ApiOperation(value="存储编辑")
|
||||
public AjaxResult<Object> setup(@RequestBody Map<String, String> params) {
|
||||
iSettingStorageService.setup(params);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "存储切换")
|
||||
@PostMapping("/change")
|
||||
@ApiOperation(value="存储切换")
|
||||
public AjaxResult<Object> change(@RequestBody Map<String, String> params) {
|
||||
Assert.notNull(params.get("alias"), "alias参数缺失");
|
||||
Assert.notNull(params.get("status"), "status参数缺失");
|
||||
String alias = params.get("alias");
|
||||
Integer status = Integer.parseInt(params.get("status"));
|
||||
iSettingStorageService.change(alias, status);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingUserService;
|
||||
import com.yj.admin.validate.setting.SettingUserValidate;
|
||||
import com.yj.admin.vo.setting.SettingUserVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.user.user")
|
||||
@Api(tags = "配置用户参数")
|
||||
public class SettingUserController {
|
||||
|
||||
@Resource
|
||||
ISettingUserService iSettingUserService;
|
||||
|
||||
@GetMapping("/getConfig")
|
||||
@ApiOperation(value="用户设置详情")
|
||||
public AjaxResult<SettingUserVo> detail() {
|
||||
SettingUserVo vo = iSettingUserService.getConfig();
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "用户设置编辑")
|
||||
@PostMapping("/setConfig")
|
||||
@ApiOperation(value="用户设置编辑")
|
||||
public AjaxResult<Object> setConfig(@Validated @RequestBody SettingUserValidate userValidate) {
|
||||
iSettingUserService.setConfig(userValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
package com.yj.admin.controller.setting;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.ISettingCopyrightService;
|
||||
import com.yj.admin.service.ISettingProtocolService;
|
||||
import com.yj.admin.service.ISettingWebsiteService;
|
||||
import com.yj.admin.validate.setting.SettingCopyrightValidate;
|
||||
import com.yj.admin.validate.setting.SettingAgreementValidate;
|
||||
import com.yj.admin.validate.setting.SettingSiteStatisticsValidate;
|
||||
import com.yj.admin.validate.setting.SettingWebsiteValidate;
|
||||
import com.yj.admin.vo.setting.SettingCopyrightVo;
|
||||
import com.yj.admin.vo.setting.SettingAgreementVo;
|
||||
import com.yj.admin.vo.setting.SettingSiteStatisticsVo;
|
||||
import com.yj.admin.vo.setting.SettingWebsiteVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.util.ConfigUtils;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("adminapi/setting.web.web_setting")
|
||||
@Api(tags = "配置网站信息")
|
||||
public class SettingWebsiteController {
|
||||
|
||||
@Resource
|
||||
ISettingWebsiteService iSettingWebsiteService;
|
||||
|
||||
@Resource
|
||||
ISettingCopyrightService iSettingCopyrightService;
|
||||
|
||||
@Resource
|
||||
ISettingProtocolService iSettingProtocolService;
|
||||
|
||||
@GetMapping("/getWebsite")
|
||||
@ApiOperation(value="网站配置信息")
|
||||
public AjaxResult<SettingWebsiteVo> getWebsite() {
|
||||
SettingWebsiteVo detail = iSettingWebsiteService.getWebsite();
|
||||
return AjaxResult.success(detail);
|
||||
}
|
||||
|
||||
@Log(title = "网站配置编辑")
|
||||
@PostMapping("/setWebsite")
|
||||
@ApiOperation(value="网站配置编辑")
|
||||
public AjaxResult<Object> setWebsite(@Validated @RequestBody SettingWebsiteValidate websiteValidate) {
|
||||
iSettingWebsiteService.setWebsite(websiteValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping("/getCopyright")
|
||||
@ApiOperation(value="网站版权信息")
|
||||
public AjaxResult<List<SettingCopyrightVo>> getCopyright() {
|
||||
List<SettingCopyrightVo> list = iSettingCopyrightService.getCopyright();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@Log(title = "网站版权编辑")
|
||||
@PostMapping("/setCopyright")
|
||||
@ApiOperation(value="网站版权编辑")
|
||||
public AjaxResult<Object> setCopyright(@Validated @RequestBody SettingCopyrightValidate copyrightValidate) {
|
||||
iSettingCopyrightService.setCopyright(copyrightValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@GetMapping("/getAgreement")
|
||||
@ApiOperation(value="政策协议信息")
|
||||
public AjaxResult<SettingAgreementVo> getAgreement() {
|
||||
SettingAgreementVo detail = iSettingProtocolService.getAgreement();
|
||||
return AjaxResult.success(detail);
|
||||
}
|
||||
|
||||
@Log(title = "政策协议编辑")
|
||||
@PostMapping("/setAgreement")
|
||||
@ApiOperation(value="政策协议编辑")
|
||||
public AjaxResult<Object> setAgreement(@Validated @RequestBody SettingAgreementValidate protocolValidate) {
|
||||
iSettingProtocolService.setAgreement(protocolValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/getSiteStatistics")
|
||||
@ApiOperation(value="获取站点统计配置")
|
||||
public AjaxResult<SettingSiteStatisticsVo> getSiteStatistics() {
|
||||
SettingSiteStatisticsVo vo = new SettingSiteStatisticsVo();
|
||||
vo.setClarityCode(ConfigUtils.get("siteStatistics", "clarity_code", ""));
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "站点统计配置")
|
||||
@PostMapping("/setSiteStatistics")
|
||||
@ApiOperation(value="站点统计配置")
|
||||
public AjaxResult<Object> setSiteStatistics(@Validated @RequestBody SettingSiteStatisticsValidate settingSiteStatisticsValidate) {
|
||||
ConfigUtils.set("siteStatistics", "clarity_code", settingSiteStatisticsValidate.getClarityCode());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.yj.admin.service.system.IDeptService;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.system.DeptCreateValidate;
|
||||
import com.yj.admin.validate.system.DeptSearchValidate;
|
||||
import com.yj.admin.validate.system.DeptUpdateValidate;
|
||||
import com.yj.admin.vo.system.DeptVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/dept.dept")
|
||||
@Api(tags = "系统部门管理")
|
||||
public class DeptController {
|
||||
|
||||
@Resource
|
||||
IDeptService deptService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="部门所有")
|
||||
public AjaxResult<JSONArray> all() {
|
||||
JSONArray list = deptService.all();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="部门列表")
|
||||
public AjaxResult<JSONArray> list(@Validated DeptSearchValidate searchValidate) {
|
||||
JSONArray list = deptService.list(searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="部门详情")
|
||||
public AjaxResult<DeptVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
DeptVo vo = deptService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="部门新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody DeptCreateValidate createValidate) {
|
||||
deptService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="部门编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody DeptUpdateValidate updateValidate) {
|
||||
deptService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="部门删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
deptService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.service.system.IJobsService;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.system.JobsCreateValidate;
|
||||
import com.yj.admin.validate.system.JobsSearchValidate;
|
||||
import com.yj.admin.validate.system.JobsUpdateValidate;
|
||||
import com.yj.admin.vo.system.JobsVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.enums.ErrorEnum;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/dept.jobs")
|
||||
@Api(tags = "系统岗位管理")
|
||||
public class JobsController {
|
||||
|
||||
@Resource
|
||||
IJobsService iJobsService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="所有岗位")
|
||||
public AjaxResult<List<JobsVo>> all() {
|
||||
List<JobsVo> list = iJobsService.all();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="岗位列表")
|
||||
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
|
||||
@Validated JobsSearchValidate searchValidate) {
|
||||
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
|
||||
JSONObject ret = iJobsService.getExportData(pageValidate, searchValidate);
|
||||
return AjaxResult.success(ret);
|
||||
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
|
||||
String path = iJobsService.export(searchValidate);
|
||||
return AjaxResult.success(2, new JSONObject() {{
|
||||
put("url", path);
|
||||
}}, ErrorEnum.SHOW_MSG.getCode());
|
||||
} else {
|
||||
PageResult<JobsVo> list = iJobsService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="岗位详情")
|
||||
public AjaxResult<JobsVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
JobsVo vo = iJobsService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="岗位新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody JobsCreateValidate createValidate) {
|
||||
iJobsService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="岗位编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody JobsUpdateValidate updateValidate) {
|
||||
iJobsService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="岗位删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iJobsService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.admin.IAdminService;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.system.SystemAdminCreateValidate;
|
||||
import com.yj.admin.validate.system.SystemAdminSearchValidate;
|
||||
import com.yj.admin.validate.system.SystemAdminUpInfoValidate;
|
||||
import com.yj.admin.validate.system.SystemAdminUpdateValidate;
|
||||
import com.yj.admin.vo.system.SystemAuthAdminDetailVo;
|
||||
import com.yj.admin.vo.system.SystemAuthAdminListedVo;
|
||||
import com.yj.admin.vo.system.SystemAuthAdminSelvesVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.enums.ErrorEnum;
|
||||
import com.yj.common.util.StringUtils;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/auth.admin")
|
||||
@Api(tags = "系统用户管理")
|
||||
public class SystemAuthAdminController {
|
||||
|
||||
@Resource
|
||||
IAdminService iSystemAuthAdminService;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="管理员列表")
|
||||
public AjaxResult<Object> list(@Validated PageValidate pageValidate,
|
||||
@Validated SystemAdminSearchValidate searchValidate) {
|
||||
if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(1)) {
|
||||
JSONObject ret = iSystemAuthAdminService.getExportData(pageValidate, searchValidate);
|
||||
return AjaxResult.success(ret);
|
||||
} else if (StringUtils.isNotNull(searchValidate.getExport()) && searchValidate.getExport().equals(2)) {
|
||||
String path = iSystemAuthAdminService.export(searchValidate);
|
||||
return AjaxResult.success(2, new JSONObject() {{
|
||||
put("url", path);
|
||||
}}, ErrorEnum.SHOW_MSG.getCode());
|
||||
} else {
|
||||
PageResult<SystemAuthAdminListedVo> list = iSystemAuthAdminService.list(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/self")
|
||||
@ApiOperation(value="管理员信息")
|
||||
public AjaxResult<SystemAuthAdminSelvesVo> self() {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
SystemAuthAdminSelvesVo vo = iSystemAuthAdminService.self(adminId);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="管理员详情")
|
||||
public AjaxResult<SystemAuthAdminDetailVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SystemAuthAdminDetailVo vo = iSystemAuthAdminService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "管理员新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="管理员新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody SystemAdminCreateValidate createValidate) {
|
||||
iSystemAuthAdminService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "管理员编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="管理员编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody SystemAdminUpdateValidate updateValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
iSystemAuthAdminService.edit(updateValidate, adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@NotPower
|
||||
@Log(title = "管理员更新")
|
||||
@PostMapping("/upInfo")
|
||||
@ApiOperation(value="当前管理员更新")
|
||||
public AjaxResult<Object> upInfo(@Validated @RequestBody SystemAdminUpInfoValidate upInfoValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
iSystemAuthAdminService.upInfo(upInfoValidate, adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "管理员删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="管理员删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
iSystemAuthAdminService.del(idValidate.getId(), adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "管理员状态")
|
||||
@PostMapping("/disable")
|
||||
@ApiOperation(value="管理员状态切换")
|
||||
public AjaxResult<Object> disable(@Validated @RequestBody IdValidate idValidate) {
|
||||
Integer adminId = LikeAdminThreadLocal.getAdminId();
|
||||
iSystemAuthAdminService.disable(idValidate.getId(), adminId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.LikeAdminThreadLocal;
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.system.ISystemMenuService;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.system.SystemMenuCreateValidate;
|
||||
import com.yj.admin.validate.system.SystemMenuUpdateValidate;
|
||||
import com.yj.admin.vo.system.SystemAuthMenuVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/auth.menu")
|
||||
@Api(tags = "系统菜单管理")
|
||||
public class SystemAuthMenuController {
|
||||
|
||||
@Resource
|
||||
ISystemMenuService iSystemAuthMenuService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/route")
|
||||
@ApiOperation(value="获取菜单路由")
|
||||
public AjaxResult<JSONArray> route() {
|
||||
List<Integer> roleIds = LikeAdminThreadLocal.getRoleIds();
|
||||
JSONArray lists = iSystemAuthMenuService.selectMenuByRoleId(roleIds);
|
||||
return AjaxResult.success(lists);
|
||||
}
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="获取菜单列表")
|
||||
public AjaxResult<JSONObject> list() {
|
||||
JSONObject result = iSystemAuthMenuService.list();
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/systemMenuLists")
|
||||
@ApiOperation(value="获取菜单列表")
|
||||
public AjaxResult<Object> systemMenuLists() {
|
||||
JSONArray result = iSystemAuthMenuService.systemMenuLists();
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="获取菜单列表")
|
||||
public AjaxResult<JSONArray> all() {
|
||||
JSONArray result = iSystemAuthMenuService.all();
|
||||
return AjaxResult.success(result);
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="获取菜单详情")
|
||||
public AjaxResult<SystemAuthMenuVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SystemAuthMenuVo vo = iSystemAuthMenuService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "菜单新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="新增菜单")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody SystemMenuCreateValidate createValidate) {
|
||||
iSystemAuthMenuService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "菜单编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="菜单编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody SystemMenuUpdateValidate updateValidate) {
|
||||
iSystemAuthMenuService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "菜单删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="菜单删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iSystemAuthMenuService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.common.aop.NotPower;
|
||||
import com.yj.admin.service.system.ISystemRoleService;
|
||||
import com.yj.admin.validate.commons.IdValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.system.SystemRoleCreateValidate;
|
||||
import com.yj.admin.validate.system.SystemRoleUpdateValidate;
|
||||
import com.yj.admin.vo.system.SystemAuthRoleVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import com.yj.common.validator.annotation.IDMust;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/auth.role")
|
||||
@Api(tags = "系统角色管理")
|
||||
public class SystemAuthRoleController {
|
||||
|
||||
@Resource
|
||||
ISystemRoleService iSystemAuthRoleService;
|
||||
|
||||
@NotPower
|
||||
@GetMapping("/all")
|
||||
@ApiOperation(value="所有角色")
|
||||
public AjaxResult<List<SystemAuthRoleVo>> all() {
|
||||
List<SystemAuthRoleVo> list = iSystemAuthRoleService.all();
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@Log(title = "角色列表")
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="角色列表")
|
||||
public AjaxResult<PageResult<SystemAuthRoleVo>> list(@Validated PageValidate pageValidate) {
|
||||
PageResult<SystemAuthRoleVo> list = iSystemAuthRoleService.list(pageValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@Log(title = "角色详情")
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation(value="角色详情")
|
||||
public AjaxResult<SystemAuthRoleVo> detail(@Validated @IDMust() @RequestParam("id") Integer id) {
|
||||
SystemAuthRoleVo vo = iSystemAuthRoleService.detail(id);
|
||||
return AjaxResult.success(vo);
|
||||
}
|
||||
|
||||
@Log(title = "角色新增")
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value="角色新增")
|
||||
public AjaxResult<Object> add(@Validated @RequestBody SystemRoleCreateValidate createValidate) {
|
||||
iSystemAuthRoleService.add(createValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "角色编辑")
|
||||
@PostMapping("/edit")
|
||||
@ApiOperation(value="角色编辑")
|
||||
public AjaxResult<Object> edit(@Validated @RequestBody SystemRoleUpdateValidate updateValidate) {
|
||||
iSystemAuthRoleService.edit(updateValidate);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@Log(title = "角色删除")
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value="角色删除")
|
||||
public AjaxResult<Object> del(@Validated @RequestBody IdValidate idValidate) {
|
||||
iSystemAuthRoleService.del(idValidate.getId());
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
|
||||
import com.yj.admin.aop.Log;
|
||||
import com.yj.admin.service.system.ISystemCacheService;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.system.cache")
|
||||
@Api(tags = "系统缓存管理")
|
||||
public class SystemCacheController {
|
||||
|
||||
@Resource
|
||||
ISystemCacheService iSystemCacheService;
|
||||
|
||||
@Log(title = "清除系统缓存")
|
||||
@PostMapping("/clear")
|
||||
@ApiOperation(value = "清除系统缓存")
|
||||
public AjaxResult<Object> clear() {
|
||||
iSystemCacheService.clear();
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.yj.admin.controller.system;
|
||||
|
||||
import com.yj.admin.service.system.ISystemLogsServer;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.system.SystemSearchLoginsValidate;
|
||||
import com.yj.admin.validate.system.SystemSearchOperateValidate;
|
||||
import com.yj.admin.vo.system.SystemLogLoginVo;
|
||||
import com.yj.admin.vo.system.SystemLogOperateVo;
|
||||
import com.yj.common.core.AjaxResult;
|
||||
import com.yj.common.core.PageResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/adminapi/setting.system.log")
|
||||
@Api(tags = "系统日志管理")
|
||||
public class SystemLogsController {
|
||||
|
||||
@Resource
|
||||
ISystemLogsServer iSystemLogsServer;
|
||||
|
||||
@GetMapping("/lists")
|
||||
@ApiOperation(value="系统操作日志")
|
||||
public AjaxResult<PageResult<SystemLogOperateVo>> lists(@Validated PageValidate pageValidate,
|
||||
@Validated SystemSearchOperateValidate searchValidate) {
|
||||
PageResult<SystemLogOperateVo> list = iSystemLogsServer.operate(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
@GetMapping("/login")
|
||||
@ApiOperation(value="系统登录日志")
|
||||
public AjaxResult<PageResult<SystemLogLoginVo>> login(@Validated PageValidate pageValidate,
|
||||
@Validated SystemSearchLoginsValidate searchValidate) {
|
||||
PageResult<SystemLogLoginVo> list = iSystemLogsServer.login(pageValidate, searchValidate);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.yj.admin.crontab;
|
||||
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
/**
|
||||
* 具体的定时任务
|
||||
*/
|
||||
@Component("myJob")
|
||||
public class MyJob {
|
||||
|
||||
public void handle(String s) {
|
||||
System.out.println("有参数定时任务执行逻辑 : " + s);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.article.ArtCateCreateValidate;
|
||||
import com.yj.admin.validate.article.ArtCateUpdateValidate;
|
||||
import com.yj.admin.validate.article.ArtCateSearchValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.article.ArticleCateVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 文章分类服接口务类
|
||||
*/
|
||||
public interface IArtCateService {
|
||||
|
||||
/**
|
||||
* 分类所有
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<CategoryVo>
|
||||
*/
|
||||
List<ArticleCateVo> all();
|
||||
|
||||
/**
|
||||
* 分类列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<CategoryVo>
|
||||
*/
|
||||
PageResult<ArticleCateVo> list(PageValidate pageValidate, ArtCateSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 分类详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 分类ID
|
||||
*/
|
||||
ArticleCateVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 分类新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(ArtCateCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 分类编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(ArtCateUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 分类删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 分类ID
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
/**
|
||||
* 分类状态
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 分类ID
|
||||
*/
|
||||
void change(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.article.ArticleCreateValidate;
|
||||
import com.yj.admin.validate.article.ArticleSearchValidate;
|
||||
import com.yj.admin.validate.article.ArticleUpdateValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.article.ArticleDetailVo;
|
||||
import com.yj.admin.vo.article.ArticleListedVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
/**
|
||||
* 文章服务接口类
|
||||
*/
|
||||
public interface IArticleService {
|
||||
|
||||
/**
|
||||
* 文章列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<ArticleListVo>
|
||||
*/
|
||||
PageResult<ArticleListedVo> list(PageValidate pageValidate, ArticleSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 文章详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键ID
|
||||
*/
|
||||
ArticleDetailVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 文章新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(ArticleCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 文章编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(ArticleUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 文章删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 文章主键
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
/**
|
||||
* 文章状态
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 文章主键
|
||||
*/
|
||||
void change(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.channel.ChannelH5Validate;
|
||||
import com.yj.admin.vo.channel.ChannelH5Vo;
|
||||
|
||||
/**
|
||||
* H5渠道设置服务接口类
|
||||
*/
|
||||
public interface IChannelH5ConfigService {
|
||||
|
||||
/**
|
||||
* H5设置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return ChannelH5Vo
|
||||
*/
|
||||
ChannelH5Vo getConfig();
|
||||
|
||||
/**
|
||||
* H5设置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param channelH5Validate 参数
|
||||
*/
|
||||
void setConfig(ChannelH5Validate channelH5Validate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.channel.ChannelMpValidate;
|
||||
import com.yj.admin.vo.channel.ChannelMpVo;
|
||||
|
||||
/**
|
||||
* 微信小程序渠道服务接口类
|
||||
*/
|
||||
public interface IChannelMpConfigService {
|
||||
|
||||
/**
|
||||
* 微信小程序设置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return ChannelMpVo
|
||||
*/
|
||||
ChannelMpVo getConfig();
|
||||
|
||||
/**
|
||||
* 微信小程序设置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param channelMpValidate 参数
|
||||
*/
|
||||
void setConfig(ChannelMpValidate channelMpValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
|
||||
/**
|
||||
* 公众号服务器回调
|
||||
*/
|
||||
public interface IChannelOaCallBackService {
|
||||
|
||||
|
||||
/**
|
||||
* 服务器验证
|
||||
*/
|
||||
String checkSignature(String signature, String timestamp, String nonce, String echostr);
|
||||
|
||||
|
||||
/**
|
||||
* 消息回复
|
||||
*
|
||||
* @param requestBody
|
||||
* @param signature
|
||||
* @param timestamp
|
||||
* @param nonce
|
||||
* @param encType
|
||||
* @param msgSignature
|
||||
* @return
|
||||
*/
|
||||
String post(String requestBody, String signature, String timestamp, String nonce, String encType, String msgSignature);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.channel.ChannelOaValidate;
|
||||
import com.yj.admin.vo.channel.ChannelOaVo;
|
||||
|
||||
|
||||
/**
|
||||
* 公众号渠道设置服务接口类
|
||||
*/
|
||||
public interface IChannelOaConfigService {
|
||||
|
||||
/**
|
||||
* 公众号设置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return ChannelOaVo
|
||||
*/
|
||||
ChannelOaVo getConfig();
|
||||
|
||||
/**
|
||||
* 公众号设置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param channelOaValidate 参数
|
||||
*/
|
||||
void setConfig(ChannelOaValidate channelOaValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 公众号菜单服务接口类
|
||||
*/
|
||||
public interface IChannelOaMenusService {
|
||||
|
||||
/**
|
||||
* 菜单详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return JSONArray
|
||||
*/
|
||||
JSONArray detail();
|
||||
|
||||
/**
|
||||
* 菜单保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param params 参数
|
||||
* @param isPublish 是否发布
|
||||
*/
|
||||
void save(List<Object> params, Boolean isPublish);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.channel.ChannelRpValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.channel.ChannelRpVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
/**
|
||||
* 公众号默认回复服务接口类
|
||||
*/
|
||||
public interface IChannelOaReplyService {
|
||||
|
||||
/**
|
||||
* 默认回复列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @return PageResult<ChannelRpDefaultVo>
|
||||
*/
|
||||
PageResult<ChannelRpVo> list(PageValidate pageValidate, Integer replyType);
|
||||
|
||||
/**
|
||||
* 默认回复详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return ChannelRpDefaultVo
|
||||
*/
|
||||
ChannelRpVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 默认回复新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param defaultValidate 参数
|
||||
*/
|
||||
void add(ChannelRpValidate defaultValidate);
|
||||
|
||||
/**
|
||||
* 默认回复编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param defaultValidate 参数
|
||||
*/
|
||||
void edit(ChannelRpValidate defaultValidate);
|
||||
|
||||
/**
|
||||
* 默认回复删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
*/
|
||||
void del(Integer id);
|
||||
|
||||
/**
|
||||
* 默认回复状态
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
*/
|
||||
void status(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.channel.ChannelOpValidate;
|
||||
import com.yj.admin.vo.channel.ChannelOpVo;
|
||||
|
||||
/**
|
||||
* 微信开放渠道设置接口服务类
|
||||
*/
|
||||
public interface IChannelOpService {
|
||||
|
||||
/**
|
||||
* 开放平台设置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return ChannelOpVo
|
||||
*/
|
||||
ChannelOpVo getConfig();
|
||||
|
||||
/**
|
||||
* 开放平台设置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param opValidate 参数
|
||||
*/
|
||||
void setConfig(ChannelOpValidate opValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.crontab.CrontabCreateValidate;
|
||||
import com.yj.admin.validate.crontab.CrontabUpdateValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.CrontabDetailVo;
|
||||
import com.yj.admin.vo.CrontabListedVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
import org.quartz.SchedulerException;
|
||||
|
||||
/**
|
||||
* 计划任务服务接口类
|
||||
*/
|
||||
public interface ICrontabService {
|
||||
|
||||
/**
|
||||
* 计划任务列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @return PageResult<CrontabListedVo>
|
||||
*/
|
||||
PageResult<CrontabListedVo> list(PageValidate pageValidate);
|
||||
|
||||
/**
|
||||
* 计划任务详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return CrontabDetailVo
|
||||
*/
|
||||
CrontabDetailVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 计划任务新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(CrontabCreateValidate createValidate) throws SchedulerException;
|
||||
|
||||
/**
|
||||
* 计划任务编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(CrontabUpdateValidate updateValidate) throws SchedulerException;
|
||||
|
||||
/**
|
||||
* 计划任务删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
*/
|
||||
void del(Integer id) throws SchedulerException;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.vo.decorate.DecorateDataArticleVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 装修数据服务接口类
|
||||
*/
|
||||
public interface IDecorateDataService {
|
||||
|
||||
/**
|
||||
* 获取文章数据
|
||||
*
|
||||
* @author fzr
|
||||
* @param limit 条数
|
||||
* @return List<DecorateArticleDataVo>
|
||||
*/
|
||||
List<DecorateDataArticleVo> article(Integer limit);
|
||||
|
||||
JSONObject pc();
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.decorate.DecoratePageValidate;
|
||||
import com.yj.admin.vo.decorate.DecoratePageVo;
|
||||
|
||||
public interface IDecoratePageService {
|
||||
|
||||
/**
|
||||
* 页面装修详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return DecoratePageVo
|
||||
*/
|
||||
DecoratePageVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 页面装修保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param decoratePageValidate 参数
|
||||
*/
|
||||
void save(DecoratePageValidate decoratePageValidate);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.decorate.DecorateTabsValidate;
|
||||
import com.yj.admin.vo.decorate.DecorateTabbarVo;
|
||||
|
||||
/**
|
||||
* 底部导航服务接口类
|
||||
*/
|
||||
public interface IDecorateTabbarService {
|
||||
|
||||
/**
|
||||
* 底部导航详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return DecorateTabbarVo
|
||||
*/
|
||||
DecorateTabbarVo detail();
|
||||
|
||||
/**
|
||||
* 底部导航保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param tabsValidate 参数
|
||||
*/
|
||||
void save(DecorateTabsValidate tabsValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.validate.file.FileCateValidate;
|
||||
import com.yj.admin.validate.file.FileSearchValidate;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.vo.album.FileVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 文件服务接口类
|
||||
*/
|
||||
public interface IFileService {
|
||||
|
||||
/**
|
||||
* 文件列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 其他搜索参数
|
||||
* @return PageResult<AlbumVo>
|
||||
*/
|
||||
PageResult<FileVo> fileList(PageValidate pageValidate, FileSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 文件重命名
|
||||
*
|
||||
* @param id 文件ID
|
||||
* @param name 文件名称
|
||||
*/
|
||||
void fileRename(Integer id, String name);
|
||||
|
||||
/**
|
||||
* 文件移动
|
||||
*
|
||||
* @author fzr
|
||||
* @param ids 文件ID
|
||||
* @param cid 类目ID
|
||||
*/
|
||||
void fileMove(List<Integer> ids, Integer cid);
|
||||
|
||||
/**
|
||||
* 文件新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param params 文件信息参数
|
||||
*/
|
||||
Integer fileAdd(Map<String, String> params);
|
||||
|
||||
/**
|
||||
* 文件删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param ids 文件ID
|
||||
*/
|
||||
void fileDel(List<Integer> ids);
|
||||
|
||||
/**
|
||||
* 分类列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param searchValidate 搜索参数
|
||||
* @return JSONArray
|
||||
*/
|
||||
JSONObject cateList(FileSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 分类新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param cateValidate 分类参数
|
||||
*/
|
||||
void cateAdd(FileCateValidate cateValidate);
|
||||
|
||||
/**
|
||||
* 分类编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 分类ID
|
||||
* @param name 分类名称
|
||||
*/
|
||||
void cateRename(Integer id, String name);
|
||||
|
||||
/**
|
||||
* 分类删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 分类ID
|
||||
*/
|
||||
void cateDel(Integer id);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.finance.FinanceRechargeSearchValidate;
|
||||
import com.yj.admin.vo.finance.FinanceRechargeListVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
/**
|
||||
* 充值记录服务接口类
|
||||
*/
|
||||
public interface IFinanceRechargerService {
|
||||
|
||||
/**
|
||||
* 充值记录
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<FinanceRechargeListVo>
|
||||
*/
|
||||
PageResult<FinanceRechargeListVo> list(PageValidate pageValidate, FinanceRechargeSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*
|
||||
* @author fzr
|
||||
* @param orderId 订单ID
|
||||
* @param adminId 管理员ID
|
||||
*/
|
||||
void refund(Integer orderId, Integer adminId);
|
||||
|
||||
/**
|
||||
* 重新退款
|
||||
*
|
||||
* @author fzr
|
||||
* @param recordId 记录ID
|
||||
* @param adminId 管理员ID
|
||||
*/
|
||||
void refundAgain(Integer recordId, Integer adminId);
|
||||
|
||||
/**
|
||||
* 返回导出格式
|
||||
* @return
|
||||
*/
|
||||
JSONObject getExportData(PageValidate pageValidate, FinanceRechargeSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 导出
|
||||
*/
|
||||
String export(FinanceRechargeSearchValidate searchValidate);
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.finance.FinanceRefundSearchValidate;
|
||||
import com.yj.admin.vo.finance.FinanceRefundListVo;
|
||||
import com.yj.admin.vo.finance.FinanceRefundLogVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 退款记录服务接口类
|
||||
*/
|
||||
public interface IFinanceRefundService {
|
||||
|
||||
/**
|
||||
* 退款记录列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<FinanceRechargeListVo>
|
||||
*/
|
||||
PageResult<FinanceRefundListVo> list(PageValidate pageValidate, FinanceRefundSearchValidate searchValidate);
|
||||
|
||||
/**
|
||||
* 退款日志
|
||||
*
|
||||
* @param recordId 退款日志ID
|
||||
* @return List<FinanceRefundLogVo>
|
||||
*/
|
||||
List<FinanceRefundLogVo> log(Integer recordId);
|
||||
|
||||
Map<String, Object> stat();
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.finance.FinanceWalletSearchValidate;
|
||||
import com.yj.admin.vo.finance.FinanceWalletListVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 用户余额记录服务接口类
|
||||
*/
|
||||
public interface IFinanceWalletService {
|
||||
|
||||
/**
|
||||
* 余额明细列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param searchValidate 搜索参数
|
||||
* @return PageResult<FinanceWalletListVo>
|
||||
*/
|
||||
PageResult<FinanceWalletListVo> list(PageValidate pageValidate, FinanceWalletSearchValidate searchValidate);
|
||||
|
||||
Map<Integer, String> getUmChangeType();
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 主页服务接口类
|
||||
*/
|
||||
public interface IIndexService {
|
||||
|
||||
/**
|
||||
* 控制台数据
|
||||
*
|
||||
* @author fzr
|
||||
* @return Map<String, Object>
|
||||
*/
|
||||
Map<String, Object> index();
|
||||
|
||||
/**
|
||||
* 公共配置
|
||||
*/
|
||||
Map<String, Object> config();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.marketing.MarketingRechargeValidate;
|
||||
import com.yj.admin.vo.marketing.MarketingRechargeVo;
|
||||
|
||||
/**
|
||||
* 营销充值服务接口类
|
||||
*/
|
||||
public interface IMarketingRechargeService {
|
||||
|
||||
/**
|
||||
* 充值配置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return MarketingRechargeVo
|
||||
*/
|
||||
MarketingRechargeVo detail();
|
||||
|
||||
/**
|
||||
* 充值配置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param rechargeValidate 充值参数
|
||||
*/
|
||||
void save(MarketingRechargeValidate rechargeValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.setting.SettingCopyrightValidate;
|
||||
import com.yj.admin.vo.setting.SettingCopyrightVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 网站备案服务接口类
|
||||
*/
|
||||
public interface ISettingCopyrightService {
|
||||
|
||||
/**
|
||||
* 获取网站备案信息
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<SettingCopyrightVo>
|
||||
*/
|
||||
List<SettingCopyrightVo> getCopyright();
|
||||
|
||||
/**
|
||||
* 保存网站备案信息
|
||||
*
|
||||
* @author fzr
|
||||
* @param copyrightValidate 参数
|
||||
*/
|
||||
void setCopyright(SettingCopyrightValidate copyrightValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.setting.DictDataCreateValidate;
|
||||
import com.yj.admin.validate.setting.DictDataUpdateValidate;
|
||||
import com.yj.admin.vo.setting.SettingDictDataVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 字典数据服务接口类
|
||||
*/
|
||||
public interface ISettingDictDataService {
|
||||
|
||||
/**
|
||||
* 字典数据所有
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<DictDataVo>
|
||||
*/
|
||||
List<SettingDictDataVo> all(Map<String, String> params);
|
||||
|
||||
/**
|
||||
* 字典数据列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param params 搜索参数
|
||||
* @return PageResult<DictDataVo>
|
||||
*/
|
||||
PageResult<SettingDictDataVo> list(PageValidate pageValidate, Map<String, String> params);
|
||||
|
||||
/**
|
||||
* 字典数据详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return DictDataVo
|
||||
*/
|
||||
SettingDictDataVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 字典数据新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(DictDataCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 字典数据编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(DictDataUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 字典数据删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param ids 主键
|
||||
*/
|
||||
void del(List<Integer> ids);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.commons.PageValidate;
|
||||
import com.yj.admin.validate.setting.DictTypeCreateValidate;
|
||||
import com.yj.admin.validate.setting.DictTypeUpdateValidate;
|
||||
import com.yj.admin.vo.setting.SettingDictTypeVo;
|
||||
import com.yj.common.core.PageResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 字典类型服务接口类
|
||||
*/
|
||||
public interface ISettingDictTypeService {
|
||||
|
||||
/**
|
||||
* 字典类型所有
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<DictTypeVo>
|
||||
*/
|
||||
List<SettingDictTypeVo> all();
|
||||
|
||||
/**
|
||||
* 字典类型列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param pageValidate 分页参数
|
||||
* @param params 搜索参数
|
||||
* @return PageResult<DictDataVo>
|
||||
*/
|
||||
PageResult<SettingDictTypeVo> list(PageValidate pageValidate, Map<String, String> params);
|
||||
|
||||
/**
|
||||
* 字典类型详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return DictDataVo
|
||||
*/
|
||||
SettingDictTypeVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 字典类型新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param createValidate 参数
|
||||
*/
|
||||
void add(DictTypeCreateValidate createValidate);
|
||||
|
||||
/**
|
||||
* 字典类型编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param updateValidate 参数
|
||||
*/
|
||||
void edit(DictTypeUpdateValidate updateValidate);
|
||||
|
||||
/**
|
||||
* 字典类型删除
|
||||
*
|
||||
* @author fzr
|
||||
* @param ids 主键
|
||||
*/
|
||||
void del(Integer ids);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.setting.SettingLoginValidate;
|
||||
import com.yj.admin.vo.setting.SettingLoginVo;
|
||||
|
||||
/**
|
||||
* 登录设置服务接口类
|
||||
*/
|
||||
public interface ISettingLoginService {
|
||||
|
||||
/**
|
||||
* 登录设置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return SettingLoginVo
|
||||
*/
|
||||
SettingLoginVo getRegisterConfig();
|
||||
|
||||
/**
|
||||
* 登录设置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param loginValidate 参数
|
||||
*/
|
||||
void setRegisterConfig(SettingLoginValidate loginValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.vo.setting.SettingNoticeDetailVo;
|
||||
import com.yj.admin.vo.setting.SettingNoticeListedVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通知设置服务接口类
|
||||
*/
|
||||
public interface ISettingNoticeService {
|
||||
|
||||
/**
|
||||
* 通知设置列表
|
||||
*
|
||||
* @author fzr
|
||||
* @param recipient 1=用户, 2=平台
|
||||
* @return List<NoticeSettingListVo>
|
||||
*/
|
||||
List<SettingNoticeListedVo> list(Integer recipient);
|
||||
|
||||
/**
|
||||
* 通知设置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return NoticeDetailVo
|
||||
*/
|
||||
SettingNoticeDetailVo detail(Integer id);
|
||||
|
||||
/**
|
||||
* 通知设置保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param params 参数
|
||||
*/
|
||||
void save(JSONObject params);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.yj.admin.validate.setting.SettingPayConfigValidate;
|
||||
import com.yj.admin.vo.setting.SettingPaymentMethodVo;
|
||||
import com.yj.common.entity.setting.DevPayConfig;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 支付配置服务接口类
|
||||
*/
|
||||
public interface ISettingPaymentService {
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<List<SettingPaymentMethodVo>>
|
||||
*/
|
||||
HashMap getPayWay();
|
||||
|
||||
/**
|
||||
* 配置列表
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<DevPayConfig>
|
||||
*/
|
||||
JSONObject list();
|
||||
|
||||
/**
|
||||
* 配置详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param id 主键
|
||||
* @return SettingPaymentMethodVo
|
||||
*/
|
||||
DevPayConfig getConfig(Integer id);
|
||||
|
||||
/**
|
||||
* 编辑支付配置
|
||||
*
|
||||
* @author fzr
|
||||
* @param configValidate 参数
|
||||
*/
|
||||
void setConfig(SettingPayConfigValidate configValidate);
|
||||
|
||||
/**
|
||||
* 编辑支付方式
|
||||
*
|
||||
* @author fzr
|
||||
* @param data 参数
|
||||
*/
|
||||
void setPayWay(HashMap<Integer, List<SettingPaymentMethodVo>> data);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.setting.SettingAgreementValidate;
|
||||
import com.yj.admin.vo.setting.SettingAgreementVo;
|
||||
|
||||
/**
|
||||
* 政策协议服务接口类
|
||||
*/
|
||||
public interface ISettingProtocolService {
|
||||
|
||||
/**
|
||||
* 获取政策协议信息
|
||||
*
|
||||
* @author fzr
|
||||
* @return SettingProtocolDetailVo
|
||||
*/
|
||||
SettingAgreementVo getAgreement();
|
||||
|
||||
/**
|
||||
* 保存政策协议信息
|
||||
*
|
||||
* @author fzr
|
||||
* @param protocolValidate 参数
|
||||
*/
|
||||
void setAgreement(SettingAgreementValidate protocolValidate);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.yj.admin.validate.setting.SettingSearchValidate;
|
||||
import com.yj.admin.vo.setting.SettingSearchDetailVo;
|
||||
|
||||
/**
|
||||
* 热门搜索服务接口类
|
||||
*/
|
||||
public interface ISettingSearchService {
|
||||
|
||||
/**
|
||||
* 热门搜索详情
|
||||
*
|
||||
* @author fzr
|
||||
* @return SettingSearchDetailVo
|
||||
*/
|
||||
SettingSearchDetailVo getConfig();
|
||||
|
||||
/**
|
||||
* 热门搜索新增
|
||||
*
|
||||
* @author fzr
|
||||
* @param searchValidate 参数
|
||||
*/
|
||||
void setConfig(SettingSearchValidate searchValidate);
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 短信配置接口类
|
||||
*/
|
||||
public interface ISettingSmsService {
|
||||
|
||||
/**
|
||||
* 短信引擎列表
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<Map<String, Object>>
|
||||
*/
|
||||
List<Map<String, Object>> getConfig();
|
||||
|
||||
/**
|
||||
* 短信引擎详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param alias 别名
|
||||
* @return Map<String, Object>
|
||||
*/
|
||||
Map<String, Object> detail(String type);
|
||||
|
||||
/**
|
||||
* 短信引擎保存
|
||||
*
|
||||
* @author fzr
|
||||
* @param params 参数
|
||||
*/
|
||||
void setConfig(JSONObject params);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
package com.yj.admin.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 存储配置服务接口类
|
||||
*/
|
||||
public interface ISettingStorageService {
|
||||
|
||||
/**
|
||||
* 存储列表
|
||||
*
|
||||
* @author fzr
|
||||
* @return List<Map<String, Object>>
|
||||
*/
|
||||
List<Map<String, Object>> list();
|
||||
|
||||
/**
|
||||
* 存储详情
|
||||
*
|
||||
* @author fzr
|
||||
* @param alias 引擎别名
|
||||
* @return Map<String, Object>
|
||||
*/
|
||||
Map<String, Object> detail(String engine);
|
||||
|
||||
/**
|
||||
* 存储编辑
|
||||
*
|
||||
* @author fzr
|
||||
* @param params 参数
|
||||
*/
|
||||
void setup(Map<String, String> params);
|
||||
|
||||
/**
|
||||
* 存储切换
|
||||
*
|
||||
* @author fzr
|
||||
* @param alias 引擎别名
|
||||
* @param status 状态
|
||||
*/
|
||||
void change(String alias, Integer status);
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue